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

RE: [PATCH v2 3/9] xen/x86: move generically usable NUMA code from x86 to common


  • To: Jan Beulich <jbeulich@xxxxxxxx>
  • From: Wei Chen <Wei.Chen@xxxxxxx>
  • Date: Wed, 13 Jul 2022 10:16:27 +0000
  • Accept-language: en-US
  • Arc-authentication-results: i=2; mx.microsoft.com 1; spf=pass (sender ip is 63.35.35.123) smtp.rcpttodomain=lists.xenproject.org smtp.mailfrom=arm.com; dmarc=pass (p=none sp=none pct=100) action=none header.from=arm.com; dkim=pass (signature was verified) header.d=armh.onmicrosoft.com; arc=pass (0 oda=1 ltdi=1 spf=[1,1,smtp.mailfrom=arm.com] dkim=[1,1,header.d=arm.com] dmarc=[1,1,header.from=arm.com])
  • Arc-authentication-results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=arm.com; dmarc=pass action=none header.from=arm.com; dkim=pass header.d=arm.com; arc=none
  • Arc-message-signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=Xb0w0KYqHRAgHMHI5tHJCkEqglPE9kxIQ9fuCXjxuS4=; b=ceyI9jmXSDzHq2xJ4+F1Amnly4+kEjYjzsCPixt59Me30JbgwNDsFxEuIndP4FgiWvxlUTYwoZR/zgoaoAcER6wXOcx0sf0OlgsbwP15+Wp7vYDylkRi3Redb7u7yr7wroinfdsFE/bZO2rwndrhJU548KJz8J8CyJ0FO+sbqodBNbnpQdAbMZzm4llxrJKeWYYj/NUNihwQ2kjEQ9rbSxC/WEvCErk+jYY+3/E3Kefh8wf77BZtK90XELqCx54VD+hzHo2CNIxUY1KyNw5llniyca0aHOpWZgKnYFnhGwrbcBTAYAJj9gMvPrO6Whz1P04YkhvzPC7bP71vhPZL6Q==
  • Arc-message-signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=Xb0w0KYqHRAgHMHI5tHJCkEqglPE9kxIQ9fuCXjxuS4=; b=Swt+4fg2DidimDiRCDoqnUXN3Pgxod1tGck3b2+q/7RZbPF3gHUF3wm4XwBYWvbX5m2NHdvM37mef0nY2Evchhkn/ZbUvxjfyhCKzGHHl8xYD/uUrh3oHxW9BBY5CI+fYxMDL0FTfKImLQ+Hb48EgcmhAzOq5Yo0MvuusEvbrrBOT5eHG09FzUr+2rSg2gkg5YsBbxjMEA2DBWbwgoWrY4Nt3abcoSTLVa4TSmQHRH9q19ZkLlpg0s0fTncP0P7VFeN99/jjkEZJ8gNdShlu3D+1v42kBCxdVucgAGrgS5afd5jRxy4nIGsgb1Xcuv2VmJUpxLqtt7rF2uPH0clMww==
  • Arc-seal: i=2; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=pass; b=YWwx3t2kOsv8lcp0+mxOyvq9IehEWLPBqp6gQyTP5WGDbv+JbYroIVeXjBh31DvgWG4uTmlWLJoEQgXZXA6eSW6Q89bc1Udk6Ofo+OxFvd4sRSIP0DChCSiYdCVik6d3kps7SJGtJd0cssDIEMMrHPfso/+ckESe1XYP78Ss63pbrix1ERZCd8CUBTxvdiDHWfJUP0djoB9SzjauU0p7OdMPUN+XklUvSXgNv4IGf2v6ck0FV2q0mKMm3o8Q+eFLN7557lYKu3KnUBsY/cg38izYvI6Y5xhfJQVGsMJzuH8879LRH3WxM6EZ6jHp6+2L0FQlvz0kULCGaKI1lnK1Iw==
  • Arc-seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=Yz9ZXHi8+VZqtHP/YGMoEL2E2C9bf7718yrcHLCLs6Y4yCcaN3SGsCObw0TsPc1VXadJHVtve/3YZ0L2bQVO3ECa9Z4u7JR9wTbUC4IGvWnjd1JWWafCTJ/ONVzGLfRRkqX0IlAYGtWJokSkP657LIUh+glXtUMpKpZF8ZQ0WzJcISTjSwY+Ba8BtBBwN0Jd4wWUwKPCfwklVuM4hCRn9Mz1D+goLEaZhleRJvgb2+aEPsZv1zUr86rxwXaDKJA9PyAJKU5f6HBQUT43YpJ6f5eiyzNjMQCYKq8gvAygF2RjMWAOaGwA+jBFKxWHm/eknmrW2YxJVKLQOF+5zeCy3Q==
  • Authentication-results-original: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=arm.com;
  • Cc: nd <nd@xxxxxxx>, Andrew Cooper <andrew.cooper3@xxxxxxxxxx>, Roger Pau Monné <roger.pau@xxxxxxxxxx>, Wei Liu <wl@xxxxxxx>, George Dunlap <george.dunlap@xxxxxxxxxx>, Julien Grall <julien@xxxxxxx>, Stefano Stabellini <sstabellini@xxxxxxxxxx>, "xen-devel@xxxxxxxxxxxxxxxxxxxx" <xen-devel@xxxxxxxxxxxxxxxxxxxx>
  • Delivery-date: Wed, 13 Jul 2022 10:16:58 +0000
  • List-id: Xen developer discussion <xen-devel.lists.xenproject.org>
  • Nodisclaimer: true
  • Original-authentication-results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=arm.com;
  • Thread-index: AQHYktq7O5jRSbf360ijLU+hFXQsAa16vIcAgAFcEGA=
  • Thread-topic: [PATCH v2 3/9] xen/x86: move generically usable NUMA code from x86 to common

Hi Jan,

> -----Original Message-----
> From: Jan Beulich <jbeulich@xxxxxxxx>
> Sent: 2022年7月12日 21:13
> To: Wei Chen <Wei.Chen@xxxxxxx>
> Cc: nd <nd@xxxxxxx>; Andrew Cooper <andrew.cooper3@xxxxxxxxxx>; Roger Pau
> Monné <roger.pau@xxxxxxxxxx>; Wei Liu <wl@xxxxxxx>; George Dunlap
> <george.dunlap@xxxxxxxxxx>; Julien Grall <julien@xxxxxxx>; Stefano
> Stabellini <sstabellini@xxxxxxxxxx>; xen-devel@xxxxxxxxxxxxxxxxxxxx
> Subject: Re: [PATCH v2 3/9] xen/x86: move generically usable NUMA code
> from x86 to common
> 
> On 08.07.2022 16:54, Wei Chen wrote:
> > --- /dev/null
> > +++ b/xen/common/numa.c
> > @@ -0,0 +1,439 @@
> > +/*
> > + * Generic VM initialization for NUMA setups.
> > + * Copyright 2002,2003 Andi Kleen, SuSE Labs.
> > + * Adapted for Xen: Ryan Harper <ryanh@xxxxxxxxxx>
> > + */
> > +
> > +#include <xen/init.h>
> > +#include <xen/keyhandler.h>
> > +#include <xen/mm.h>
> > +#include <xen/nodemask.h>
> > +#include <xen/numa.h>
> > +#include <xen/param.h>
> > +#include <xen/sched.h>
> > +#include <xen/softirq.h>
> > +#include <asm/acpi.h>
> 
> Isn't the goal for the now common code to not be dependent upon ACPI?
> 

Ah, good catch, current common code should be ACPI decoupled.
I will remove "#include <asm/acpi.h>"

Thanks,
Wei Chen

> > +struct node_data node_data[MAX_NUMNODES];
> > +
> > +/* Mapping from pdx to node id */
> > +int memnode_shift;
> > +static typeof(*memnodemap) _memnodemap[64];
> > +unsigned long memnodemapsize;
> > +u8 *memnodemap;
> 
> For code moved, please switch to (in this case) uint8_t. I'm on the
> edge of asking to go further and
> - also use __read_mostly for some / all of these,
> - make memnode_shift unsigned int (sadly this looks to require more
>   adjustments, even if negative shift counts are meaningless),
> - convert from plain int to unsigned int elsewhere as appropriate,
> - add const where appropriate / possible.
> 

Ok, I will address them in next version.

> > +nodeid_t cpu_to_node[NR_CPUS] __read_mostly = {
> > +    [0 ... NR_CPUS-1] = NUMA_NO_NODE
> > +};
> > +
> > +cpumask_t node_to_cpumask[MAX_NUMNODES] __read_mostly;
> 
> For these two please put __read_mostly into its more conventional
> place (right after the type).
> 

Ok.

> > +nodemask_t __read_mostly node_online_map = { { [0] = 1UL } };
> > +
> > +enum numa_mode numa_status;
> 
> This should probably have been __read_mostly already in the earlier
> patch introducing it.
> 

Ok.

> > +#ifdef CONFIG_NUMA_EMU
> > +static int numa_fake __initdata = 0;
> 
> The __initdata again wants to move, and the initializer can be omitted.
> 

Ok.

> > +/* [numa=off] */
> > +static int __init cf_check numa_setup(const char *opt)
> > +{
> > +    if ( !strncmp(opt,"off",3) )
> 
> As you're correcting style violations elsewhere, please also insert the
> missing spaces here and below.
> 

Ack.

> > --- a/xen/include/xen/numa.h
> > +++ b/xen/include/xen/numa.h
> > @@ -18,4 +18,78 @@
> >    (((d)->vcpu != NULL && (d)->vcpu[0] != NULL) \
> >     ? vcpu_to_node((d)->vcpu[0]) : NUMA_NO_NODE)
> >
> > +/* The following content can be used when NUMA feature is enabled */
> > +#ifdef CONFIG_NUMA
> > +
> > +extern nodeid_t      cpu_to_node[NR_CPUS];
> > +extern cpumask_t     node_to_cpumask[];
> > +
> > +#define cpu_to_node(cpu)        (cpu_to_node[cpu])
> > +#define parent_node(node)       (node)
> > +#define node_to_first_cpu(node) (__ffs(node_to_cpumask[node]))
> > +#define node_to_cpumask(node)   (node_to_cpumask[node])
> > +
> > +struct node {
> > +    paddr_t start, end;
> > +};
> > +
> > +extern int compute_hash_shift(struct node *nodes, int numnodes,
> > +                              nodeid_t *nodeids);
> > +
> > +#define VIRTUAL_BUG_ON(x)
> > +
> > +/* Enumerations for NUMA status. */
> > +enum numa_mode {
> > +    numa_on = 0,
> > +    numa_off,
> > +    /* NUMA turns on, but ACPI table is bad or disabled. */
> > +    numa_no_acpi,
> > +    /* NUMA turns on, and ACPI table works well. */
> > +    numa_acpi,
> > +};
> > +
> > +extern void numa_add_cpu(int cpu);
> > +extern void numa_init_array(void);
> > +extern void numa_initmem_init(unsigned long start_pfn, unsigned long
> end_pfn);
> > +extern bool numa_enabled_with_firmware(void);
> > +extern enum numa_mode numa_status;
> > +
> > +extern void numa_set_node(int cpu, nodeid_t node);
> > +extern void setup_node_bootmem(nodeid_t nodeid, paddr_t start, paddr_t
> end);
> > +
> > +static inline void clear_node_cpumask(int cpu)
> > +{
> > +    cpumask_clear_cpu(cpu, &node_to_cpumask[cpu_to_node(cpu)]);
> > +}
> > +
> > +/* Simple perfect hash to map pdx to node numbers */
> > +extern int memnode_shift;
> > +extern unsigned long memnodemapsize;
> > +extern u8 *memnodemap;
> > +
> > +struct node_data {
> > +    unsigned long node_start_pfn;
> > +    unsigned long node_spanned_pages;
> > +};
> > +
> > +extern struct node_data node_data[];
> > +
> > +static inline __attribute__((pure)) nodeid_t phys_to_nid(paddr_t addr)
> 
> Please use __attribute_pure__.
> 

Ack.

> Jan

 


Rackspace

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