[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Xen-devel] [PATCH v4 1/9] numa: __node_distance() should return u8



On 10/03/15 02:27, Boris Ostrovsky wrote:
> SLIT values are byte-sized and some of them (0-9 and 255) have
> special meaning. Adjust __node_distance() to reflect this and
> modify scrub_heap_pages() to deal with __node_distance() returning
> an invalid SLIT entry.
>
> Signed-off-by: Boris Ostrovsky <boris.ostrovsky@xxxxxxxxxx>

You also need to teach XEN_SYSCTL_numainfo about the new NUMA_NO_DISTANCE.

> ---
>  xen/arch/x86/srat.c        |   15 +++++++++++----
>  xen/common/page_alloc.c    |    4 ++--
>  xen/include/asm-x86/numa.h |    2 +-
>  xen/include/xen/numa.h     |    3 ++-
>  4 files changed, 16 insertions(+), 8 deletions(-)
>
> diff --git a/xen/arch/x86/srat.c b/xen/arch/x86/srat.c
> index dfabba3..aa2eda3 100644
> --- a/xen/arch/x86/srat.c
> +++ b/xen/arch/x86/srat.c
> @@ -496,14 +496,21 @@ static unsigned node_to_pxm(nodeid_t n)
>       return 0;
>  }
>  
> -int __node_distance(nodeid_t a, nodeid_t b)
> +u8 __node_distance(nodeid_t a, nodeid_t b)
>  {
> -     int index;
> +     u8 slit_val;
>  
>       if (!acpi_slit)
>               return a == b ? 10 : 20;
> -     index = acpi_slit->locality_count * node_to_pxm(a);
> -     return acpi_slit->entry[index + node_to_pxm(b)];
> +
> +     slit_val = acpi_slit->entry[acpi_slit->locality_count * node_to_pxm(a) +
> +                                             node_to_pxm(b)];

This would be easier to read if you kept the old index temporary
(although making it a u64).

~Andrew

> +
> +     /* ACPI defines 0xff as an unreachable node and 0-9 are undefined */
> +     if ((slit_val == 0xff) || (slit_val <= 9))
> +             return NUMA_NO_DISTANCE;
> +     else
> +             return slit_val;
>  }
>  
>  EXPORT_SYMBOL(__node_distance);
> diff --git a/xen/common/page_alloc.c b/xen/common/page_alloc.c
> index d96d25b..0f0ca56 100644
> --- a/xen/common/page_alloc.c
> +++ b/xen/common/page_alloc.c
> @@ -1435,13 +1435,13 @@ void __init scrub_heap_pages(void)
>          /* Figure out which NODE CPUs are close. */
>          for_each_online_node ( j )
>          {
> -            int distance;
> +            u8 distance;
>  
>              if ( cpumask_empty(&node_to_cpumask(j)) )
>                  continue;
>  
>              distance = __node_distance(i, j);
> -            if ( distance < last_distance )
> +            if ( (distance < last_distance) && (distance != 
> NUMA_NO_DISTANCE) )
>              {
>                  last_distance = distance;
>                  best_node = j;
> diff --git a/xen/include/asm-x86/numa.h b/xen/include/asm-x86/numa.h
> index cc5b5d1..7a489d3 100644
> --- a/xen/include/asm-x86/numa.h
> +++ b/xen/include/asm-x86/numa.h
> @@ -85,6 +85,6 @@ extern int valid_numa_range(u64 start, u64 end, nodeid_t 
> node);
>  #endif
>  
>  void srat_parse_regions(u64 addr);
> -extern int __node_distance(nodeid_t a, nodeid_t b);
> +extern u8 __node_distance(nodeid_t a, nodeid_t b);
>  
>  #endif
> diff --git a/xen/include/xen/numa.h b/xen/include/xen/numa.h
> index ac4b391..7aef1a8 100644
> --- a/xen/include/xen/numa.h
> +++ b/xen/include/xen/numa.h
> @@ -7,7 +7,8 @@
>  #define NODES_SHIFT     0
>  #endif
>  
> -#define NUMA_NO_NODE    0xFF
> +#define NUMA_NO_NODE     0xFF
> +#define NUMA_NO_DISTANCE 0xFF
>  
>  #define MAX_NUMNODES    (1 << NODES_SHIFT)
>  



_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxx
http://lists.xen.org/xen-devel


 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.