|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH 04/10] xen: arm: rename early_info structs
On Mon, 16 Jun 2014, Ian Campbell wrote:
> There isn't really anything Device Tree specific about the early_info, we just
> happen to get it from device tree (but in the future it might come e.g. from
> UEFI or ACPI or something else).
>
> Move the relevant structs out of device_tree.h and into asm/setup.h and
> rename to
> be more neutral.
>
> For now the code to parse the DT into the now arch specific structs remains in
> common code.
>
> Signed-off-by: Ian Campbell <ian.campbell@xxxxxxxxxx>
Acked-by: Stefano Stabellini <stefano.stabellini@xxxxxxxxxxxxx>
> xen/arch/arm/domain_build.c | 13 ++++++-----
> xen/arch/arm/kernel.c | 6 ++---
> xen/arch/arm/kernel.h | 3 ++-
> xen/arch/arm/setup.c | 51
> ++++++++++++++++++++++-------------------
> xen/common/device_tree.c | 38 +++++++++++++++---------------
> xen/include/asm-arm/setup.h | 40 ++++++++++++++++++++++++++++++++
> xen/include/xen/device_tree.h | 39 -------------------------------
> 7 files changed, 98 insertions(+), 92 deletions(-)
>
> diff --git a/xen/arch/arm/domain_build.c b/xen/arch/arm/domain_build.c
> index 9d9cba9..5eef8a3 100644
> --- a/xen/arch/arm/domain_build.c
> +++ b/xen/arch/arm/domain_build.c
> @@ -16,6 +16,7 @@
> #include <asm/setup.h>
> #include <asm/platform.h>
> #include <asm/psci.h>
> +#include <asm/setup.h>
>
> #include <asm/gic.h>
> #include <xen/irq.h>
> @@ -160,9 +161,9 @@ static int write_properties(struct domain *d, struct
> kernel_info *kinfo,
> int res = 0;
> int had_dom0_bootargs = 0;
>
> - if ( early_info.modules.nr_mods >= MOD_KERNEL &&
> - early_info.modules.module[MOD_KERNEL].cmdline[0] )
> - bootargs = &early_info.modules.module[MOD_KERNEL].cmdline[0];
> + if ( bootinfo.modules.nr_mods >= MOD_KERNEL &&
> + bootinfo.modules.module[MOD_KERNEL].cmdline[0] )
> + bootargs = &bootinfo.modules.module[MOD_KERNEL].cmdline[0];
>
> dt_for_each_property_node (node, prop)
> {
> @@ -221,7 +222,7 @@ static int write_properties(struct domain *d, struct
> kernel_info *kinfo,
> * If the bootloader provides an initrd, we must create a placeholder
> * for the initrd properties. The values will be replaced later.
> */
> - if ( early_info.modules.module[MOD_INITRD].size )
> + if ( bootinfo.modules.module[MOD_INITRD].size )
> {
> u64 a = 0;
> res = fdt_property(kinfo->fdt, "linux,initrd-start", &a,
> sizeof(a));
> @@ -976,8 +977,8 @@ static void dtb_load(struct kernel_info *kinfo)
> static void initrd_load(struct kernel_info *kinfo)
> {
> paddr_t load_addr = kinfo->initrd_paddr;
> - paddr_t paddr = early_info.modules.module[MOD_INITRD].start;
> - paddr_t len = early_info.modules.module[MOD_INITRD].size;
> + paddr_t paddr = bootinfo.modules.module[MOD_INITRD].start;
> + paddr_t len = bootinfo.modules.module[MOD_INITRD].size;
> unsigned long offs;
> int node;
> int res;
> diff --git a/xen/arch/arm/kernel.c b/xen/arch/arm/kernel.c
> index 69182ec..ce5b95a 100644
> --- a/xen/arch/arm/kernel.c
> +++ b/xen/arch/arm/kernel.c
> @@ -69,7 +69,7 @@ static void place_modules(struct kernel_info *info,
> {
> /* Align DTB and initrd size to 2Mb. Linux only requires 4 byte
> alignment */
> const paddr_t initrd_len =
> - ROUNDUP(early_info.modules.module[MOD_INITRD].size, MB(2));
> + ROUNDUP(bootinfo.modules.module[MOD_INITRD].size, MB(2));
> const paddr_t dtb_len = ROUNDUP(fdt_totalsize(info->fdt), MB(2));
> const paddr_t modsize = initrd_len + dtb_len;
>
> @@ -376,8 +376,8 @@ int kernel_probe(struct kernel_info *info)
>
> paddr_t start, size;
>
> - start = early_info.modules.module[MOD_KERNEL].start;
> - size = early_info.modules.module[MOD_KERNEL].size;
> + start = bootinfo.modules.module[MOD_KERNEL].start;
> + size = bootinfo.modules.module[MOD_KERNEL].size;
>
> if ( !size )
> {
> diff --git a/xen/arch/arm/kernel.h b/xen/arch/arm/kernel.h
> index fd2f61d..7c7f624 100644
> --- a/xen/arch/arm/kernel.h
> +++ b/xen/arch/arm/kernel.h
> @@ -8,6 +8,7 @@
>
> #include <xen/libelf.h>
> #include <xen/device_tree.h>
> +#include <asm/setup.h>
>
> struct kernel_info {
> #ifdef CONFIG_ARM_64
> @@ -16,7 +17,7 @@ struct kernel_info {
>
> void *fdt; /* flat device tree */
> paddr_t unassigned_mem; /* RAM not (yet) assigned to a bank */
> - struct dt_mem_info mem;
> + struct meminfo mem;
>
> /* kernel entry point */
> paddr_t entry;
> diff --git a/xen/arch/arm/setup.c b/xen/arch/arm/setup.c
> index b9ce7a9..63f6b8e 100644
> --- a/xen/arch/arm/setup.c
> +++ b/xen/arch/arm/setup.c
> @@ -43,8 +43,11 @@
> #include <asm/cpufeature.h>
> #include <asm/platform.h>
> #include <asm/procinfo.h>
> +#include <asm/setup.h>
> #include <xsm/xsm.h>
>
> +struct bootinfo __initdata bootinfo;
> +
> struct cpuinfo_arm __read_mostly boot_cpu_data;
>
> static __used void init_done(void)
> @@ -182,7 +185,7 @@ static void dt_unreserved_regions(paddr_t s, paddr_t e,
>
> void __init discard_initial_modules(void)
> {
> - struct dt_module_info *mi = &early_info.modules;
> + struct bootmodules *mi = &bootinfo.modules;
> int i;
>
> for ( i = MOD_DISCARD_FIRST; i <= mi->nr_mods; i++ )
> @@ -210,7 +213,7 @@ static paddr_t __init consider_modules(paddr_t s, paddr_t
> e,
> uint32_t size, paddr_t align,
> int first_mod)
> {
> - const struct dt_module_info *mi = &early_info.modules;
> + const struct bootmodules *mi = &bootinfo.modules;
> int i;
> int nr_rsvd;
>
> @@ -275,7 +278,7 @@ static paddr_t __init consider_modules(paddr_t s, paddr_t
> e,
> */
> static paddr_t __init next_module(paddr_t s, paddr_t *end)
> {
> - struct dt_module_info *mi = &early_info.modules;
> + struct bootmodules *mi = &bootinfo.modules;
> paddr_t lowest = ~(paddr_t)0;
> int i;
>
> @@ -308,7 +311,7 @@ static paddr_t __init next_module(paddr_t s, paddr_t *end)
> */
> static paddr_t __init get_xen_paddr(void)
> {
> - struct dt_mem_info *mi = &early_info.mem;
> + struct meminfo *mi = &bootinfo.mem;
> paddr_t min_size;
> paddr_t paddr = 0, last_end;
> int i;
> @@ -357,8 +360,8 @@ static paddr_t __init get_xen_paddr(void)
> printk("Placing Xen at 0x%"PRIpaddr"-0x%"PRIpaddr"\n",
> paddr, paddr + min_size);
>
> - early_info.modules.module[MOD_XEN].start = paddr;
> - early_info.modules.module[MOD_XEN].size = min_size;
> + bootinfo.modules.module[MOD_XEN].start = paddr;
> + bootinfo.modules.module[MOD_XEN].size = min_size;
>
> return paddr;
> }
> @@ -376,7 +379,7 @@ static void __init setup_mm(unsigned long dtb_paddr,
> size_t dtb_size)
> int i;
> void *fdt;
>
> - if ( !early_info.mem.nr_banks )
> + if ( !bootinfo.mem.nr_banks )
> panic("No memory bank");
>
> /*
> @@ -393,15 +396,15 @@ static void __init setup_mm(unsigned long dtb_paddr,
> size_t dtb_size)
> * We also track the number of actual RAM pages (i.e. not counting
> * the holes).
> */
> - ram_size = early_info.mem.bank[0].size;
> + ram_size = bootinfo.mem.bank[0].size;
>
> - contig_start = ram_start = early_info.mem.bank[0].start;
> + contig_start = ram_start = bootinfo.mem.bank[0].start;
> contig_end = ram_end = ram_start + ram_size;
>
> - for ( i = 1; i < early_info.mem.nr_banks; i++ )
> + for ( i = 1; i < bootinfo.mem.nr_banks; i++ )
> {
> - paddr_t bank_start = early_info.mem.bank[i].start;
> - paddr_t bank_size = early_info.mem.bank[i].size;
> + paddr_t bank_start = bootinfo.mem.bank[i].start;
> + paddr_t bank_size = bootinfo.mem.bank[i].size;
> paddr_t bank_end = bank_start + bank_size;
>
> paddr_t new_ram_size = ram_size + bank_size;
> @@ -434,11 +437,11 @@ static void __init setup_mm(unsigned long dtb_paddr,
> size_t dtb_size)
> ram_end = new_ram_end;
> }
>
> - if ( i != early_info.mem.nr_banks )
> + if ( i != bootinfo.mem.nr_banks )
> {
> printk("WARNING: only using %d out of %d memory banks\n",
> - i, early_info.mem.nr_banks);
> - early_info.mem.nr_banks = i;
> + i, bootinfo.mem.nr_banks);
> + bootinfo.mem.nr_banks = i;
> }
>
> total_pages = ram_pages = ram_size >> PAGE_SHIFT;
> @@ -497,10 +500,10 @@ static void __init setup_mm(unsigned long dtb_paddr,
> size_t dtb_size)
> device_tree_flattened = fdt;
>
> /* Add non-xenheap memory */
> - for ( i = 0; i < early_info.mem.nr_banks; i++ )
> + for ( i = 0; i < bootinfo.mem.nr_banks; i++ )
> {
> - paddr_t bank_start = early_info.mem.bank[i].start;
> - paddr_t bank_end = bank_start + early_info.mem.bank[i].size;
> + paddr_t bank_start = bootinfo.mem.bank[i].start;
> + paddr_t bank_end = bank_start + bootinfo.mem.bank[i].size;
>
> s = bank_start;
> while ( s < bank_end )
> @@ -557,10 +560,10 @@ static void __init setup_mm(unsigned long dtb_paddr,
> size_t dtb_size)
> void *fdt;
>
> total_pages = 0;
> - for ( bank = 0 ; bank < early_info.mem.nr_banks; bank++ )
> + for ( bank = 0 ; bank < bootinfo.mem.nr_banks; bank++ )
> {
> - paddr_t bank_start = early_info.mem.bank[bank].start;
> - paddr_t bank_size = early_info.mem.bank[bank].size;
> + paddr_t bank_start = bootinfo.mem.bank[bank].start;
> + paddr_t bank_size = bootinfo.mem.bank[bank].size;
> paddr_t bank_end = bank_start + bank_size;
> paddr_t s, e;
>
> @@ -609,11 +612,11 @@ static void __init setup_mm(unsigned long dtb_paddr,
> size_t dtb_size)
> }
> }
>
> - if ( bank != early_info.mem.nr_banks )
> + if ( bank != bootinfo.mem.nr_banks )
> {
> printk("WARNING: only using %d out of %d memory banks\n",
> - bank, early_info.mem.nr_banks);
> - early_info.mem.nr_banks = bank;
> + bank, bootinfo.mem.nr_banks);
> + bootinfo.mem.nr_banks = bank;
> }
>
> total_pages += ram_size >> PAGE_SHIFT;
> diff --git a/xen/common/device_tree.c b/xen/common/device_tree.c
> index 03d495a..a1896d3 100644
> --- a/xen/common/device_tree.c
> +++ b/xen/common/device_tree.c
> @@ -23,8 +23,8 @@
> #include <xen/cpumask.h>
> #include <xen/ctype.h>
> #include <xen/lib.h>
> +#include <asm/setup.h>
>
> -struct dt_early_info __initdata early_info;
> const void *device_tree_flattened;
> dt_irq_xlate_func dt_irq_xlate;
> /* Host device tree */
> @@ -238,10 +238,10 @@ const char *device_tree_bootargs(const void *fdt)
> prop = fdt_get_property(fdt, node, "xen,xen-bootargs", NULL);
> if ( prop == NULL )
> {
> - struct dt_mb_module *dom0_mod = NULL;
> + struct bootmodule *dom0_mod = NULL;
>
> - if ( early_info.modules.nr_mods >= MOD_KERNEL )
> - dom0_mod = &early_info.modules.module[MOD_KERNEL];
> + if ( bootinfo.modules.nr_mods >= MOD_KERNEL )
> + dom0_mod = &bootinfo.modules.module[MOD_KERNEL];
>
> if (fdt_get_property(fdt, node, "xen,dom0-bootargs", NULL) ||
> ( dom0_mod && dom0_mod->cmdline[0] ) )
> @@ -319,12 +319,12 @@ static void __init process_memory_node(const void *fdt,
> int node,
> cell = (const __be32 *)prop->data;
> banks = fdt32_to_cpu(prop->len) / (reg_cells * sizeof (u32));
>
> - for ( i = 0; i < banks && early_info.mem.nr_banks < NR_MEM_BANKS; i++ )
> + for ( i = 0; i < banks && bootinfo.mem.nr_banks < NR_MEM_BANKS; i++ )
> {
> device_tree_get_reg(&cell, address_cells, size_cells, &start, &size);
> - early_info.mem.bank[early_info.mem.nr_banks].start = start;
> - early_info.mem.bank[early_info.mem.nr_banks].size = size;
> - early_info.mem.nr_banks++;
> + bootinfo.mem.bank[bootinfo.mem.nr_banks].start = start;
> + bootinfo.mem.bank[bootinfo.mem.nr_banks].size = size;
> + bootinfo.mem.nr_banks++;
> }
> }
>
> @@ -335,7 +335,7 @@ static void __init process_multiboot_node(const void
> *fdt, int node,
> const struct fdt_property *prop;
> const __be32 *cell;
> int nr;
> - struct dt_mb_module *mod;
> + struct bootmodule *mod;
> int len;
>
> if ( fdt_node_check_compatible(fdt, node, "xen,linux-zimage") == 0 ||
> @@ -349,7 +349,7 @@ static void __init process_multiboot_node(const void
> *fdt, int node,
> else
> panic("%s not a known xen multiboot type\n", name);
>
> - mod = &early_info.modules.module[nr];
> + mod = &bootinfo.modules.module[nr];
>
> prop = fdt_get_property(fdt, node, "reg", &len);
> if ( !prop )
> @@ -374,8 +374,8 @@ static void __init process_multiboot_node(const void
> *fdt, int node,
> else
> mod->cmdline[0] = 0;
>
> - if ( nr > early_info.modules.nr_mods )
> - early_info.modules.nr_mods = nr;
> + if ( nr > bootinfo.modules.nr_mods )
> + bootinfo.modules.nr_mods = nr;
> }
>
> static void __init process_chosen_node(const void *fdt, int node,
> @@ -383,7 +383,7 @@ static void __init process_chosen_node(const void *fdt,
> int node,
> u32 address_cells, u32 size_cells)
> {
> const struct fdt_property *prop;
> - struct dt_mb_module *mod = &early_info.modules.module[MOD_INITRD];
> + struct bootmodule *mod = &bootinfo.modules.module[MOD_INITRD];
> paddr_t start, end;
> int len;
>
> @@ -425,7 +425,7 @@ static void __init process_chosen_node(const void *fdt,
> int node,
> mod->start = start;
> mod->size = end - start;
>
> - early_info.modules.nr_mods = max(MOD_INITRD, early_info.modules.nr_mods);
> + bootinfo.modules.nr_mods = max(MOD_INITRD, bootinfo.modules.nr_mods);
> }
>
> static int __init early_scan_node(const void *fdt,
> @@ -446,8 +446,8 @@ static int __init early_scan_node(const void *fdt,
>
> static void __init early_print_info(void)
> {
> - struct dt_mem_info *mi = &early_info.mem;
> - struct dt_module_info *mods = &early_info.modules;
> + struct meminfo *mi = &bootinfo.mem;
> + struct bootmodules *mods = &bootinfo.modules;
> int i, nr_rsvd;
>
> for ( i = 0; i < mi->nr_banks; i++ )
> @@ -483,18 +483,18 @@ static void __init early_print_info(void)
> */
> size_t __init device_tree_early_init(const void *fdt, paddr_t paddr)
> {
> - struct dt_mb_module *mod;
> + struct bootmodule *mod;
> int ret;
>
> ret = fdt_check_header(fdt);
> if ( ret < 0 )
> panic("No valid device tree\n");
>
> - mod = &early_info.modules.module[MOD_FDT];
> + mod = &bootinfo.modules.module[MOD_FDT];
> mod->start = paddr;
> mod->size = fdt_totalsize(fdt);
>
> - early_info.modules.nr_mods = max(MOD_FDT, early_info.modules.nr_mods);
> + bootinfo.modules.nr_mods = max(MOD_FDT, bootinfo.modules.nr_mods);
>
> device_tree_for_each_node((void *)fdt, early_scan_node, NULL);
> early_print_info();
> diff --git a/xen/include/asm-arm/setup.h b/xen/include/asm-arm/setup.h
> index b09f688..ea0dc46 100644
> --- a/xen/include/asm-arm/setup.h
> +++ b/xen/include/asm-arm/setup.h
> @@ -3,6 +3,46 @@
>
> #include <public/version.h>
>
> +#define NR_MEM_BANKS 8
> +
> +#define MOD_XEN 0
> +#define MOD_FDT 1
> +#define MOD_KERNEL 2
> +#define MOD_INITRD 3
> +#define MOD_XSM 4
> +#define NR_MODULES 5
> +
> +#define MOD_DISCARD_FIRST MOD_FDT
> +
> +struct membank {
> + paddr_t start;
> + paddr_t size;
> +};
> +
> +struct meminfo {
> + int nr_banks;
> + struct membank bank[NR_MEM_BANKS];
> +};
> +
> +struct bootmodule {
> + paddr_t start;
> + paddr_t size;
> + char cmdline[1024];
> +};
> +
> +struct bootmodules {
> + int nr_mods;
> + /* Module 0 is Xen itself, followed by the provided modules-proper */
> + struct bootmodule module[NR_MODULES];
> +};
> +
> +struct bootinfo {
> + struct meminfo mem;
> + struct bootmodules modules;
> +};
> +
> +extern struct bootinfo bootinfo;
> +
> void arch_init_memory(void);
>
> void copy_from_paddr(void *dst, paddr_t paddr, unsigned long len);
> diff --git a/xen/include/xen/device_tree.h b/xen/include/xen/device_tree.h
> index 25db076..74e98f5 100644
> --- a/xen/include/xen/device_tree.h
> +++ b/xen/include/xen/device_tree.h
> @@ -20,44 +20,6 @@
>
> #define DEVICE_TREE_MAX_DEPTH 16
>
> -#define NR_MEM_BANKS 8
> -
> -#define MOD_XEN 0
> -#define MOD_FDT 1
> -#define MOD_KERNEL 2
> -#define MOD_INITRD 3
> -#define MOD_XSM 4
> -#define NR_MODULES 5
> -
> -#define MOD_DISCARD_FIRST MOD_FDT
> -
> -struct membank {
> - paddr_t start;
> - paddr_t size;
> -};
> -
> -struct dt_mem_info {
> - int nr_banks;
> - struct membank bank[NR_MEM_BANKS];
> -};
> -
> -struct dt_mb_module {
> - paddr_t start;
> - paddr_t size;
> - char cmdline[1024];
> -};
> -
> -struct dt_module_info {
> - int nr_mods;
> - /* Module 0 is Xen itself, followed by the provided modules-proper */
> - struct dt_mb_module module[NR_MODULES];
> -};
> -
> -struct dt_early_info {
> - struct dt_mem_info mem;
> - struct dt_module_info modules;
> -};
> -
> /*
> * Struct used for matching a device
> */
> @@ -193,7 +155,6 @@ typedef int (*device_tree_node_func)(const void *fdt,
> u32 address_cells, u32 size_cells,
> void *data);
>
> -extern struct dt_early_info early_info;
> extern const void *device_tree_flattened;
>
> size_t __init device_tree_early_init(const void *fdt, paddr_t paddr);
> --
> 1.7.10.4
>
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxx
http://lists.xen.org/xen-devel
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |