|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] RE: [XEN RFC PATCH 39/40] xen/x86: move numa_setup to common to support NUMA switch in command line
Hi Julien,
> -----Original Message-----
> From: Julien Grall <julien@xxxxxxx>
> Sent: 2021年8月27日 22:38
> To: Wei Chen <Wei.Chen@xxxxxxx>; xen-devel@xxxxxxxxxxxxxxxxxxxx;
> sstabellini@xxxxxxxxxx; jbeulich@xxxxxxxx
> Cc: Bertrand Marquis <Bertrand.Marquis@xxxxxxx>
> Subject: Re: [XEN RFC PATCH 39/40] xen/x86: move numa_setup to common to
> support NUMA switch in command line
>
> Hi Wei,
>
> On 11/08/2021 11:24, Wei Chen wrote:
> > Xen x86 has created a command line parameter "numa" as NUMA switch for
> > user to turn on/off NUMA. As device tree based NUMA has been enabled
> > for Arm, this parameter can be reused by Arm. So in this patch, we move
> > this parameter to common.
> >
> > Signed-off-by: Wei Chen <wei.chen@xxxxxxx>
> > ---
> > xen/arch/x86/numa.c | 34 ----------------------------------
> > xen/common/numa.c | 35 ++++++++++++++++++++++++++++++++++-
> > xen/include/xen/numa.h | 1 -
> > 3 files changed, 34 insertions(+), 36 deletions(-)
> >
> > diff --git a/xen/arch/x86/numa.c b/xen/arch/x86/numa.c
> > index 8b43be4aa7..380d8ed6fd 100644
> > --- a/xen/arch/x86/numa.c
> > +++ b/xen/arch/x86/numa.c
> > @@ -11,7 +11,6 @@
> > #include <xen/nodemask.h>
> > #include <xen/numa.h>
> > #include <xen/keyhandler.h>
> > -#include <xen/param.h>
> > #include <xen/time.h>
> > #include <xen/smp.h>
> > #include <xen/pfn.h>
> > @@ -19,9 +18,6 @@
> > #include <xen/sched.h>
> > #include <xen/softirq.h>
> >
> > -static int numa_setup(const char *s);
> > -custom_param("numa", numa_setup);
> > -
> > #ifndef Dprintk
> > #define Dprintk(x...)
> > #endif
> > @@ -50,35 +46,6 @@ void numa_set_node(int cpu, nodeid_t node)
> > cpu_to_node[cpu] = node;
> > }
> >
> > -/* [numa=off] */
> > -static __init int numa_setup(const char *opt)
> > -{
> > - if ( !strncmp(opt,"off",3) )
> > - numa_off = true;
> > - else if ( !strncmp(opt,"on",2) )
> > - numa_off = false;
> > -#ifdef CONFIG_NUMA_EMU
> > - else if ( !strncmp(opt, "fake=", 5) )
> > - {
> > - numa_off = false;
> > - numa_fake = simple_strtoul(opt+5,NULL,0);
> > - if ( numa_fake >= MAX_NUMNODES )
> > - numa_fake = MAX_NUMNODES;
> > - }
> > -#endif
> > -#ifdef CONFIG_ACPI_NUMA
> > - else if ( !strncmp(opt,"noacpi",6) )
> > - {
> > - numa_off = false;
> > - acpi_numa = -1;
> > - }
> > -#endif
> > - else
> > - return -EINVAL;
> > -
> > - return 0;
> > -}
> > -
> > /*
> > * Setup early cpu_to_node.
> > *
> > @@ -287,4 +254,3 @@ static __init int register_numa_trigger(void)
> > return 0;
> > }
> > __initcall(register_numa_trigger);
> > -
> > diff --git a/xen/common/numa.c b/xen/common/numa.c
> > index 88f1594127..c98eb8d571 100644
> > --- a/xen/common/numa.c
> > +++ b/xen/common/numa.c
> > @@ -14,8 +14,12 @@
> > #include <xen/smp.h>
> > #include <xen/pfn.h>
> > #include <xen/sched.h>
> > +#include <xen/param.h>
> > #include <asm/acpi.h>
> >
> > +static int numa_setup(const char *s);
> > +custom_param("numa", numa_setup);
> > +
> > struct node_data node_data[MAX_NUMNODES];
> >
> > /* Mapping from pdx to node id */
> > @@ -324,7 +328,7 @@ int __init numa_scan_nodes(u64 start, u64 end)
> > }
> >
> > #ifdef CONFIG_NUMA_EMU
> > -int numa_fake __initdata = 0;
> > +static int numa_fake __initdata = 0;
> >
> > /* Numa emulation */
> > static int __init numa_emulation(u64 start_pfn, u64 end_pfn)
> > @@ -409,3 +413,32 @@ void __init numa_initmem_init(unsigned long
> start_pfn, unsigned long end_pfn)
> > /* architecture specified fallback operations */
> > arch_numa_init_failed_fallback();
> > }
> > +
> > +/* [numa=off] */
>
> The documentation also needs be be updated to reflect that facts this
> option is not architecture-agnostic.
>
Ok, I will update the relate document in next version.
> > +static __init int numa_setup(const char *opt)
> > +{
> > + if ( !strncmp(opt,"off",3) )
> > + numa_off = true;
> > + else if ( !strncmp(opt,"on",2) )
> > + numa_off = false;
> > +#ifdef CONFIG_NUMA_EMU
> > + else if ( !strncmp(opt, "fake=", 5) )
> > + {
> > + numa_off = false;
> > + numa_fake = simple_strtoul(opt+5,NULL,0);
> > + if ( numa_fake >= MAX_NUMNODES )
> > + numa_fake = MAX_NUMNODES;
> > + }
> > +#endif
> > +#ifdef CONFIG_ACPI_NUMA
> > + else if ( !strncmp(opt,"noacpi",6) )
> > + {
> > + numa_off = false;
> > + acpi_numa = -1;
> > + }
> > +#endif
>
> Looking at this code, I am not quite too sure to understand the
> difference between between "numa=noacpi" and "numa=off".
>
> In fact, I am tempted to say this option should disappear because this
> is odd to have a firmware specific option just for ACPI but not DT. Even
> if we have one for each, this makes things a bit more complicated for
> the admin.
>
Yes, I agree. I would consider a proper way to address it in next version.
If x86 maintainers can give some background of these two options would be
better.
> > + else
> > + return -EINVAL;
> > +
> > + return 0;
> > +}
> > diff --git a/xen/include/xen/numa.h b/xen/include/xen/numa.h
> > index b9b5d1ad88..c647fef736 100644
> > --- a/xen/include/xen/numa.h
> > +++ b/xen/include/xen/numa.h
> > @@ -83,7 +83,6 @@ extern void numa_initmem_init(unsigned long start_pfn,
> unsigned long end_pfn);
> > extern void numa_set_node(int cpu, nodeid_t node);
> > extern int numa_scan_nodes(u64 start, u64 end);
> > extern bool numa_off;
> > -extern int numa_fake;
> > extern s8 acpi_numa;
> >
> > extern void setup_node_bootmem(nodeid_t nodeid, u64 start, u64 end);
> >
>
> Cheers,
>
> --
> Julien Grall
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |