[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [PATCH v3 3/8] asm-generic: move parts of Arm's asm/kernel.h to common code
On Fri, 2 May 2025, Oleksii Kurochko wrote: > Move the following parts to common with the following changes: > - struct kernel_info: > - Create arch_kernel_info for arch specific kernel information. > At the moment, it contains domain_type for Arm. > - Rename vpl011 to vuart to have more generic name suitable for other archs. > - s/phandle_gic/phandle_intc to have more generic name suitable for other > archs. > - Make text_offset of zimage structure available for RISCV_64. > - Wrap by `#ifdef KERNEL_INFO_SHM_MEM_INIT` definition of KERNEL_SHM_MEM_INIT > and wrap by `#ifndef KERNEL_INFO_INIT` definition of KERNEL_INFO_INIT to > have > ability to override KERNEL_INFO_SHM_MEM_INIT for arch in case it doesn't > want to use generic one. > - Move DOM0LESS_* macros to dom0less-build.h. > - Move all others parts of Arm's kernel.h to xen/fdt-kernel.h. > > Because of the changes in struct kernel_info the correspondent parts of Arm's > code are updated. > > As part of this patch the following clean up happens: > - Drop asm/setup.h from asm/kernel.h as nothing depends from it. > Add inclusion of asm/setup.h for a code which uses device_tree_get_reg() to > avoid compilation issues for CONFIG_STATIC_MEMORY and CONFIG_STATIC_SHM. > - Drop inclusion of asm/kernel.h everywhere except xen/fdt-kernel.h. > > Signed-off-by: Oleksii Kurochko <oleksii.kurochko@xxxxxxxxx> Everything looks good except for one question below. This patch looks like a lot of work, thanks Oleksii! > --- > Changes in v3: > - Only resolving of merge conflicts. > --- > Changes in v2: > - Introduce xen/fdt-kernel.h. > - Move DOM0LESS_* macros to dom0less-build.h. > - Move the rest in asm-generic/kernel.h to xen/fdt-kernel.h. > - Drop inclusion of asm/kernel.h everywhere except xen/fdt-kernel.h. > - Wrap by #if __has_include(....) the member of kernel_info structure: > struct arch_kernel_info arch. > - Update the commit message. > --- > xen/arch/arm/acpi/domain_build.c | 2 +- > xen/arch/arm/dom0less-build.c | 31 +++--- > xen/arch/arm/domain_build.c | 12 +- > xen/arch/arm/include/asm/domain_build.h | 2 +- > xen/arch/arm/include/asm/kernel.h | 126 +-------------------- > xen/arch/arm/include/asm/static-memory.h | 2 +- > xen/arch/arm/include/asm/static-shmem.h | 2 +- > xen/arch/arm/kernel.c | 12 +- > xen/arch/arm/static-memory.c | 1 + > xen/arch/arm/static-shmem.c | 1 + > xen/common/device-tree/dt-overlay.c | 2 +- > xen/include/asm-generic/dom0less-build.h | 28 +++++ > xen/include/xen/fdt-kernel.h | 133 +++++++++++++++++++++++ > 13 files changed, 199 insertions(+), 155 deletions(-) > create mode 100644 xen/include/xen/fdt-kernel.h > > diff --git a/xen/arch/arm/acpi/domain_build.c > b/xen/arch/arm/acpi/domain_build.c > index 2ce75543d0..f9ca8b47e5 100644 > --- a/xen/arch/arm/acpi/domain_build.c > +++ b/xen/arch/arm/acpi/domain_build.c > @@ -10,6 +10,7 @@ > */ > > #include <xen/compile.h> > +#include <xen/fdt-kernel.h> > #include <xen/mm.h> > #include <xen/sched.h> > #include <xen/acpi.h> > @@ -18,7 +19,6 @@ > #include <xen/device_tree.h> > #include <xen/libfdt/libfdt.h> > #include <acpi/actables.h> > -#include <asm/kernel.h> > #include <asm/domain_build.h> > > /* Override macros from asm/page.h to make them work with mfn_t */ > diff --git a/xen/arch/arm/dom0less-build.c b/xen/arch/arm/dom0less-build.c > index ef49495d4f..c0634dd61e 100644 > --- a/xen/arch/arm/dom0less-build.c > +++ b/xen/arch/arm/dom0less-build.c > @@ -1,6 +1,7 @@ > /* SPDX-License-Identifier: GPL-2.0-only */ > #include <xen/device_tree.h> > #include <xen/domain_page.h> > +#include <xen/fdt-kernel.h> > #include <xen/err.h> > #include <xen/event.h> > #include <xen/grant_table.h> > @@ -64,11 +65,11 @@ static int __init make_gicv2_domU_node(struct kernel_info > *kinfo) > if (res) > return res; > > - res = fdt_property_cell(fdt, "linux,phandle", kinfo->phandle_gic); > + res = fdt_property_cell(fdt, "linux,phandle", kinfo->phandle_intc); > if (res) > return res; > > - res = fdt_property_cell(fdt, "phandle", kinfo->phandle_gic); > + res = fdt_property_cell(fdt, "phandle", kinfo->phandle_intc); > if (res) > return res; > > @@ -135,11 +136,11 @@ static int __init make_gicv3_domU_node(struct > kernel_info *kinfo) > if (res) > return res; > > - res = fdt_property_cell(fdt, "linux,phandle", kinfo->phandle_gic); > + res = fdt_property_cell(fdt, "linux,phandle", kinfo->phandle_intc); > if (res) > return res; > > - res = fdt_property_cell(fdt, "phandle", kinfo->phandle_gic); > + res = fdt_property_cell(fdt, "phandle", kinfo->phandle_intc); > if (res) > return res; > > @@ -200,7 +201,7 @@ static int __init make_vpl011_uart_node(struct > kernel_info *kinfo) > return res; > > res = fdt_property_cell(fdt, "interrupt-parent", > - kinfo->phandle_gic); > + kinfo->phandle_intc); > if ( res ) > return res; > > @@ -486,10 +487,10 @@ static int __init domain_handle_dtb_bootmodule(struct > domain *d, > */ > if ( dt_node_cmp(name, "gic") == 0 ) > { > - uint32_t phandle_gic = fdt_get_phandle(pfdt, node_next); > + uint32_t phandle_intc = fdt_get_phandle(pfdt, node_next); > > - if ( phandle_gic != 0 ) > - kinfo->phandle_gic = phandle_gic; > + if ( phandle_intc != 0 ) > + kinfo->phandle_intc = phandle_intc; > continue; > } > > @@ -532,7 +533,7 @@ static int __init prepare_dtb_domU(struct domain *d, > struct kernel_info *kinfo) > int addrcells, sizecells; > int ret, fdt_size = DOMU_DTB_SIZE; > > - kinfo->phandle_gic = GUEST_PHANDLE_GIC; > + kinfo->phandle_intc = GUEST_PHANDLE_GIC; > kinfo->gnttab_start = GUEST_GNTTAB_BASE; > kinfo->gnttab_size = GUEST_GNTTAB_SIZE; > > @@ -594,7 +595,7 @@ static int __init prepare_dtb_domU(struct domain *d, > struct kernel_info *kinfo) > /* > * domain_handle_dtb_bootmodule has to be called before the rest of > * the device tree is generated because it depends on the value of > - * the field phandle_gic. > + * the field phandle_intc. > */ > if ( kinfo->dtb_bootmodule ) > { > @@ -611,7 +612,7 @@ static int __init prepare_dtb_domU(struct domain *d, > struct kernel_info *kinfo) > if ( ret ) > goto err; > > - if ( kinfo->vpl011 ) > + if ( kinfo->vuart ) > { > ret = -EINVAL; > #ifdef CONFIG_SBSA_VUART_CONSOLE > @@ -839,8 +840,8 @@ int __init construct_domU(struct domain *d, > printk("*** LOADING DOMU cpus=%u memory=%#"PRIx64"KB ***\n", > d->max_vcpus, mem); > > - kinfo.vpl011 = dt_property_read_bool(node, "vpl011"); > - if ( kinfo.vpl011 && is_hardware_domain(d) ) > + kinfo.vuart = dt_property_read_bool(node, "vpl011"); > + if ( kinfo.vuart && is_hardware_domain(d) ) > panic("hardware domain cannot specify vpl011\n"); > > rc = dt_property_read_string(node, "xen,enhanced", &dom0less_enhanced); > @@ -872,7 +873,7 @@ int __init construct_domU(struct domain *d, > > #ifdef CONFIG_ARM_64 > /* type must be set before allocate memory */ > - d->arch.type = kinfo.type; > + d->arch.type = kinfo.arch.type; > #endif > if ( is_hardware_domain(d) ) > { > @@ -898,7 +899,7 @@ int __init construct_domU(struct domain *d, > * tree node in prepare_dtb_domU, so initialization on related > variables > * shall be done first. > */ > - if ( kinfo.vpl011 ) > + if ( kinfo.vuart ) > { > rc = domain_vpl011_init(d, NULL); > if ( rc < 0 ) > diff --git a/xen/arch/arm/domain_build.c b/xen/arch/arm/domain_build.c > index 270a6b97e4..8c7a054718 100644 > --- a/xen/arch/arm/domain_build.c > +++ b/xen/arch/arm/domain_build.c > @@ -1,6 +1,7 @@ > /* SPDX-License-Identifier: GPL-2.0-only */ > #include <xen/init.h> > #include <xen/compile.h> > +#include <xen/fdt-kernel.h> > #include <xen/lib.h> > #include <xen/llc-coloring.h> > #include <xen/mm.h> > @@ -20,7 +21,6 @@ > #include <xen/vmap.h> > #include <xen/warning.h> > #include <asm/device.h> > -#include <asm/kernel.h> > #include <asm/setup.h> > #include <asm/tee/tee.h> > #include <asm/pci.h> > @@ -747,7 +747,7 @@ static int __init fdt_property_interrupts(const struct > kernel_info *kinfo, > return res; > > res = fdt_property_cell(kinfo->fdt, "interrupt-parent", > - kinfo->phandle_gic); > + kinfo->phandle_intc); > > return res; > } > @@ -2026,7 +2026,7 @@ static int __init prepare_dtb_hwdom(struct domain *d, > struct kernel_info *kinfo) > > ASSERT(dt_host && (dt_host->sibling == NULL)); > > - kinfo->phandle_gic = dt_interrupt_controller->phandle; > + kinfo->phandle_intc = dt_interrupt_controller->phandle; > fdt = device_tree_flattened; > > new_size = fdt_totalsize(fdt) + DOM0_FDT_EXTRA_SIZE; > @@ -2196,13 +2196,13 @@ int __init construct_domain(struct domain *d, struct > kernel_info *kinfo) > > #ifdef CONFIG_ARM_64 > /* if aarch32 mode is not supported at EL1 do not allow 32-bit domain */ > - if ( !(cpu_has_el1_32) && kinfo->type == DOMAIN_32BIT ) > + if ( !(cpu_has_el1_32) && kinfo->arch.type == DOMAIN_32BIT ) > { > printk("Platform does not support 32-bit domain\n"); > return -EINVAL; > } > > - if ( is_sve_domain(d) && (kinfo->type == DOMAIN_32BIT) ) > + if ( is_sve_domain(d) && (kinfo->arch.type == DOMAIN_32BIT) ) > { > printk("SVE is not available for 32-bit domain\n"); > return -EINVAL; > @@ -2318,7 +2318,7 @@ int __init construct_hwdom(struct kernel_info *kinfo, > > #ifdef CONFIG_ARM_64 > /* type must be set before allocate_memory */ > - d->arch.type = kinfo->type; > + d->arch.type = kinfo->arch.type; > #endif > find_gnttab_region(d, kinfo); > if ( is_domain_direct_mapped(d) ) > diff --git a/xen/arch/arm/include/asm/domain_build.h > b/xen/arch/arm/include/asm/domain_build.h > index 378c10cc98..df1c0fe301 100644 > --- a/xen/arch/arm/include/asm/domain_build.h > +++ b/xen/arch/arm/include/asm/domain_build.h > @@ -1,8 +1,8 @@ > #ifndef __ASM_DOMAIN_BUILD_H__ > #define __ASM_DOMAIN_BUILD_H__ > > +#include <xen/fdt-kernel.h> > #include <xen/sched.h> > -#include <asm/kernel.h> > > typedef __be32 gic_interrupt_t[3]; > typedef bool (*alloc_domheap_mem_cb)(struct domain *d, struct page_info *pg, > diff --git a/xen/arch/arm/include/asm/kernel.h > b/xen/arch/arm/include/asm/kernel.h > index bdc96f4c18..cfeab792c7 100644 > --- a/xen/arch/arm/include/asm/kernel.h > +++ b/xen/arch/arm/include/asm/kernel.h > @@ -6,137 +6,15 @@ > #ifndef __ARCH_ARM_KERNEL_H__ > #define __ARCH_ARM_KERNEL_H__ > > -#include <xen/device_tree.h> > #include <asm/domain.h> > -#include <asm/setup.h> > > -/* > - * List of possible features for dom0less domUs > - * > - * DOM0LESS_ENHANCED_NO_XS: Notify the OS it is running on top of Xen. All > the > - * default features (excluding Xenstore) will be > - * available. Note that an OS *must* not rely on > the > - * availability of Xen features if this is not set. > - * DOM0LESS_XENSTORE: Xenstore will be enabled for the VM. The > - * xenstore page allocation is done by Xen at > - * domain creation. This feature can't be > - * enabled without the DOM0LESS_ENHANCED_NO_XS. > - * DOM0LESS_XS_LEGACY Xenstore will be enabled for the VM, the > - * xenstore page allocation will happen in > - * init-dom0less. This feature can't be enabled > - * without the DOM0LESS_ENHANCED_NO_XS. > - * DOM0LESS_ENHANCED: Notify the OS it is running on top of Xen. All > the > - * default features (including Xenstore) will be > - * available. Note that an OS *must* not rely on > the > - * availability of Xen features if this is not set. > - * DOM0LESS_ENHANCED_LEGACY: Same as before, but using DOM0LESS_XS_LEGACY. > - */ > -#define DOM0LESS_ENHANCED_NO_XS BIT(0, U) > -#define DOM0LESS_XENSTORE BIT(1, U) > -#define DOM0LESS_XS_LEGACY BIT(2, U) > -#define DOM0LESS_ENHANCED_LEGACY (DOM0LESS_ENHANCED_NO_XS | > DOM0LESS_XS_LEGACY) > -#define DOM0LESS_ENHANCED (DOM0LESS_ENHANCED_NO_XS | > DOM0LESS_XENSTORE) > - > -struct kernel_info { > +struct arch_kernel_info > +{ > #ifdef CONFIG_ARM_64 > enum domain_type type; > #endif > - > - struct domain *d; > - > - void *fdt; /* flat device tree */ > - paddr_t unassigned_mem; /* RAM not (yet) assigned to a bank */ > - struct meminfo mem; > -#ifdef CONFIG_STATIC_SHM > - struct shared_meminfo shm_mem; > -#endif > - > - /* kernel entry point */ > - paddr_t entry; > - > - /* grant table region */ > - paddr_t gnttab_start; > - paddr_t gnttab_size; > - > - /* boot blob load addresses */ > - const struct bootmodule *kernel_bootmodule, *initrd_bootmodule, > *dtb_bootmodule; > - const char* cmdline; > - paddr_t dtb_paddr; > - paddr_t initrd_paddr; > - > - /* Enable pl011 emulation */ > - bool vpl011; > - > - /* Enable/Disable PV drivers interfaces */ > - uint16_t dom0less_feature; > - > - /* GIC phandle */ > - uint32_t phandle_gic; > - > - /* loader to use for this kernel */ > - void (*load)(struct kernel_info *info); > - /* loader specific state */ > - union { > - struct { > - paddr_t kernel_addr; > - paddr_t len; > -#ifdef CONFIG_ARM_64 > - paddr_t text_offset; /* 64-bit Image only */ > -#endif > - paddr_t start; /* Must be 0 for 64-bit Image */ > - } zimage; > - }; > }; > > -static inline struct membanks *kernel_info_get_mem(struct kernel_info *kinfo) > -{ > - return container_of(&kinfo->mem.common, struct membanks, common); > -} > - > -static inline const struct membanks * > -kernel_info_get_mem_const(const struct kernel_info *kinfo) > -{ > - return container_of(&kinfo->mem.common, const struct membanks, common); > -} > - > -#ifdef CONFIG_STATIC_SHM > -#define KERNEL_INFO_SHM_MEM_INIT \ > - .shm_mem.common.max_banks = NR_SHMEM_BANKS, \ > - .shm_mem.common.type = STATIC_SHARED_MEMORY, This line type = STATIC_SHARED_MEMORY, > -#else > -#define KERNEL_INFO_SHM_MEM_INIT > -#endif > - > -#define KERNEL_INFO_INIT \ > -{ \ > - .mem.common.max_banks = NR_MEM_BANKS, \ > - .mem.common.type = MEMORY, \ and also this line type = MEMORY, ... > - KERNEL_INFO_SHM_MEM_INIT \ > -} > - > -/* > - * Probe the kernel to detemine its type and select a loader. > - * > - * Sets in info: > - * ->type > - * ->load hook, and sets loader specific variables ->zimage > - */ > -int kernel_probe(struct kernel_info *info, const struct dt_device_node > *domain); > - > -/* > - * Loads the kernel into guest RAM. > - * > - * Expects to be set in info when called: > - * ->mem > - * ->fdt > - * > - * Sets in info: > - * ->entry > - * ->dtb_paddr > - * ->initrd_paddr > - */ > -void kernel_load(struct kernel_info *info); > - > #endif /* #ifdef __ARCH_ARM_KERNEL_H__ */ > > /* > diff --git a/xen/arch/arm/include/asm/static-memory.h > b/xen/arch/arm/include/asm/static-memory.h > index 804166e541..a32a3c6553 100644 > --- a/xen/arch/arm/include/asm/static-memory.h > +++ b/xen/arch/arm/include/asm/static-memory.h > @@ -3,8 +3,8 @@ > #ifndef __ASM_STATIC_MEMORY_H_ > #define __ASM_STATIC_MEMORY_H_ > > +#include <xen/fdt-kernel.h> > #include <xen/pfn.h> > -#include <asm/kernel.h> > > #ifdef CONFIG_STATIC_MEMORY > > diff --git a/xen/arch/arm/include/asm/static-shmem.h > b/xen/arch/arm/include/asm/static-shmem.h > index 94eaa9d500..a4f853805a 100644 > --- a/xen/arch/arm/include/asm/static-shmem.h > +++ b/xen/arch/arm/include/asm/static-shmem.h > @@ -3,8 +3,8 @@ > #ifndef __ASM_STATIC_SHMEM_H_ > #define __ASM_STATIC_SHMEM_H_ > > +#include <xen/fdt-kernel.h> > #include <xen/types.h> > -#include <asm/kernel.h> > #include <asm/setup.h> > > #ifdef CONFIG_STATIC_SHM > diff --git a/xen/arch/arm/kernel.c b/xen/arch/arm/kernel.c > index 2647812e8e..f00fc388db 100644 > --- a/xen/arch/arm/kernel.c > +++ b/xen/arch/arm/kernel.c > @@ -7,6 +7,7 @@ > #include <xen/byteorder.h> > #include <xen/domain_page.h> > #include <xen/errno.h> > +#include <xen/fdt-kernel.h> > #include <xen/guest_access.h> > #include <xen/gunzip.h> > #include <xen/init.h> > @@ -16,6 +17,7 @@ > #include <xen/sched.h> > #include <xen/vmap.h> > > +#include <asm/domain_build.h> > #include <asm/kernel.h> > #include <asm/setup.h> > > @@ -101,7 +103,7 @@ static paddr_t __init kernel_zimage_place(struct > kernel_info *info) > paddr_t load_addr; > > #ifdef CONFIG_ARM_64 > - if ( (info->type == DOMAIN_64BIT) && (info->zimage.start == 0) ) > + if ( (info->arch.type == DOMAIN_64BIT) && (info->zimage.start == 0) ) > return mem->bank[0].start + info->zimage.text_offset; > #endif > > @@ -371,10 +373,10 @@ static int __init kernel_uimage_probe(struct > kernel_info *info, > switch ( uimage.arch ) > { > case IH_ARCH_ARM: > - info->type = DOMAIN_32BIT; > + info->arch.type = DOMAIN_32BIT; > break; > case IH_ARCH_ARM64: > - info->type = DOMAIN_64BIT; > + info->arch.type = DOMAIN_64BIT; > break; > default: > printk(XENLOG_ERR "Unsupported uImage arch type %d\n", uimage.arch); > @@ -444,7 +446,7 @@ static int __init kernel_zimage64_probe(struct > kernel_info *info, > > info->load = kernel_zimage_load; > > - info->type = DOMAIN_64BIT; > + info->arch.type = DOMAIN_64BIT; > > return 0; > } > @@ -496,7 +498,7 @@ static int __init kernel_zimage32_probe(struct > kernel_info *info, > info->load = kernel_zimage_load; > > #ifdef CONFIG_ARM_64 > - info->type = DOMAIN_32BIT; > + info->arch.type = DOMAIN_32BIT; > #endif > > return 0; > diff --git a/xen/arch/arm/static-memory.c b/xen/arch/arm/static-memory.c > index d4585c5a06..e0f76afcd8 100644 > --- a/xen/arch/arm/static-memory.c > +++ b/xen/arch/arm/static-memory.c > @@ -2,6 +2,7 @@ > > #include <xen/sched.h> > > +#include <asm/setup.h> > #include <asm/static-memory.h> > > static bool __init append_static_memory_to_bank(struct domain *d, > diff --git a/xen/arch/arm/static-shmem.c b/xen/arch/arm/static-shmem.c > index e8d4ca3ba3..14ae48fb1e 100644 > --- a/xen/arch/arm/static-shmem.c > +++ b/xen/arch/arm/static-shmem.c > @@ -6,6 +6,7 @@ > #include <xen/sched.h> > > #include <asm/domain_build.h> > +#include <asm/setup.h> > #include <asm/static-memory.h> > #include <asm/static-shmem.h> > > diff --git a/xen/common/device-tree/dt-overlay.c > b/xen/common/device-tree/dt-overlay.c > index 97fb99eaaa..81107cb48d 100644 > --- a/xen/common/device-tree/dt-overlay.c > +++ b/xen/common/device-tree/dt-overlay.c > @@ -6,8 +6,8 @@ > * Written by Vikram Garhwal <vikram.garhwal@xxxxxxx> > * > */ > -#include <asm/domain_build.h> > #include <xen/dt-overlay.h> > +#include <xen/fdt-kernel.h> > #include <xen/guest_access.h> > #include <xen/iocap.h> > #include <xen/libfdt/libfdt.h> > diff --git a/xen/include/asm-generic/dom0less-build.h > b/xen/include/asm-generic/dom0less-build.h > index 5655571a66..f095135caa 100644 > --- a/xen/include/asm-generic/dom0less-build.h > +++ b/xen/include/asm-generic/dom0less-build.h > @@ -16,6 +16,34 @@ struct dt_device_node; > #define XENSTORE_PFN_LATE_ALLOC UINT64_MAX > extern bool need_xenstore; > > +/* > + * List of possible features for dom0less domUs > + * > + * DOM0LESS_ENHANCED_NO_XS: Notify the OS it is running on top of Xen. All > the > + * default features (excluding Xenstore) will be > + * available. Note that an OS *must* not rely on > the > + * availability of Xen features if this is not set. > + * DOM0LESS_XENSTORE: Xenstore will be enabled for the VM. The > + * xenstore page allocation is done by Xen at > + * domain creation. This feature can't be > + * enabled without the DOM0LESS_ENHANCED_NO_XS. > + * DOM0LESS_XS_LEGACY Xenstore will be enabled for the VM, the > + * xenstore page allocation will happen in > + * init-dom0less. This feature can't be enabled > + * without the DOM0LESS_ENHANCED_NO_XS. > + * DOM0LESS_ENHANCED: Notify the OS it is running on top of Xen. All > the > + * default features (including Xenstore) will be > + * available. Note that an OS *must* not rely on > the > + * availability of Xen features if this is not set. > + * DOM0LESS_ENHANCED_LEGACY: Same as before, but using DOM0LESS_XS_LEGACY. > + > + */ > +#define DOM0LESS_ENHANCED_NO_XS BIT(0, U) > +#define DOM0LESS_XENSTORE BIT(1, U) > +#define DOM0LESS_XS_LEGACY BIT(2, U) > +#define DOM0LESS_ENHANCED_LEGACY (DOM0LESS_ENHANCED_NO_XS | > DOM0LESS_XS_LEGACY) > +#define DOM0LESS_ENHANCED (DOM0LESS_ENHANCED_NO_XS | > DOM0LESS_XENSTORE) > + > void create_domUs(void); > bool is_dom0less_mode(void); > void set_xs_domain(struct domain *d); > diff --git a/xen/include/xen/fdt-kernel.h b/xen/include/xen/fdt-kernel.h > new file mode 100644 > index 0000000000..c81e759423 > --- /dev/null > +++ b/xen/include/xen/fdt-kernel.h > @@ -0,0 +1,133 @@ > +/* SPDX-License-Identifier: GPL-2.0-only */ > +/* > + * For Kernel image loading. > + * > + * Copyright (C) 2011 Citrix Systems, Inc. > + */ > +#ifndef __XEN_FDT_KERNEL_H__ > +#define __XEN_FDT_KERNEL_H__ > + > +#include <xen/bootfdt.h> > +#include <xen/device_tree.h> > +#include <xen/types.h> > + > +#if __has_include(<asm/kernel.h>) > +# include <asm/kernel.h> > +#endif > + > +struct kernel_info { > + struct domain *d; > + > + void *fdt; /* flat device tree */ > + paddr_t unassigned_mem; /* RAM not (yet) assigned to a bank */ > + struct meminfo mem; > +#ifdef CONFIG_STATIC_SHM > + struct shared_meminfo shm_mem; > +#endif > + > + /* kernel entry point */ > + paddr_t entry; > + > + /* grant table region */ > + paddr_t gnttab_start; > + paddr_t gnttab_size; > + > + /* boot blob load addresses */ > + const struct bootmodule *kernel_bootmodule, *initrd_bootmodule, > *dtb_bootmodule; > + const char* cmdline; > + paddr_t dtb_paddr; > + paddr_t initrd_paddr; > + > + /* Enable uart emulation */ > + bool vuart; > + > + /* Enable/Disable PV drivers interfaces */ > + uint16_t dom0less_feature; > + > + /* Interrupt controller phandle */ > + uint32_t phandle_intc; > + > + /* loader to use for this kernel */ > + void (*load)(struct kernel_info *info); > + > + /* loader specific state */ > + union { > + struct { > + paddr_t kernel_addr; > + paddr_t len; > +#if defined(CONFIG_ARM_64) || defined(CONFIG_RISCV_64) > + paddr_t text_offset; /* 64-bit Image only */ > +#endif > + paddr_t start; /* Must be 0 for 64-bit Image */ > + } zimage; > + }; > + > +#if __has_include(<asm/kernel.h>) > + struct arch_kernel_info arch; > +#endif > +}; > + > +static inline struct membanks *kernel_info_get_mem(struct kernel_info *kinfo) > +{ > + return container_of(&kinfo->mem.common, struct membanks, common); > +} > + > +static inline const struct membanks * > +kernel_info_get_mem_const(const struct kernel_info *kinfo) > +{ > + return container_of(&kinfo->mem.common, const struct membanks, common); > +} > + > +#ifndef KERNEL_INFO_SHM_MEM_INIT > + > +#ifdef CONFIG_STATIC_SHM > +#define KERNEL_INFO_SHM_MEM_INIT .shm_mem.common.max_banks = NR_SHMEM_BANKS, they are missing here... > +#else > +#define KERNEL_INFO_SHM_MEM_INIT > +#endif > + > +#endif /* KERNEL_INFO_SHM_MEM_INIT */ > + > +#ifndef KERNEL_INFO_INIT > + > +#define KERNEL_INFO_INIT \ > +{ \ > + .mem.common.max_banks = NR_MEM_BANKS, \ and also here. Why? > + KERNEL_INFO_SHM_MEM_INIT \ > +} > + > +#endif /* KERNEL_INFO_INIT */ > + > +/* > + * Probe the kernel to detemine its type and select a loader. > + * > + * Sets in info: > + * ->type > + * ->load hook, and sets loader specific variables ->zimage > + */ > +int kernel_probe(struct kernel_info *info, const struct dt_device_node > *domain); > + > +/* > + * Loads the kernel into guest RAM. > + * > + * Expects to be set in info when called: > + * ->mem > + * ->fdt > + * > + * Sets in info: > + * ->entry > + * ->dtb_paddr > + * ->initrd_paddr > + */ > +void kernel_load(struct kernel_info *info); > + > +#endif /* __XEN_FDT_KERNEL_H__ */ > + > +/* > + * Local variables: > + * mode: C > + * c-file-style: "BSD" > + * c-basic-offset: 4 > + * indent-tabs-mode: nil > + * End: > + */ > -- > 2.49.0 >
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |