RE: [XEN RFC PATCH 31/40] xen/x86: move nodes_cover_memory to common

2021-08-31 Thread Wei Chen
Hi Stefano,

> -Original Message-
> From: Stefano Stabellini 
> Sent: 2021年8月31日 9:17
> To: Wei Chen 
> Cc: xen-devel@lists.xenproject.org; sstabell...@kernel.org; jul...@xen.org;
> jbeul...@suse.com; Bertrand Marquis 
> Subject: Re: [XEN RFC PATCH 31/40] xen/x86: move nodes_cover_memory to
> common
> 
> On Wed, 11 Aug 2021, Wei Chen wrote:
> > Not only ACPU NUMA, but also Arm device tree based NUMA
> > will use nodes_cover_memory to do sanity check. So we move
> > this function from arch/x86 to common.
> >
> > Signed-off-by: Wei Chen 
> > ---
> >  xen/arch/x86/srat.c| 40 
> >  xen/common/numa.c  | 40 
> >  xen/include/xen/numa.h |  1 +
> >  3 files changed, 41 insertions(+), 40 deletions(-)
> >
> > diff --git a/xen/arch/x86/srat.c b/xen/arch/x86/srat.c
> > index dd3aa30843..dcebc7adec 100644
> > --- a/xen/arch/x86/srat.c
> > +++ b/xen/arch/x86/srat.c
> > @@ -308,46 +308,6 @@ acpi_numa_memory_affinity_init(const struct
> acpi_srat_mem_affinity *ma)
> > num_node_memblks++;
> >  }
> >
> > -/* Sanity check to catch more bad SRATs (they are amazingly common).
> > -   Make sure the PXMs cover all memory. */
> > -static int __init nodes_cover_memory(void)
> > -{
> > -   int i;
> > -   uint32_t nr_banks = arch_meminfo_get_nr_bank();
> > -
> > -   for (i = 0; i < nr_banks; i++) {
> > -   int j, found;
> > -   unsigned long long start, end;
> > -
> > -   if (arch_meminfo_get_ram_bank_range(i, , )) {
> > -   continue;
> > -   }
> > -
> > -   do {
> > -   found = 0;
> > -   for_each_node_mask(j, memory_nodes_parsed)
> > -   if (start < nodes[j].end
> > -   && end > nodes[j].start) {
> > -   if (start >= nodes[j].start) {
> > -   start = nodes[j].end;
> > -   found = 1;
> > -   }
> > -   if (end <= nodes[j].end) {
> > -   end = nodes[j].start;
> > -   found = 1;
> > -   }
> > -   }
> > -   } while (found && start < end);
> > -
> > -   if (start < end) {
> > -   printk(KERN_ERR "SRAT: No PXM for e820 range: "
> > -   "%016Lx - %016Lx\n", start, end);
> > -   return 0;
> > -   }
> > -   }
> > -   return 1;
> > -}
> > -
> >  void __init acpi_numa_arch_fixup(void) {}
> >
> >  static uint64_t __initdata srat_region_mask;
> > diff --git a/xen/common/numa.c b/xen/common/numa.c
> > index 79ab250543..74960885a6 100644
> > --- a/xen/common/numa.c
> > +++ b/xen/common/numa.c
> > @@ -193,6 +193,46 @@ void __init cutoff_node(int i, u64 start, u64 end)
> > }
> >  }
> >
> > +/* Sanity check to catch more bad SRATs (they are amazingly common).
> > +   Make sure the PXMs cover all memory. */
> > +int __init nodes_cover_memory(void)
> > +{
> > +   int i;
> > +   uint32_t nr_banks = arch_meminfo_get_nr_bank();
> > +
> > +   for (i = 0; i < nr_banks; i++) {
> > +   int j, found;
> > +   unsigned long long start, end;
> > +
> > +   if (arch_meminfo_get_ram_bank_range(i, , )) {
> > +   continue;
> > +   }
> > +
> > +   do {
> > +   found = 0;
> > +   for_each_node_mask(j, memory_nodes_parsed)
> > +   if (start < nodes[j].end
> > +   && end > nodes[j].start) {
> > +   if (start >= nodes[j].start) {
> > +   start = nodes[j].end;
> > +   found = 1;
> > +   }
> > +   if (end <= nodes[j].end) {
> > +   end = nodes[j].start;
> > +   found = 1;
> > +   }
> > +   }
> > +   } while (found && start < end);
> > +
> > +   if (start < end) {
> > +   printk(KERN_ERR "SRAT: No PXM for e820 range: "
> > +   "%016Lx - %016Lx\n", start, end);
> 
> I don't know if you are already doing this in a later patch but the
> message shouldn't say e820 as it doesn't exist on all architecture.
> Maybe "for address range" or "for memory range" would suffice.
> 
> Normally we don't do change together with code movement but in this case
> I think it would be OK.

OK, I will do it in next version.


Re: [XEN RFC PATCH 31/40] xen/x86: move nodes_cover_memory to common

2021-08-30 Thread Stefano Stabellini
On Wed, 11 Aug 2021, Wei Chen wrote:
> Not only ACPU NUMA, but also Arm device tree based NUMA
> will use nodes_cover_memory to do sanity check. So we move
> this function from arch/x86 to common.
> 
> Signed-off-by: Wei Chen 
> ---
>  xen/arch/x86/srat.c| 40 
>  xen/common/numa.c  | 40 
>  xen/include/xen/numa.h |  1 +
>  3 files changed, 41 insertions(+), 40 deletions(-)
> 
> diff --git a/xen/arch/x86/srat.c b/xen/arch/x86/srat.c
> index dd3aa30843..dcebc7adec 100644
> --- a/xen/arch/x86/srat.c
> +++ b/xen/arch/x86/srat.c
> @@ -308,46 +308,6 @@ acpi_numa_memory_affinity_init(const struct 
> acpi_srat_mem_affinity *ma)
>   num_node_memblks++;
>  }
>  
> -/* Sanity check to catch more bad SRATs (they are amazingly common).
> -   Make sure the PXMs cover all memory. */
> -static int __init nodes_cover_memory(void)
> -{
> - int i;
> - uint32_t nr_banks = arch_meminfo_get_nr_bank();
> -
> - for (i = 0; i < nr_banks; i++) {
> - int j, found;
> - unsigned long long start, end;
> -
> - if (arch_meminfo_get_ram_bank_range(i, , )) {
> - continue;
> - }
> -
> - do {
> - found = 0;
> - for_each_node_mask(j, memory_nodes_parsed)
> - if (start < nodes[j].end
> - && end > nodes[j].start) {
> - if (start >= nodes[j].start) {
> - start = nodes[j].end;
> - found = 1;
> - }
> - if (end <= nodes[j].end) {
> - end = nodes[j].start;
> - found = 1;
> - }
> - }
> - } while (found && start < end);
> -
> - if (start < end) {
> - printk(KERN_ERR "SRAT: No PXM for e820 range: "
> - "%016Lx - %016Lx\n", start, end);
> - return 0;
> - }
> - }
> - return 1;
> -}
> -
>  void __init acpi_numa_arch_fixup(void) {}
>  
>  static uint64_t __initdata srat_region_mask;
> diff --git a/xen/common/numa.c b/xen/common/numa.c
> index 79ab250543..74960885a6 100644
> --- a/xen/common/numa.c
> +++ b/xen/common/numa.c
> @@ -193,6 +193,46 @@ void __init cutoff_node(int i, u64 start, u64 end)
>   }
>  }
>  
> +/* Sanity check to catch more bad SRATs (they are amazingly common).
> +   Make sure the PXMs cover all memory. */
> +int __init nodes_cover_memory(void)
> +{
> + int i;
> + uint32_t nr_banks = arch_meminfo_get_nr_bank();
> +
> + for (i = 0; i < nr_banks; i++) {
> + int j, found;
> + unsigned long long start, end;
> +
> + if (arch_meminfo_get_ram_bank_range(i, , )) {
> + continue;
> + }
> +
> + do {
> + found = 0;
> + for_each_node_mask(j, memory_nodes_parsed)
> + if (start < nodes[j].end
> + && end > nodes[j].start) {
> + if (start >= nodes[j].start) {
> + start = nodes[j].end;
> + found = 1;
> + }
> + if (end <= nodes[j].end) {
> + end = nodes[j].start;
> + found = 1;
> + }
> + }
> + } while (found && start < end);
> +
> + if (start < end) {
> + printk(KERN_ERR "SRAT: No PXM for e820 range: "
> + "%016Lx - %016Lx\n", start, end);

I don't know if you are already doing this in a later patch but the
message shouldn't say e820 as it doesn't exist on all architecture.
Maybe "for address range" or "for memory range" would suffice.

Normally we don't do change together with code movement but in this case
I think it would be OK.