[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [RFC PATCH v1 11/21] ARM: NUMA: Add fallback on NUMA failure
On Thu, Mar 2, 2017 at 9:39 PM, Julien Grall <julien.grall@xxxxxxx> wrote: > Hello Vijay, > > On 09/02/17 15:57, vijay.kilari@xxxxxxxxx wrote: >> >> From: Vijaya Kumar K <Vijaya.Kumar@xxxxxxxxxx> >> >> On NUMA initialization failure, reset all the >> NUMA structures to emulate as single node. >> >> Signed-off-by: Vijaya Kumar <Vijaya.Kumar@xxxxxxxxxx> >> --- >> xen/arch/arm/numa.c | 50 >> ++++++++++++++++++++++++++++++++++++++++++++++++-- >> 1 file changed, 48 insertions(+), 2 deletions(-) >> >> diff --git a/xen/arch/arm/numa.c b/xen/arch/arm/numa.c >> index aa34c82..31dc552 100644 >> --- a/xen/arch/arm/numa.c >> +++ b/xen/arch/arm/numa.c >> @@ -19,6 +19,7 @@ >> #include <xen/ctype.h> >> #include <xen/mm.h> >> #include <xen/nodemask.h> >> +#include <xen/pfn.h> >> #include <asm/mm.h> >> #include <xen/numa.h> >> #include <asm/acpi.h> >> @@ -127,6 +128,29 @@ static int __init numa_scan_mem_nodes(void) >> return 0; >> } >> >> +static void __init numa_dummy_init(unsigned long start_pfn, >> + unsigned long end_pfn) > > > This code is very similar to numa_initmem_init on x86. This is a call to > make the code more generic. Yes, I have noticed it and taken care in next revision > > >> +{ >> + int i; >> + >> + nodes_clear(numa_nodes_parsed); >> + memnode_shift = BITS_PER_LONG - 1; >> + memnodemap = _memnodemap; >> + nodes_clear(node_online_map); >> + node_set_online(0); >> + >> + for ( i = 0; i < NR_CPUS; i++ ) >> + numa_set_node(i, 0); >> + >> + node_distance = NULL; >> + for ( i = 0; i < MAX_NUMNODES * 2; i++ ) >> + _node_distance[i] = 0; >> + >> + cpumask_copy(&node_to_cpumask[0], cpumask_of(0)); >> + setup_node_bootmem(0, (u64)start_pfn << PAGE_SHIFT, >> + (u64)end_pfn << PAGE_SHIFT); >> +} >> + >> static int __init numa_initmem_init(void) >> { >> if ( !numa_mem_init() ) >> @@ -151,7 +175,9 @@ void __init init_cpu_to_node(void) >> >> int __init numa_init(void) > > > I would make numa_initmem_init from x86 generic and have an arch specific > function called from there. > >> { >> - int i, ret = 0; >> + int i, bank, ret = 0; >> + paddr_t ram_start = ~0; >> + paddr_t ram_end = 0; >> >> if ( numa_off ) >> goto no_numa; >> @@ -164,8 +190,28 @@ int __init numa_init(void) >> if ( !ret ) >> ret = numa_initmem_init(); >> >> + if ( !ret ) >> + return 0; >> + >> no_numa: >> - return ret; >> + for ( bank = 0 ; bank < bootinfo.mem.nr_banks; bank++ ) >> + { >> + paddr_t bank_start = bootinfo.mem.bank[bank].start; >> + paddr_t bank_end = bank_start + bootinfo.mem.bank[bank].size; >> + >> + ram_start = min(ram_start, bank_start); >> + ram_end = max(ram_end, bank_end); >> + } > > > I am sure this could be done in setup.c rather than here. Yes, I have noticed it and taken care in next revision. numa_init() is called from setup_mm() with ram_start and ram_end as params > >> + >> + printk(XENLOG_INFO "%s\n", >> + numa_off ? "NUMA turned off" : "No NUMA configuration found"); >> + >> + printk(XENLOG_INFO "Faking a node at %016"PRIx64"-%016"PRIx64"\n", >> + (u64)ram_start, (u64)ram_end); >> + >> + numa_dummy_init(PFN_UP(ram_start),PFN_DOWN(ram_end)); >> + >> + return 0; >> } >> >> int __init arch_numa_setup(char *opt) >> > > Regards, > > -- > Julien Grall _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxx https://lists.xen.org/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |