From: Alex Chiang <achiang@hp.com>
To: David Rientjes <rientjes@google.com>
Cc: Andrew Morton <akpm@linux-foundation.org>,
Heiko Carstens <heiko.carstens@de.ibm.com>,
Gary Hade <garyhade@us.ibm.com>,
linux-kernel@vger.kernel.org, linux-mm@kvack.org,
Badari Pulavarty <pbadari@us.ibm.com>,
Martin Schwidefsky <schwidefsky@de.ibm.com>,
Ingo Molnar <mingo@elte.hu>
Subject: Re: [patch -mm] mm: slab allocate memory section nodemask for large systems
Date: Mon, 2 Nov 2009 13:47:26 -0700 [thread overview]
Message-ID: <20091102204726.GG5525@ldl.fc.hp.com> (raw)
In-Reply-To: <alpine.DEB.2.00.0910281315370.23279@chino.kir.corp.google.com>
Hi Andrew,
* David Rientjes <rientjes@google.com>:
> On Wed, 28 Oct 2009, Alex Chiang wrote:
>
> > Am I not understanding the code? It looks like we do this
> > already...
> >
> > /* unregister memory section under all nodes that it spans */
> > int unregister_mem_sect_under_nodes(struct memory_block *mem_blk)
> > {
> > nodemask_t unlinked_nodes;
> > unsigned long pfn, sect_start_pfn, sect_end_pfn;
> >
> > if (!mem_blk)
> > return -EFAULT;
> > nodes_clear(unlinked_nodes);
> > sect_start_pfn = section_nr_to_pfn(mem_blk->phys_index);
> > sect_end_pfn = sect_start_pfn + PAGES_PER_SECTION - 1;
> > for (pfn = sect_start_pfn; pfn <= sect_end_pfn; pfn++) {
> > int nid;
> >
> > nid = get_nid_for_pfn(pfn);
> > if (nid < 0)
> > continue;
> > if (!node_online(nid))
> > continue;
> > if (node_test_and_set(nid, unlinked_nodes))
> > continue;
> > sysfs_remove_link(&node_devices[nid].sysdev.kobj,
> > kobject_name(&mem_blk->sysdev.kobj));
> > sysfs_remove_link(&mem_blk->sysdev.kobj,
> > kobject_name(&node_devices[nid].sysdev.kobj));
> > }
> > return 0;
> > }
> >
>
> That shound be sufficient with the exception that allocating nodemask_t
> on the stack is usually dangerous because it can be extremely large; we
> typically use NODEMASK_ALLOC() for such code. It's had some changes in
> -mm, but since this patchset will likely be going through that tree anyway
> we can fix it now with the patch below.
>
> Otherwise, it looks like the iteration is already there and will remove
> links for memory sections bound to multiple nodes if they exist through
> hotplug.
Any comments on this patch series?
Turns out that Kame-san's fear about a memory section spanning
several nodes on certain architectures (S390) isn't really
applicable and even if it were, we have code to handle situation
anyway.
Kame-san was generally supportive of these convenience symlinks
although he did not give a formal ACK.
David has given an ACK on the two patches that do real work, as
well as supplied the below patch.
I can respin this series once more, including David's Acked-by:
and adding his patch if that makes life easier for you.
Thanks,
/ac
> mm: slab allocate memory section nodemask for large systems
>
> Nodemasks should not be allocated on the stack for large systems (when it
> is larger than 256 bytes) since there is a threat of overflow.
>
> This patch causes the unregister_mem_sect_under_nodes() nodemask to be
> allocated on the stack for smaller systems and be allocated by slab for
> larger systems.
>
> GFP_KERNEL is used since remove_memory_block() can block.
>
> Cc: Gary Hade <garyhade@us.ibm.com>
> Cc: Badari Pulavarty <pbadari@us.ibm.com>
> Signed-off-by: David Rientjes <rientjes@google.com>
> ---
> Depends on NODEMASK_ALLOC() changes currently present only in -mm.
>
> drivers/base/node.c | 11 +++++++----
> 1 files changed, 7 insertions(+), 4 deletions(-)
>
> diff --git a/drivers/base/node.c b/drivers/base/node.c
> --- a/drivers/base/node.c
> +++ b/drivers/base/node.c
> @@ -363,12 +363,14 @@ int register_mem_sect_under_node(struct memory_block *mem_blk, int nid)
> /* unregister memory section under all nodes that it spans */
> int unregister_mem_sect_under_nodes(struct memory_block *mem_blk)
> {
> - nodemask_t unlinked_nodes;
> + NODEMASK_ALLOC(nodemask_t, unlinked_nodes, GFP_KERNEL);
> unsigned long pfn, sect_start_pfn, sect_end_pfn;
>
> - if (!mem_blk)
> + if (!mem_blk) {
> + NODEMASK_FREE(unlinked_nodes);
> return -EFAULT;
> - nodes_clear(unlinked_nodes);
> + }
> + nodes_clear(*unlinked_nodes);
> sect_start_pfn = section_nr_to_pfn(mem_blk->phys_index);
> sect_end_pfn = sect_start_pfn + PAGES_PER_SECTION - 1;
> for (pfn = sect_start_pfn; pfn <= sect_end_pfn; pfn++) {
> @@ -379,13 +381,14 @@ int unregister_mem_sect_under_nodes(struct memory_block *mem_blk)
> continue;
> if (!node_online(nid))
> continue;
> - if (node_test_and_set(nid, unlinked_nodes))
> + if (node_test_and_set(nid, *unlinked_nodes))
> continue;
> sysfs_remove_link(&node_devices[nid].sysdev.kobj,
> kobject_name(&mem_blk->sysdev.kobj));
> sysfs_remove_link(&mem_blk->sysdev.kobj,
> kobject_name(&node_devices[nid].sysdev.kobj));
> }
> + NODEMASK_FREE(unlinked_nodes);
> return 0;
> }
>
>
WARNING: multiple messages have this Message-ID (diff)
From: Alex Chiang <achiang@hp.com>
To: David Rientjes <rientjes@google.com>
Cc: Andrew Morton <akpm@linux-foundation.org>,
Heiko Carstens <heiko.carstens@de.ibm.com>,
Gary Hade <garyhade@us.ibm.com>,
linux-kernel@vger.kernel.org, linux-mm@kvack.org,
Badari Pulavarty <pbadari@us.ibm.com>,
Martin Schwidefsky <schwidefsky@de.ibm.com>,
Ingo Molnar <mingo@elte.hu>
Subject: Re: [patch -mm] mm: slab allocate memory section nodemask for large systems
Date: Mon, 2 Nov 2009 13:47:26 -0700 [thread overview]
Message-ID: <20091102204726.GG5525@ldl.fc.hp.com> (raw)
In-Reply-To: <alpine.DEB.2.00.0910281315370.23279@chino.kir.corp.google.com>
Hi Andrew,
* David Rientjes <rientjes@google.com>:
> On Wed, 28 Oct 2009, Alex Chiang wrote:
>
> > Am I not understanding the code? It looks like we do this
> > already...
> >
> > /* unregister memory section under all nodes that it spans */
> > int unregister_mem_sect_under_nodes(struct memory_block *mem_blk)
> > {
> > nodemask_t unlinked_nodes;
> > unsigned long pfn, sect_start_pfn, sect_end_pfn;
> >
> > if (!mem_blk)
> > return -EFAULT;
> > nodes_clear(unlinked_nodes);
> > sect_start_pfn = section_nr_to_pfn(mem_blk->phys_index);
> > sect_end_pfn = sect_start_pfn + PAGES_PER_SECTION - 1;
> > for (pfn = sect_start_pfn; pfn <= sect_end_pfn; pfn++) {
> > int nid;
> >
> > nid = get_nid_for_pfn(pfn);
> > if (nid < 0)
> > continue;
> > if (!node_online(nid))
> > continue;
> > if (node_test_and_set(nid, unlinked_nodes))
> > continue;
> > sysfs_remove_link(&node_devices[nid].sysdev.kobj,
> > kobject_name(&mem_blk->sysdev.kobj));
> > sysfs_remove_link(&mem_blk->sysdev.kobj,
> > kobject_name(&node_devices[nid].sysdev.kobj));
> > }
> > return 0;
> > }
> >
>
> That shound be sufficient with the exception that allocating nodemask_t
> on the stack is usually dangerous because it can be extremely large; we
> typically use NODEMASK_ALLOC() for such code. It's had some changes in
> -mm, but since this patchset will likely be going through that tree anyway
> we can fix it now with the patch below.
>
> Otherwise, it looks like the iteration is already there and will remove
> links for memory sections bound to multiple nodes if they exist through
> hotplug.
Any comments on this patch series?
Turns out that Kame-san's fear about a memory section spanning
several nodes on certain architectures (S390) isn't really
applicable and even if it were, we have code to handle situation
anyway.
Kame-san was generally supportive of these convenience symlinks
although he did not give a formal ACK.
David has given an ACK on the two patches that do real work, as
well as supplied the below patch.
I can respin this series once more, including David's Acked-by:
and adding his patch if that makes life easier for you.
Thanks,
/ac
> mm: slab allocate memory section nodemask for large systems
>
> Nodemasks should not be allocated on the stack for large systems (when it
> is larger than 256 bytes) since there is a threat of overflow.
>
> This patch causes the unregister_mem_sect_under_nodes() nodemask to be
> allocated on the stack for smaller systems and be allocated by slab for
> larger systems.
>
> GFP_KERNEL is used since remove_memory_block() can block.
>
> Cc: Gary Hade <garyhade@us.ibm.com>
> Cc: Badari Pulavarty <pbadari@us.ibm.com>
> Signed-off-by: David Rientjes <rientjes@google.com>
> ---
> Depends on NODEMASK_ALLOC() changes currently present only in -mm.
>
> drivers/base/node.c | 11 +++++++----
> 1 files changed, 7 insertions(+), 4 deletions(-)
>
> diff --git a/drivers/base/node.c b/drivers/base/node.c
> --- a/drivers/base/node.c
> +++ b/drivers/base/node.c
> @@ -363,12 +363,14 @@ int register_mem_sect_under_node(struct memory_block *mem_blk, int nid)
> /* unregister memory section under all nodes that it spans */
> int unregister_mem_sect_under_nodes(struct memory_block *mem_blk)
> {
> - nodemask_t unlinked_nodes;
> + NODEMASK_ALLOC(nodemask_t, unlinked_nodes, GFP_KERNEL);
> unsigned long pfn, sect_start_pfn, sect_end_pfn;
>
> - if (!mem_blk)
> + if (!mem_blk) {
> + NODEMASK_FREE(unlinked_nodes);
> return -EFAULT;
> - nodes_clear(unlinked_nodes);
> + }
> + nodes_clear(*unlinked_nodes);
> sect_start_pfn = section_nr_to_pfn(mem_blk->phys_index);
> sect_end_pfn = sect_start_pfn + PAGES_PER_SECTION - 1;
> for (pfn = sect_start_pfn; pfn <= sect_end_pfn; pfn++) {
> @@ -379,13 +381,14 @@ int unregister_mem_sect_under_nodes(struct memory_block *mem_blk)
> continue;
> if (!node_online(nid))
> continue;
> - if (node_test_and_set(nid, unlinked_nodes))
> + if (node_test_and_set(nid, *unlinked_nodes))
> continue;
> sysfs_remove_link(&node_devices[nid].sysdev.kobj,
> kobject_name(&mem_blk->sysdev.kobj));
> sysfs_remove_link(&mem_blk->sysdev.kobj,
> kobject_name(&node_devices[nid].sysdev.kobj));
> }
> + NODEMASK_FREE(unlinked_nodes);
> return 0;
> }
>
>
--
To unsubscribe, send a message with 'unsubscribe linux-mm' in
the body to majordomo@kvack.org. For more info on Linux MM,
see: http://www.linux-mm.org/ .
Don't email: <a href=mailto:"dont@kvack.org"> email@kvack.org </a>
next prev parent reply other threads:[~2009-11-02 20:47 UTC|newest]
Thread overview: 44+ messages / expand[flat|nested] mbox.gz Atom feed top
2009-10-22 4:15 [PATCH v2 0/5] mm: modest useability enhancements for node sysfs attrs Alex Chiang
2009-10-22 4:15 ` Alex Chiang
2009-10-22 4:15 ` [PATCH v2 1/5] mm: add numa node symlink for memory section in sysfs Alex Chiang
2009-10-22 4:15 ` Alex Chiang
2009-10-22 19:51 ` David Rientjes
2009-10-22 19:51 ` David Rientjes
2009-10-27 19:59 ` Alex Chiang
2009-10-27 19:59 ` Alex Chiang
2009-10-27 21:27 ` David Rientjes
2009-10-27 21:27 ` David Rientjes
2009-10-28 8:31 ` Heiko Carstens
2009-10-28 8:31 ` Heiko Carstens
2009-10-28 9:03 ` David Rientjes
2009-10-28 9:03 ` David Rientjes
2009-10-28 17:15 ` Alex Chiang
2009-10-28 17:15 ` Alex Chiang
2009-10-28 18:39 ` Alex Chiang
2009-10-28 18:39 ` Alex Chiang
2009-10-28 20:43 ` [patch -mm] mm: slab allocate memory section nodemask for large systems David Rientjes
2009-10-28 20:43 ` David Rientjes
2009-11-02 20:47 ` Alex Chiang [this message]
2009-11-02 20:47 ` Alex Chiang
2009-11-04 2:00 ` David Rientjes
2009-11-04 2:00 ` David Rientjes
2009-11-10 20:51 ` Andrew Morton
2009-11-10 20:51 ` Andrew Morton
2009-11-10 20:55 ` David Rientjes
2009-11-10 20:55 ` David Rientjes
2009-11-10 21:26 ` Alex Chiang
2009-11-10 21:26 ` Alex Chiang
2009-11-10 21:38 ` Andrew Morton
2009-11-10 21:38 ` Andrew Morton
2009-10-22 4:15 ` [PATCH v2 2/5] mm: refactor register_cpu_under_node() Alex Chiang
2009-10-22 4:15 ` Alex Chiang
2009-10-22 4:15 ` [PATCH v2 3/5] mm: refactor unregister_cpu_under_node() Alex Chiang
2009-10-22 4:15 ` Alex Chiang
2009-10-22 4:15 ` [PATCH v2 4/5] mm: add numa node symlink for cpu devices in sysfs Alex Chiang
2009-10-22 4:15 ` Alex Chiang
2009-10-22 19:52 ` David Rientjes
2009-10-22 19:52 ` David Rientjes
2009-10-22 4:15 ` [PATCH v2 5/5] Documentation: ABI: /sys/devices/system/cpu/cpu#/node Alex Chiang
2009-10-22 4:15 ` Alex Chiang
-- strict thread matches above, loose matches on Subject: below --
2009-11-18 0:19 [patch -mm] mm: slab allocate memory section nodemask for large systems David Rientjes
2009-11-18 18:35 ` Gary Hade
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=20091102204726.GG5525@ldl.fc.hp.com \
--to=achiang@hp.com \
--cc=akpm@linux-foundation.org \
--cc=garyhade@us.ibm.com \
--cc=heiko.carstens@de.ibm.com \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-mm@kvack.org \
--cc=mingo@elte.hu \
--cc=pbadari@us.ibm.com \
--cc=rientjes@google.com \
--cc=schwidefsky@de.ibm.com \
/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.