|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [PATCH v2 09/15] xen/dt: Move bootinfo functions to a new bootinfo.h
On Thu, 5 Jun 2025, Alejandro Vallejo wrote:
> Part of an unpicking process to extract bootfdt contents independent of
> bootinfo to a separate file for x86 to take.
>
> With this, bootfdt.h can be cleanly included from x86. A later patch
> extracts the definitions so the functions may be called too.
>
> Not a functional change.
>
> Signed-off-by: Alejandro Vallejo <agarciav@xxxxxxx>
> ---
> xen/arch/arm/domain_build.c | 1 +
> xen/arch/arm/mmu/mm.c | 1 +
> xen/arch/arm/setup.c | 1 +
> xen/arch/riscv/mm.c | 2 +-
> xen/arch/riscv/setup.c | 2 +-
> xen/common/device-tree/bootfdt.c | 2 +-
> xen/common/device-tree/bootinfo.c | 2 +-
> xen/common/device-tree/dom0less-build.c | 2 +-
> xen/common/device-tree/domain-build.c | 2 +-
> xen/common/device-tree/kernel.c | 2 +-
> xen/include/xen/bootfdt.h | 208 -----------------------
> xen/include/xen/bootinfo.h | 213 ++++++++++++++++++++++++
> xen/include/xen/device_tree.h | 2 +-
> xen/include/xen/fdt-domain-build.h | 2 +-
> xen/include/xen/fdt-kernel.h | 2 +-
> 15 files changed, 226 insertions(+), 218 deletions(-)
> create mode 100644 xen/include/xen/bootinfo.h
>
> diff --git a/xen/arch/arm/domain_build.c b/xen/arch/arm/domain_build.c
> index 5317665555..497cfbe860 100644
> --- a/xen/arch/arm/domain_build.c
> +++ b/xen/arch/arm/domain_build.c
> @@ -1,5 +1,6 @@
> /* SPDX-License-Identifier: GPL-2.0-only */
> #include <xen/init.h>
> +#include <xen/bootinfo.h>
> #include <xen/compile.h>
> #include <xen/fdt-domain-build.h>
> #include <xen/fdt-kernel.h>
> diff --git a/xen/arch/arm/mmu/mm.c b/xen/arch/arm/mmu/mm.c
> index 9c50479c63..77f82757bb 100644
> --- a/xen/arch/arm/mmu/mm.c
> +++ b/xen/arch/arm/mmu/mm.c
> @@ -1,5 +1,6 @@
> /* SPDX-License-Identifier: GPL-2.0-or-later */
>
> +#include <xen/bootinfo.h>
It doesn't look like this is needed.
Other than that:
Reviewed-by: Stefano Stabellini <sstabellini@xxxxxxxxxx>
> #include <xen/init.h>
> #include <xen/lib.h>
> #include <xen/macros.h>
> diff --git a/xen/arch/arm/setup.c b/xen/arch/arm/setup.c
> index 734e23da44..439b1d9df2 100644
> --- a/xen/arch/arm/setup.c
> +++ b/xen/arch/arm/setup.c
> @@ -8,6 +8,7 @@
> * Copyright (c) 2011 Citrix Systems.
> */
>
> +#include <xen/bootinfo.h>
> #include <xen/compile.h>
> #include <xen/device_tree.h>
> #include <xen/domain_page.h>
> diff --git a/xen/arch/riscv/mm.c b/xen/arch/riscv/mm.c
> index 4047d67c0e..6ccd38091b 100644
> --- a/xen/arch/riscv/mm.c
> +++ b/xen/arch/riscv/mm.c
> @@ -1,6 +1,6 @@
> /* SPDX-License-Identifier: GPL-2.0-only */
>
> -#include <xen/bootfdt.h>
> +#include <xen/bootinfo.h>
> #include <xen/bug.h>
> #include <xen/compiler.h>
> #include <xen/init.h>
> diff --git a/xen/arch/riscv/setup.c b/xen/arch/riscv/setup.c
> index 8bcd19218d..3e99e2e194 100644
> --- a/xen/arch/riscv/setup.c
> +++ b/xen/arch/riscv/setup.c
> @@ -2,7 +2,7 @@
>
> #include <xen/acpi.h>
> #include <xen/bug.h>
> -#include <xen/bootfdt.h>
> +#include <xen/bootinfo.h>
> #include <xen/compile.h>
> #include <xen/device_tree.h>
> #include <xen/init.h>
> diff --git a/xen/common/device-tree/bootfdt.c
> b/xen/common/device-tree/bootfdt.c
> index ab449db8d6..7ff62e1e3e 100644
> --- a/xen/common/device-tree/bootfdt.c
> +++ b/xen/common/device-tree/bootfdt.c
> @@ -5,7 +5,7 @@
> * Copyright (C) 2012-2014 Citrix Systems, Inc.
> */
>
> -#include <xen/bootfdt.h>
> +#include <xen/bootinfo.h>
> #include <xen/device_tree.h>
> #include <xen/efi.h>
> #include <xen/init.h>
> diff --git a/xen/common/device-tree/bootinfo.c
> b/xen/common/device-tree/bootinfo.c
> index 717cfa0962..69491bdb0b 100644
> --- a/xen/common/device-tree/bootinfo.c
> +++ b/xen/common/device-tree/bootinfo.c
> @@ -10,7 +10,7 @@
> */
>
> #include <xen/acpi.h>
> -#include <xen/bootfdt.h>
> +#include <xen/bootinfo.h>
> #include <xen/bug.h>
> #include <xen/device_tree.h>
> #include <xen/init.h>
> diff --git a/xen/common/device-tree/dom0less-build.c
> b/xen/common/device-tree/dom0less-build.c
> index 809cb3c232..42165e78af 100644
> --- a/xen/common/device-tree/dom0less-build.c
> +++ b/xen/common/device-tree/dom0less-build.c
> @@ -1,6 +1,6 @@
> /* SPDX-License-Identifier: GPL-2.0-only */
>
> -#include <xen/bootfdt.h>
> +#include <xen/bootinfo.h>
> #include <xen/device_tree.h>
> #include <xen/domain.h>
> #include <xen/domain_page.h>
> diff --git a/xen/common/device-tree/domain-build.c
> b/xen/common/device-tree/domain-build.c
> index e602cb91c9..80235aa56a 100644
> --- a/xen/common/device-tree/domain-build.c
> +++ b/xen/common/device-tree/domain-build.c
> @@ -1,6 +1,6 @@
> /* SPDX-License-Identifier: GPL-2.0-only */
>
> -#include <xen/bootfdt.h>
> +#include <xen/bootinfo.h>
> #include <xen/fdt-domain-build.h>
> #include <xen/init.h>
> #include <xen/lib.h>
> diff --git a/xen/common/device-tree/kernel.c b/xen/common/device-tree/kernel.c
> index 3960f951f7..0463bfd8df 100644
> --- a/xen/common/device-tree/kernel.c
> +++ b/xen/common/device-tree/kernel.c
> @@ -1,6 +1,6 @@
> /* SPDX-License-Identifier: GPL-2.0-only */
>
> -#include <xen/bootfdt.h>
> +#include <xen/bootinfo.h>
> #include <xen/device_tree.h>
> #include <xen/fdt-kernel.h>
> #include <xen/errno.h>
> diff --git a/xen/include/xen/bootfdt.h b/xen/include/xen/bootfdt.h
> index 1b89986e10..a87b5212a6 100644
> --- a/xen/include/xen/bootfdt.h
> +++ b/xen/include/xen/bootfdt.h
> @@ -4,9 +4,6 @@
>
> #include <xen/byteorder.h>
> #include <xen/types.h>
> -#include <xen/kernel.h>
> -#include <xen/macros.h>
> -#include <xen/xmalloc.h>
>
> #if __has_include(<asm/bootfdt.h>)
> #include <asm/bootfdt.h>
> @@ -14,15 +11,10 @@
>
> #define MIN_FDT_ALIGN 8
>
> -#define NR_MEM_BANKS 256
> -#define NR_SHMEM_BANKS 32
> -
> /* Default #address and #size cells */
> #define DT_ROOT_NODE_ADDR_CELLS_DEFAULT 2
> #define DT_ROOT_NODE_SIZE_CELLS_DEFAULT 1
>
> -#define MAX_MODULES 32 /* Current maximum useful modules */
> -
> #define DEVICE_TREE_MAX_DEPTH 16
>
> /* Helper to read a big number; size is in cells (not bytes) */
> @@ -75,78 +67,6 @@ typedef enum {
> BOOTMOD_UNKNOWN
> } bootmodule_kind;
>
> -enum membank_type {
> - /*
> - * The MEMBANK_DEFAULT type refers to either reserved memory for the
> - * device/firmware (when the bank is in 'reserved_mem') or any RAM (when
> - * the bank is in 'mem').
> - */
> - MEMBANK_DEFAULT,
> - /*
> - * The MEMBANK_STATIC_DOMAIN type is used to indicate whether the memory
> - * bank is bound to a static Xen domain. It is only valid when the bank
> - * is in reserved_mem.
> - */
> - MEMBANK_STATIC_DOMAIN,
> - /*
> - * The MEMBANK_STATIC_HEAP type is used to indicate whether the memory
> - * bank is reserved as static heap. It is only valid when the bank is
> - * in reserved_mem.
> - */
> - MEMBANK_STATIC_HEAP,
> - /*
> - * The MEMBANK_FDT_RESVMEM type is used to indicate whether the memory
> - * bank is from the FDT reserve map.
> - */
> - MEMBANK_FDT_RESVMEM,
> -};
> -
> -enum region_type {
> - MEMORY,
> - RESERVED_MEMORY,
> - STATIC_SHARED_MEMORY
> -};
> -
> -/* Indicates the maximum number of characters(\0 included) for shm_id */
> -#define MAX_SHM_ID_LENGTH 16
> -
> -struct shmem_membank_extra {
> - char shm_id[MAX_SHM_ID_LENGTH];
> - unsigned int nr_shm_borrowers;
> -};
> -
> -struct membank {
> - paddr_t start;
> - paddr_t size;
> - union {
> - enum membank_type type;
> -#ifdef CONFIG_STATIC_SHM
> - struct shmem_membank_extra *shmem_extra;
> -#endif
> - };
> -};
> -
> -struct membanks {
> - __struct_group(membanks_hdr, common, ,
> - unsigned int nr_banks;
> - unsigned int max_banks;
> - enum region_type type;
> - );
> - struct membank bank[];
> -};
> -
> -struct meminfo {
> - struct membanks_hdr common;
> - struct membank bank[NR_MEM_BANKS];
> -};
> -
> -struct shared_meminfo {
> - struct membanks_hdr common;
> - struct membank bank[NR_SHMEM_BANKS];
> - struct shmem_membank_extra extra[NR_SHMEM_BANKS];
> -};
> -
> -
> struct bootdomain {
> struct domain *d;
>
> @@ -179,134 +99,6 @@ struct bootmodule {
> #endif
> };
>
> -/* DT_MAX_NAME is the node name max length according the DT spec */
> -#define DT_MAX_NAME 41
> -struct bootcmdline {
> - bootmodule_kind kind;
> - bool domU;
> - paddr_t start;
> - char dt_name[DT_MAX_NAME];
> - char cmdline[BOOTMOD_MAX_CMDLINE];
> -};
> -
> -struct bootmodules {
> - int nr_mods;
> - struct bootmodule module[MAX_MODULES];
> -};
> -
> -struct bootcmdlines {
> - unsigned int nr_mods;
> - struct bootcmdline cmdline[MAX_MODULES];
> -};
> -
> -struct bootinfo {
> - struct meminfo mem;
> - /* The reserved regions are only used when booting using Device-Tree */
> - struct meminfo reserved_mem;
> - struct bootmodules modules;
> - struct bootcmdlines cmdlines;
> -#ifdef CONFIG_ACPI
> - struct meminfo acpi;
> -#endif
> -#ifdef CONFIG_STATIC_SHM
> - struct shared_meminfo shmem;
> -#endif
> -};
> -
> -#ifdef CONFIG_ACPI
> -#define BOOTINFO_ACPI_INIT \
> - .acpi.common.max_banks = NR_MEM_BANKS, \
> - .acpi.common.type = MEMORY,
> -#else
> -#define BOOTINFO_ACPI_INIT
> -#endif
> -
> -#ifdef CONFIG_STATIC_SHM
> -#define BOOTINFO_SHMEM_INIT \
> - .shmem.common.max_banks = NR_SHMEM_BANKS, \
> - .shmem.common.type = STATIC_SHARED_MEMORY,
> -#else
> -#define BOOTINFO_SHMEM_INIT
> -#endif
> -
> -#define BOOTINFO_INIT \
> -{ \
> - .mem.common.max_banks = NR_MEM_BANKS, \
> - .mem.common.type = MEMORY, \
> - .reserved_mem.common.max_banks = NR_MEM_BANKS, \
> - .reserved_mem.common.type = RESERVED_MEMORY, \
> - BOOTINFO_ACPI_INIT \
> - BOOTINFO_SHMEM_INIT \
> -}
> -
> -extern struct bootinfo bootinfo;
> -
> -bool check_reserved_regions_overlap(paddr_t region_start,
> - paddr_t region_size,
> - bool allow_memreserve_overlap);
> -
> -struct bootmodule *add_boot_module(bootmodule_kind kind,
> - paddr_t start, paddr_t size, bool domU);
> -struct bootmodule *boot_module_find_by_kind(bootmodule_kind kind);
> -struct bootmodule * boot_module_find_by_addr_and_kind(bootmodule_kind kind,
> - paddr_t start);
> -void add_boot_cmdline(const char *name, const char *cmdline,
> - bootmodule_kind kind, paddr_t start, bool domU);
> -struct bootcmdline *boot_cmdline_find_by_kind(bootmodule_kind kind);
> -struct bootcmdline * boot_cmdline_find_by_name(const char *name);
> -const char *boot_module_kind_as_string(bootmodule_kind kind);
> -
> -void populate_boot_allocator(void);
> -
> -size_t boot_fdt_info(const void *fdt, paddr_t paddr);
> -
> -const char *boot_fdt_cmdline(const void *fdt);
> -int domain_fdt_begin_node(void *fdt, const char *name, uint64_t unit);
> -
> -static inline struct membanks *bootinfo_get_reserved_mem(void)
> -{
> - return container_of(&bootinfo.reserved_mem.common, struct membanks,
> common);
> -}
> -
> -static inline struct membanks *bootinfo_get_mem(void)
> -{
> - return container_of(&bootinfo.mem.common, struct membanks, common);
> -}
> -
> -#ifdef CONFIG_ACPI
> -static inline struct membanks *bootinfo_get_acpi(void)
> -{
> - return container_of(&bootinfo.acpi.common, struct membanks, common);
> -}
> -#endif
> -
> -#ifdef CONFIG_STATIC_SHM
> -static inline struct membanks *bootinfo_get_shmem(void)
> -{
> - return container_of(&bootinfo.shmem.common, struct membanks, common);
> -}
> -
> -static inline struct shmem_membank_extra *bootinfo_get_shmem_extra(void)
> -{
> - return bootinfo.shmem.extra;
> -}
> -#endif
> -
> -static inline struct membanks *membanks_xzalloc(unsigned int nr,
> - enum region_type type)
> -{
> - struct membanks *banks = xzalloc_flex_struct(struct membanks, bank, nr);
> -
> - if ( !banks )
> - goto out;
> -
> - banks->max_banks = nr;
> - banks->type = type;
> -
> - out:
> - return banks;
> -}
> -
> /*
> * Interpret the property `prop_name` of `node` as a u32.
> *
> diff --git a/xen/include/xen/bootinfo.h b/xen/include/xen/bootinfo.h
> new file mode 100644
> index 0000000000..670fe771a4
> --- /dev/null
> +++ b/xen/include/xen/bootinfo.h
> @@ -0,0 +1,213 @@
> +/* SPDX-License-Identifier: GPL-2.0-only */
> +#ifndef XEN_BOOTINFO_H
> +#define XEN_BOOTINFO_H
> +
> +#include <xen/bootfdt.h>
> +#include <xen/kernel.h>
> +#include <xen/macros.h>
> +#include <xen/xmalloc.h>
> +
> +#define NR_MEM_BANKS 256
> +#define NR_SHMEM_BANKS 32
> +
> +#define MAX_MODULES 32 /* Current maximum useful modules */
> +
> +enum membank_type {
> + /*
> + * The MEMBANK_DEFAULT type refers to either reserved memory for the
> + * device/firmware (when the bank is in 'reserved_mem') or any RAM (when
> + * the bank is in 'mem').
> + */
> + MEMBANK_DEFAULT,
> + /*
> + * The MEMBANK_STATIC_DOMAIN type is used to indicate whether the memory
> + * bank is bound to a static Xen domain. It is only valid when the bank
> + * is in reserved_mem.
> + */
> + MEMBANK_STATIC_DOMAIN,
> + /*
> + * The MEMBANK_STATIC_HEAP type is used to indicate whether the memory
> + * bank is reserved as static heap. It is only valid when the bank is
> + * in reserved_mem.
> + */
> + MEMBANK_STATIC_HEAP,
> + /*
> + * The MEMBANK_FDT_RESVMEM type is used to indicate whether the memory
> + * bank is from the FDT reserve map.
> + */
> + MEMBANK_FDT_RESVMEM,
> +};
> +
> +enum region_type {
> + MEMORY,
> + RESERVED_MEMORY,
> + STATIC_SHARED_MEMORY
> +};
> +
> +/* Indicates the maximum number of characters(\0 included) for shm_id */
> +#define MAX_SHM_ID_LENGTH 16
> +
> +struct shmem_membank_extra {
> + char shm_id[MAX_SHM_ID_LENGTH];
> + unsigned int nr_shm_borrowers;
> +};
> +
> +struct membank {
> + paddr_t start;
> + paddr_t size;
> + union {
> + enum membank_type type;
> +#ifdef CONFIG_STATIC_SHM
> + struct shmem_membank_extra *shmem_extra;
> +#endif
> + };
> +};
> +
> +struct membanks {
> + __struct_group(membanks_hdr, common, ,
> + unsigned int nr_banks;
> + unsigned int max_banks;
> + enum region_type type;
> + );
> + struct membank bank[];
> +};
> +
> +struct meminfo {
> + struct membanks_hdr common;
> + struct membank bank[NR_MEM_BANKS];
> +};
> +
> +struct shared_meminfo {
> + struct membanks_hdr common;
> + struct membank bank[NR_SHMEM_BANKS];
> + struct shmem_membank_extra extra[NR_SHMEM_BANKS];
> +};
> +
> +/* DT_MAX_NAME is the node name max length according the DT spec */
> +#define DT_MAX_NAME 41
> +struct bootcmdline {
> + bootmodule_kind kind;
> + bool domU;
> + paddr_t start;
> + char dt_name[DT_MAX_NAME];
> + char cmdline[BOOTMOD_MAX_CMDLINE];
> +};
> +
> +struct bootmodules {
> + int nr_mods;
> + struct bootmodule module[MAX_MODULES];
> +};
> +
> +struct bootcmdlines {
> + unsigned int nr_mods;
> + struct bootcmdline cmdline[MAX_MODULES];
> +};
> +
> +struct bootinfo {
> + struct meminfo mem;
> + /* The reserved regions are only used when booting using Device-Tree */
> + struct meminfo reserved_mem;
> + struct bootmodules modules;
> + struct bootcmdlines cmdlines;
> +#ifdef CONFIG_ACPI
> + struct meminfo acpi;
> +#endif
> +#ifdef CONFIG_STATIC_SHM
> + struct shared_meminfo shmem;
> +#endif
> +};
> +
> +#ifdef CONFIG_ACPI
> +#define BOOTINFO_ACPI_INIT \
> + .acpi.common.max_banks = NR_MEM_BANKS, \
> + .acpi.common.type = MEMORY,
> +#else
> +#define BOOTINFO_ACPI_INIT
> +#endif
> +
> +#ifdef CONFIG_STATIC_SHM
> +#define BOOTINFO_SHMEM_INIT \
> + .shmem.common.max_banks = NR_SHMEM_BANKS, \
> + .shmem.common.type = STATIC_SHARED_MEMORY,
> +#else
> +#define BOOTINFO_SHMEM_INIT
> +#endif
> +
> +#define BOOTINFO_INIT \
> +{ \
> + .mem.common.max_banks = NR_MEM_BANKS, \
> + .mem.common.type = MEMORY, \
> + .reserved_mem.common.max_banks = NR_MEM_BANKS, \
> + .reserved_mem.common.type = RESERVED_MEMORY, \
> + BOOTINFO_ACPI_INIT \
> + BOOTINFO_SHMEM_INIT \
> +}
> +
> +extern struct bootinfo bootinfo;
> +
> +bool check_reserved_regions_overlap(paddr_t region_start,
> + paddr_t region_size,
> + bool allow_memreserve_overlap);
> +
> +struct bootmodule *add_boot_module(bootmodule_kind kind,
> + paddr_t start, paddr_t size, bool domU);
> +struct bootmodule *boot_module_find_by_kind(bootmodule_kind kind);
> +struct bootmodule * boot_module_find_by_addr_and_kind(bootmodule_kind kind,
> + paddr_t start);
> +void add_boot_cmdline(const char *name, const char *cmdline,
> + bootmodule_kind kind, paddr_t start, bool domU);
> +struct bootcmdline *boot_cmdline_find_by_kind(bootmodule_kind kind);
> +struct bootcmdline * boot_cmdline_find_by_name(const char *name);
> +const char *boot_module_kind_as_string(bootmodule_kind kind);
> +
> +void populate_boot_allocator(void);
> +
> +size_t boot_fdt_info(const void *fdt, paddr_t paddr);
> +const char *boot_fdt_cmdline(const void *fdt);
> +int domain_fdt_begin_node(void *fdt, const char *name, uint64_t unit);
> +
> +static inline struct membanks *bootinfo_get_reserved_mem(void)
> +{
> + return container_of(&bootinfo.reserved_mem.common, struct membanks,
> common);
> +}
> +
> +static inline struct membanks *bootinfo_get_mem(void)
> +{
> + return container_of(&bootinfo.mem.common, struct membanks, common);
> +}
> +
> +#ifdef CONFIG_ACPI
> +static inline struct membanks *bootinfo_get_acpi(void)
> +{
> + return container_of(&bootinfo.acpi.common, struct membanks, common);
> +}
> +#endif
> +
> +#ifdef CONFIG_STATIC_SHM
> +static inline struct membanks *bootinfo_get_shmem(void)
> +{
> + return container_of(&bootinfo.shmem.common, struct membanks, common);
> +}
> +
> +static inline struct shmem_membank_extra *bootinfo_get_shmem_extra(void)
> +{
> + return bootinfo.shmem.extra;
> +}
> +#endif
> +
> +static inline struct membanks *membanks_xzalloc(unsigned int nr,
> + enum region_type type)
> +{
> + struct membanks *banks = xzalloc_flex_struct(struct membanks, bank, nr);
> +
> + if ( !banks )
> + goto out;
> +
> + banks->max_banks = nr;
> + banks->type = type;
> +
> + out:
> + return banks;
> +}
> +
> +#endif /* XEN_BOOTINFO_H */
> diff --git a/xen/include/xen/device_tree.h b/xen/include/xen/device_tree.h
> index 0a22b1ba1d..7d1c8bc305 100644
> --- a/xen/include/xen/device_tree.h
> +++ b/xen/include/xen/device_tree.h
> @@ -10,7 +10,7 @@
> #ifndef __XEN_DEVICE_TREE_H__
> #define __XEN_DEVICE_TREE_H__
>
> -#include <xen/bootfdt.h>
> +#include <xen/bootinfo.h>
> #include <xen/byteorder.h>
>
> #include <asm/device.h>
> diff --git a/xen/include/xen/fdt-domain-build.h
> b/xen/include/xen/fdt-domain-build.h
> index 45981dbec0..60565fdbf9 100644
> --- a/xen/include/xen/fdt-domain-build.h
> +++ b/xen/include/xen/fdt-domain-build.h
> @@ -3,7 +3,7 @@
> #ifndef __XEN_FDT_DOMAIN_BUILD_H__
> #define __XEN_FDT_DOMAIN_BUILD_H__
>
> -#include <xen/bootfdt.h>
> +#include <xen/bootinfo.h>
> #include <xen/device_tree.h>
> #include <xen/fdt-kernel.h>
> #include <xen/mm.h>
> diff --git a/xen/include/xen/fdt-kernel.h b/xen/include/xen/fdt-kernel.h
> index dd009f01d0..cb211d242f 100644
> --- a/xen/include/xen/fdt-kernel.h
> +++ b/xen/include/xen/fdt-kernel.h
> @@ -7,7 +7,7 @@
> #ifndef __XEN_FDT_KERNEL_H__
> #define __XEN_FDT_KERNEL_H__
>
> -#include <xen/bootfdt.h>
> +#include <xen/bootinfo.h>
> #include <xen/device_tree.h>
> #include <xen/types.h>
>
> --
> 2.43.0
>
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |