All of lore.kernel.org
 help / color / mirror / Atom feed
From: Vijay Kilari <vijay.kilari@gmail.com>
To: Julien Grall <julien.grall@arm.com>
Cc: Tim Deegan <tim@xen.org>,
	Stefano Stabellini <sstabellini@kernel.org>,
	Wei Liu <wei.liu2@citrix.com>,
	George Dunlap <George.Dunlap@eu.citrix.com>,
	Andrew Cooper <andrew.cooper3@citrix.com>,
	Ian Jackson <ian.jackson@eu.citrix.com>,
	"xen-devel@lists.xen.org" <xen-devel@lists.xen.org>,
	Jan Beulich <jbeulich@suse.com>,
	Vijaya Kumar K <Vijaya.Kumar@cavium.com>
Subject: Re: [RFC PATCH v2 06/25] x86: NUMA: Add accessors for nodes[] and node_memblk_range[] structs
Date: Tue, 9 May 2017 12:32:36 +0530	[thread overview]
Message-ID: <CALicx6szsZhx4q9_rct-ZN53x2pHW1U04QM=DaJNcznzE5LY-g@mail.gmail.com> (raw)
In-Reply-To: <4d999917-56ea-152d-4fed-a96883efa1ac@arm.com>

On Mon, May 8, 2017 at 8:09 PM, Julien Grall <julien.grall@arm.com> wrote:
> Hi Vijay,
>
> On 28/03/17 16:53, vijay.kilari@gmail.com wrote:
>>
>> From: Vijaya Kumar K <Vijaya.Kumar@cavium.com>
>>
>> Add accessor for nodes[] and other static variables and
>
>
> s/accessor/accessors/
>
>> used those accessors.
>
>
> Also, I am not sure to understand the usefulness of those accessors over a
> global variable.

These are static variables which needs to accessed from other files and
later moved to generic file.

>
>> Signed-off-by: Vijaya Kumar K <Vijaya.Kumar@cavium.com>
>> ---
>>  xen/arch/x86/srat.c | 108
>> +++++++++++++++++++++++++++++++++++++++-------------
>>  1 file changed, 82 insertions(+), 26 deletions(-)
>>
>> diff --git a/xen/arch/x86/srat.c b/xen/arch/x86/srat.c
>> index ccacbcd..983e1d8 100644
>> --- a/xen/arch/x86/srat.c
>> +++ b/xen/arch/x86/srat.c
>> @@ -41,7 +41,45 @@ static struct node node_memblk_range[NR_NODE_MEMBLKS];
>>  static nodeid_t memblk_nodeid[NR_NODE_MEMBLKS];
>>  static __initdata DECLARE_BITMAP(memblk_hotplug, NR_NODE_MEMBLKS);
>>
>> -static inline bool node_found(unsigned idx, unsigned pxm)
>> +static struct node *get_numa_node(int id)
>
>
> unsigned int.
OK
>
>> +{
>> +       return &nodes[id];
>> +}
>> +
>> +static nodeid_t get_memblk_nodeid(int id)
>
>
> unsigned int.
>
>> +{
>> +       return memblk_nodeid[id];
>> +}
>> +
>> +static nodeid_t *get_memblk_nodeid_map(void)
>> +{
>> +       return &memblk_nodeid[0];
>> +}
>> +
>> +static struct node *get_node_memblk_range(int memblk)
>
>
> unsigned int.
>
>> +{
>> +       return &node_memblk_range[memblk];
>> +}
>> +
>> +static int get_num_node_memblks(void)
>> +{
>> +       return num_node_memblks;
>> +}
>> +
>> +static int __init numa_add_memblk(nodeid_t nodeid, paddr_t start,
>> uint64_t size)
>> +{
>> +       if (nodeid >= NR_NODE_MEMBLKS)
>> +               return -EINVAL;
>> +
>> +       node_memblk_range[num_node_memblks].start = start;
>> +       node_memblk_range[num_node_memblks].end = start + size;
>> +       memblk_nodeid[num_node_memblks] = nodeid;
>> +       num_node_memblks++;
>> +
>> +       return 0;
>> +}
>> +
>> +static inline bool node_found(unsigned int idx, unsigned int pxm)
>
>
> Please don't make unrelated change in the same patch. In this case I don't
> see why you switch from "unsigned" to "unsigned int".
>
>>  {
>>         return ((pxm2node[idx].pxm == pxm) &&
>>                 (pxm2node[idx].node != NUMA_NO_NODE));
>> @@ -107,11 +145,11 @@ int valid_numa_range(paddr_t start, paddr_t end,
>> nodeid_t node)
>>  {
>>         int i;
>>
>> -       for (i = 0; i < num_node_memblks; i++) {
>> -               struct node *nd = &node_memblk_range[i];
>> +       for (i = 0; i < get_num_node_memblks(); i++) {
>> +               struct node *nd = get_node_memblk_range(i);
>>
>>                 if (nd->start <= start && nd->end > end &&
>> -                       memblk_nodeid[i] == node )
>> +                   get_memblk_nodeid(i) == node)
>
>
> Why the indentation changed here?

OK. will wrap these changes in other patches.

>
>
>>                         return 1;
>>         }
>>
>> @@ -122,8 +160,8 @@ static int __init conflicting_memblks(paddr_t start,
>> paddr_t end)
>>  {
>>         int i;
>>
>> -       for (i = 0; i < num_node_memblks; i++) {
>> -               struct node *nd = &node_memblk_range[i];
>> +       for (i = 0; i < get_num_node_memblks(); i++) {
>> +               struct node *nd = get_node_memblk_range(i);
>>                 if (nd->start == nd->end)
>>                         continue;
>>                 if (nd->end > start && nd->start < end)
>> @@ -136,7 +174,8 @@ static int __init conflicting_memblks(paddr_t start,
>> paddr_t end)
>>
>>  static void __init cutoff_node(int i, paddr_t start, paddr_t end)
>>  {
>> -       struct node *nd = &nodes[i];
>> +       struct node *nd = get_numa_node(i);
>> +
>>         if (nd->start < start) {
>>                 nd->start = start;
>>                 if (nd->end < nd->start)
>> @@ -278,6 +317,7 @@ acpi_numa_memory_affinity_init(const struct
>> acpi_srat_mem_affinity *ma)
>>         unsigned pxm;
>>         nodeid_t node;
>>         int i;
>> +       struct node *memblk;
>>
>>         if (srat_disabled())
>>                 return;
>> @@ -288,7 +328,7 @@ acpi_numa_memory_affinity_init(const struct
>> acpi_srat_mem_affinity *ma)
>>         if (!(ma->flags & ACPI_SRAT_MEM_ENABLED))
>>                 return;
>>
>> -       if (num_node_memblks >= NR_NODE_MEMBLKS)
>> +       if (get_num_node_memblks() >= NR_NODE_MEMBLKS)
>>         {
>>                 dprintk(XENLOG_WARNING,
>>                  "Too many numa entry, try bigger NR_NODE_MEMBLKS \n");
>> @@ -310,27 +350,31 @@ acpi_numa_memory_affinity_init(const struct
>> acpi_srat_mem_affinity *ma)
>>         i = conflicting_memblks(start, end);
>>         if (i < 0)
>>                 /* everything fine */;
>> -       else if (memblk_nodeid[i] == node) {
>> +       else if (get_memblk_nodeid(i) == node) {
>>                 bool mismatch = !(ma->flags & ACPI_SRAT_MEM_HOT_PLUGGABLE)
>> !=
>>                                 !test_bit(i, memblk_hotplug);
>>
>> +               memblk = get_node_memblk_range(i);
>> +
>>                 printk("%sSRAT: PXM %u (%"PRIx64"-%"PRIx64") overlaps with
>> itself (%"PRIx64"-%"PRIx64")\n",
>>                        mismatch ? KERN_ERR : KERN_WARNING, pxm, start,
>> end,
>> -                      node_memblk_range[i].start,
>> node_memblk_range[i].end);
>> +                      memblk->start, memblk->end);
>>                 if (mismatch) {
>>                         bad_srat();
>>                         return;
>>                 }
>>         } else {
>> +               memblk = get_node_memblk_range(i);
>> +
>>                 printk(KERN_ERR
>>                        "SRAT: PXM %u (%"PRIx64"-%"PRIx64") overlaps with
>> PXM %u (%"PRIx64"-%"PRIx64")\n",
>> -                      pxm, start, end, node_to_pxm(memblk_nodeid[i]),
>> -                      node_memblk_range[i].start,
>> node_memblk_range[i].end);
>> +                      pxm, start, end, node_to_pxm(get_memblk_nodeid(i)),
>> +                      memblk->start, memblk->end);
>>                 bad_srat();
>>                 return;
>>         }
>>         if (!(ma->flags & ACPI_SRAT_MEM_HOT_PLUGGABLE)) {
>> -               struct node *nd = &nodes[node];
>> +               struct node *nd = get_numa_node(node);
>>
>>                 if (!node_test_and_set(node, memory_nodes_parsed)) {
>>                         nd->start = start;
>> @@ -346,15 +390,17 @@ acpi_numa_memory_affinity_init(const struct
>> acpi_srat_mem_affinity *ma)
>>                node, pxm, start, end,
>>                ma->flags & ACPI_SRAT_MEM_HOT_PLUGGABLE ? " (hotplug)" :
>> "");
>>
>> -       node_memblk_range[num_node_memblks].start = start;
>> -       node_memblk_range[num_node_memblks].end = end;
>> -       memblk_nodeid[num_node_memblks] = node;
>> +       if (numa_add_memblk(node, start, ma->length)) {
>> +               printk(KERN_ERR "SRAT: node-id %u out of range\n", node);
>> +               bad_srat();
>> +               return;
>> +       }
>> +
>>         if (ma->flags & ACPI_SRAT_MEM_HOT_PLUGGABLE) {
>> -               __set_bit(num_node_memblks, memblk_hotplug);
>> +               __set_bit(get_num_node_memblks(), memblk_hotplug);
>>                 if (end > mem_hotplug)
>>                         mem_hotplug = end;
>>         }
>> -       num_node_memblks++;
>>  }
>>
>>  /* Sanity check to catch more bad SRATs (they are amazingly common).
>> @@ -377,17 +423,21 @@ static int __init nodes_cover_memory(void)
>>                 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;
>> +                       {
>> +                               struct node *nd = get_numa_node(j);
>> +
>> +                               if (start < nd->end
>> +                                   && end > nd->start) {
>> +                                       if (start >= nd->start) {
>> +                                               start = nd->end;
>>                                                 found = 1;
>>                                         }
>> -                                       if (end <= nodes[j].end) {
>> -                                               end = nodes[j].start;
>> +                                       if (end <= nd->end) {
>> +                                               end = nd->start;
>>                                                 found = 1;
>>                                         }
>>                                 }
>> +                       }
>>                 } while (found && start < end);
>>
>>                 if (start < end) {
>> @@ -457,6 +507,8 @@ int __init acpi_scan_nodes(uint64_t start, uint64_t
>> end)
>>  {
>>         int i;
>>         nodemask_t all_nodes_parsed;
>> +       struct node *memblks;
>> +       nodeid_t *nodeids;
>>
>>         /* First clean up the node list */
>>         for (i = 0; i < MAX_NUMNODES; i++)
>> @@ -470,6 +522,8 @@ int __init acpi_scan_nodes(uint64_t start, uint64_t
>> end)
>>                 return -1;
>>         }
>>
>> +       memblks = get_node_memblk_range(0);
>> +       nodeids = get_memblk_nodeid_map();
>>         if (compute_memnode_shift(node_memblk_range, num_node_memblks,
>>                                   memblk_nodeid, &memnode_shift)) {
>>                 memnode_shift = 0;
>> @@ -484,12 +538,14 @@ int __init acpi_scan_nodes(uint64_t start, uint64_t
>> end)
>>         /* Finally register nodes */
>>         for_each_node_mask(i, all_nodes_parsed)
>>         {
>> -               uint64_t size = nodes[i].end - nodes[i].start;
>> +               struct node *nd = get_numa_node(i);
>> +               uint64_t size = nd->end - nd->start;
>> +
>>                 if ( size == 0 )
>>                         printk(KERN_WARNING "SRAT: Node %u has no memory.
>> "
>>                                "BIOS Bug or mis-configured hardware?\n",
>> i);
>>
>> -               setup_node_bootmem(i, nodes[i].start, nodes[i].end);
>> +               setup_node_bootmem(i, nd->start, nd->end);
>>         }
>>         for (i = 0; i < nr_cpu_ids; i++) {
>>                 if (cpu_to_node[i] == NUMA_NO_NODE)
>>
>
> Cheers,
>
> --
> Julien Grall

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

  reply	other threads:[~2017-05-09  7:02 UTC|newest]

Thread overview: 71+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2017-03-28 15:53 [RFC PATCH v2 00/25] ARM: Add Xen NUMA support vijay.kilari
2017-03-28 15:53 ` [RFC PATCH v2 01/25] x86: NUMA: Clean up: Drop trailing spaces vijay.kilari
2017-03-28 16:44   ` Wei Liu
2017-05-31 10:20   ` Jan Beulich
2017-05-31 10:21   ` Jan Beulich
2017-03-28 15:53 ` [RFC PATCH v2 02/25] x86: NUMA: Fix datatypes and attributes vijay.kilari
2017-03-28 16:44   ` Wei Liu
2017-05-31 10:35   ` Jan Beulich
2017-03-28 15:53 ` [RFC PATCH v2 03/25] x86: NUMA: Rename and sanitize some common functions vijay.kilari
2017-06-30 14:05   ` Jan Beulich
2017-07-11 10:16     ` Vijay Kilari
2017-03-28 15:53 ` [RFC PATCH v2 04/25] x86: NUMA: Add accessors for acpi_numa, numa_off and numa_fake variables vijay.kilari
2017-04-20 15:59   ` Julien Grall
2017-04-25  6:54     ` Vijay Kilari
2017-04-25 12:04       ` Julien Grall
2017-04-25 12:20         ` Vijay Kilari
2017-04-25 12:28           ` Julien Grall
2017-04-25 14:54             ` Vijay Kilari
2017-04-25 15:14               ` Julien Grall
2017-04-25 15:43                 ` Jan Beulich
2017-05-02  9:47                   ` Vijay Kilari
2017-05-02  9:54                     ` Jan Beulich
2017-05-08 17:38                     ` Julien Grall
2017-06-30 14:07   ` Jan Beulich
2017-03-28 15:53 ` [RFC PATCH v2 05/25] x86: NUMA: Move generic dummy_numa_init to separate function vijay.kilari
2017-04-20 16:12   ` Julien Grall
2017-04-25  6:59     ` Vijay Kilari
2017-06-30 14:08   ` Jan Beulich
2017-03-28 15:53 ` [RFC PATCH v2 06/25] x86: NUMA: Add accessors for nodes[] and node_memblk_range[] structs vijay.kilari
2017-05-08 14:39   ` Julien Grall
2017-05-09  7:02     ` Vijay Kilari [this message]
2017-05-09  8:13       ` Julien Grall
2017-03-28 15:53 ` [RFC PATCH v2 07/25] x86: NUMA: Rename some generic functions vijay.kilari
2017-03-28 15:53 ` [RFC PATCH v2 08/25] x86: NUMA: Sanitize node distance vijay.kilari
2017-03-28 15:53 ` [RFC PATCH v2 09/25] ARM: NUMA: Add existing ARM numa code under CONFIG_NUMA vijay.kilari
2017-05-08 15:58   ` Julien Grall
2017-05-09  7:14     ` Vijay Kilari
2017-05-09  8:21       ` Julien Grall
2017-03-28 15:53 ` [RFC PATCH v2 10/25] x86: NUMA: Move numa code and make it generic vijay.kilari
2017-05-08 16:41   ` Julien Grall
2017-05-09  7:36     ` Vijay Kilari
2017-05-09  8:23       ` Julien Grall
2017-05-08 16:51   ` Julien Grall
2017-05-09  7:39     ` Vijay Kilari
2017-05-09  8:26       ` Julien Grall
2017-03-28 15:53 ` [RFC PATCH v2 11/25] x86: NUMA: Move common code from srat.c vijay.kilari
2017-05-08 17:06   ` Julien Grall
2017-05-10  9:00     ` Vijay Kilari
2017-03-28 15:53 ` [RFC PATCH v2 12/25] ARM: NUMA: Parse CPU NUMA information vijay.kilari
2017-05-08 17:31   ` Julien Grall
2017-05-10  5:24     ` Vijay Kilari
2017-05-10  8:52       ` Julien Grall
2017-03-28 15:53 ` [RFC PATCH v2 13/25] ARM: NUMA: Parse memory " vijay.kilari
2017-03-28 15:53 ` [RFC PATCH v2 14/25] ARM: NUMA: Parse NUMA distance information vijay.kilari
2017-03-28 15:53 ` [RFC PATCH v2 15/25] ARM: NUMA: Add CPU NUMA support vijay.kilari
2017-03-28 15:53 ` [RFC PATCH v2 16/25] ARM: NUMA: Add memory " vijay.kilari
2017-03-28 15:53 ` [RFC PATCH v2 17/25] ARM: NUMA: Add fallback on NUMA failure vijay.kilari
2017-03-28 15:53 ` [RFC PATCH v2 18/25] ARM: NUMA: Do not expose numa info to DOM0 vijay.kilari
2017-03-28 15:53 ` [RFC PATCH v2 19/25] ACPI: Refactor acpi SRAT and SLIT table handling code vijay.kilari
2017-03-28 15:53 ` [RFC PATCH v2 20/25] ARM: NUMA: Extract MPIDR from MADT table vijay.kilari
2017-03-28 15:53 ` [RFC PATCH v2 21/25] ACPI: Move arch specific SRAT parsing vijay.kilari
2017-03-28 15:53 ` [RFC PATCH v2 22/25] ARM: NUMA: Extract proximity from SRAT table vijay.kilari
2017-03-28 15:53 ` [RFC PATCH v2 23/25] ARM: NUMA: Initialize ACPI NUMA vijay.kilari
2017-03-28 15:53 ` [RFC PATCH v2 24/25] NUMA: Move CONFIG_NUMA to common Kconfig vijay.kilari
2017-05-31 10:04   ` Jan Beulich
2017-05-31 10:18     ` Julien Grall
2017-05-31 10:37       ` Jan Beulich
2017-06-15  7:52         ` Vijay Kilari
2017-06-15  9:00           ` Julien Grall
2017-03-28 15:53 ` [RFC PATCH v2 25/25] NUMA: Enable ACPI_NUMA config vijay.kilari
2017-05-31 10:05   ` Jan Beulich

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to='CALicx6szsZhx4q9_rct-ZN53x2pHW1U04QM=DaJNcznzE5LY-g@mail.gmail.com' \
    --to=vijay.kilari@gmail.com \
    --cc=George.Dunlap@eu.citrix.com \
    --cc=Vijaya.Kumar@cavium.com \
    --cc=andrew.cooper3@citrix.com \
    --cc=ian.jackson@eu.citrix.com \
    --cc=jbeulich@suse.com \
    --cc=julien.grall@arm.com \
    --cc=sstabellini@kernel.org \
    --cc=tim@xen.org \
    --cc=wei.liu2@citrix.com \
    --cc=xen-devel@lists.xen.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.