[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [PATCH v3 5/9] xen/device-tree: Move Arm's setup.c bootinfo functions to common
Hi Julien, On 3/21/24 12:47 PM, Julien Grall wrote: > Hi Shawn, > > On 14/03/2024 22:15, Shawn Anastasio wrote: >> Arm's setup.c contains a collection of functions for parsing memory map >> and other boot information from a device tree. Since these routines are >> generally useful on any architecture that supports device tree booting, >> move them into xen/common/device-tree. >> >> Suggested-by: Julien Grall <julien@xxxxxxx> >> Signed-off-by: Shawn Anastasio <sanastasio@xxxxxxxxxxxxxxxxxxxxx> >> --- >> MAINTAINERS | 1 + >> xen/arch/arm/setup.c | 419 -------------------------- >> xen/common/Makefile | 1 + >> xen/common/device-tree/Makefile | 1 + >> xen/common/device-tree/bootinfo.c | 469 ++++++++++++++++++++++++++++++ > > The new bootinfo.c is exported quite a few functions. Please introduce > an generic header with the associated functions/structures. > Good suggestion, will do. > [...] > >> diff --git a/xen/common/Makefile b/xen/common/Makefile >> index e5eee19a85..3a39dd35f2 100644 >> --- a/xen/common/Makefile >> +++ b/xen/common/Makefile >> @@ -76,6 +76,7 @@ obj-$(CONFIG_UBSAN) += ubsan/ >> obj-$(CONFIG_NEEDS_LIBELF) += libelf/ >> obj-$(CONFIG_HAS_DEVICE_TREE) += libfdt/ >> +obj-$(CONFIG_HAS_DEVICE_TREE) += device-tree/ >> CONF_FILE := $(if $(patsubst >> /%,,$(KCONFIG_CONFIG)),$(objtree)/)$(KCONFIG_CONFIG) >> $(obj)/config.gz: $(CONF_FILE) >> diff --git a/xen/common/device-tree/Makefile >> b/xen/common/device-tree/Makefile >> new file mode 100644 >> index 0000000000..c97b2bd88c >> --- /dev/null >> +++ b/xen/common/device-tree/Makefile >> @@ -0,0 +1 @@ >> +obj-y += bootinfo.o >> diff --git a/xen/common/device-tree/bootinfo.c >> b/xen/common/device-tree/bootinfo.c >> new file mode 100644 >> index 0000000000..a6c0fe7917 >> --- /dev/null >> +++ b/xen/common/device-tree/bootinfo.c >> @@ -0,0 +1,469 @@ >> +/* SPDX-License-Identifier: GPL-2.0-or-later */ >> +/* >> + * Derived from $xen/arch/arm/setup.c. >> + * >> + * Early device tree parsing and bookkeeping routines. >> + * >> + * Tim Deegan <tim@xxxxxxx> >> + * Copyright (c) 2011 Citrix Systems. >> + * Copyright (c) 2024 Raptor Engineering LLC >> + */ >> + >> +#include <xen/compile.h> >> +#include <xen/errno.h> >> +#include <xen/device_tree.h> >> +#include <xen/domain_page.h> >> +#include <xen/grant_table.h> >> +#include <xen/types.h> >> +#include <xen/string.h> >> +#include <xen/serial.h> >> +#include <xen/sched.h> >> +#include <xen/console.h> >> +#include <xen/err.h> >> +#include <xen/init.h> >> +#include <xen/irq.h> >> +#include <xen/mm.h> >> +#include <xen/param.h> >> +#include <xen/softirq.h> >> +#include <xen/keyhandler.h> >> +#include <xen/cpu.h> >> +#include <xen/pfn.h> >> +#include <xen/virtual_region.h> >> +#include <xen/vmap.h> >> +#include <xen/trace.h> >> +#include <xen/libfdt/libfdt-xen.h> >> +#include <xen/acpi.h> >> +#include <xen/warning.h> >> +#include <xen/hypercall.h> >> +#include <asm/page.h> >> +#include <asm/current.h> >> +#include <asm/setup.h> >> +#include <asm/setup.h> > > setup.h seems duplicated. But this list of headers look suspiciously > very long for the code you are moving. Can you look at reduce the number > of includes? > > Also, please take the opportunity to sort them out. Sure, I'll clean up the order and drop any unneeded includes. > > [...] > >> +/* >> + * Populate the boot allocator. >> + * If a static heap was not provided by the admin, all the RAM but the >> + * following regions will be added: >> + * - Modules (e.g., Xen, Kernel) >> + * - Reserved regions >> + * - Xenheap (arm32 only) >> + * If a static heap was provided by the admin, populate the boot >> + * allocator with the corresponding regions only, but with Xenheap >> excluded >> + * on arm32. >> + */ >> +void __init populate_boot_allocator(void) >> +{ >> + unsigned int i; >> + const struct meminfo *banks = &bootinfo.mem; >> + paddr_t s, e; >> + >> + if ( bootinfo.static_heap ) >> + { >> + for ( i = 0 ; i < bootinfo.reserved_mem.nr_banks; i++ ) >> + { >> + if ( bootinfo.reserved_mem.bank[i].type != >> MEMBANK_STATIC_HEAP ) >> + continue; >> + >> + s = bootinfo.reserved_mem.bank[i].start; >> + e = s + bootinfo.reserved_mem.bank[i].size; >> +#ifdef CONFIG_ARM_32 > > I think this wants to be replaced with #ifdef CONFIG_SEPARATE_XENHEAP > same ... > >> + /* Avoid the xenheap, note that the xenheap cannot across >> a bank */ >> + if ( s <= mfn_to_maddr(directmap_mfn_start) && >> + e >= mfn_to_maddr(directmap_mfn_end) ) >> + { >> + init_boot_pages(s, mfn_to_maddr(directmap_mfn_start)); >> + init_boot_pages(mfn_to_maddr(directmap_mfn_end), e); >> + } >> + else >> +#endif >> + init_boot_pages(s, e); >> + } >> + >> + return; >> + } >> + >> + for ( i = 0; i < banks->nr_banks; i++ ) >> + { >> + const struct membank *bank = &banks->bank[i]; >> + paddr_t bank_end = bank->start + bank->size; >> + >> + s = bank->start; >> + while ( s < bank_end ) >> + { >> + paddr_t n = bank_end; >> + >> + e = next_module(s, &n); >> + >> + if ( e == ~(paddr_t)0 ) >> + e = n = bank_end; >> + >> + /* >> + * Module in a RAM bank other than the one which we are >> + * not dealing with here. >> + */ >> + if ( e > bank_end ) >> + e = bank_end; >> + >> +#ifdef CONFIG_ARM_32 > > ... here. This comment on top of the function would also need to be > updated. Good catch, will update the conditional as well as the function's comment accordingly. > > Cheers, Thanks, Shawn
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |