From: Lee Schermerhorn <Lee.Schermerhorn@hp.com>
To: David Rientjes <rientjes@google.com>
Cc: linux-mm@kvack.org, linux-numa@vger.kernel.org,
Andrew Morton <akpm@linux-foundation.org>,
Mel Gorman <mel@csn.ul.ie>,
Randy Dunlap <randy.dunlap@oracle.com>,
Nishanth Aravamudan <nacc@us.ibm.com>,
Andi Kleen <andi@firstfloor.org>, Adam Litke <agl@us.ibm.com>,
Andy Whitcroft <apw@canonical.com>,
eric.whitney@hp.com
Subject: Re: [PATCH 7/12] hugetlb: add per node hstate attributes
Date: Fri, 09 Oct 2009 09:49:58 -0400 [thread overview]
Message-ID: <1255096198.14370.65.camel@useless.americas.hpqcorp.net> (raw)
In-Reply-To: <alpine.DEB.1.00.0910081339391.4765@chino.kir.corp.google.com>
On Thu, 2009-10-08 at 13:42 -0700, David Rientjes wrote:
> On Thu, 8 Oct 2009, Lee Schermerhorn wrote:
>
<snip>
> > +static struct attribute_group per_node_hstate_attr_group = {
> > + .attrs = per_node_hstate_attrs,
> > +};
> > +
> > +/*
> > + * kobj_to_node_hstate - lookup global hstate for node sysdev hstate attr kobj.
> > + * Returns node id via non-NULL nidp.
> > + */
> > +static struct hstate *kobj_to_node_hstate(struct kobject *kobj, int *nidp)
> > +{
> > + int nid;
> > +
> > + for (nid = 0; nid < nr_node_ids; nid++) {
>
> I previously asked if this should use for_each_node_mask() instead?
sorry, missed this comment [and one at end] in my prev response. Too
much multi-tasking.
This also could interate over a node mask for consistency, I think.
Again, current version works because we're looking for node sysdev based
on a per node attribute kobj. We only add the attributes to nodes with
memory. So, we're potentially visiting a few more nodes than necessary
on some platforms. Shouldn't be a performance issue.
>
> > + struct node_hstate *nhs = &node_hstates[nid];
> > + int i;
> > + for (i = 0; i < HUGE_MAX_HSTATE; i++)
> > + if (nhs->hstate_kobjs[i] == kobj) {
> > + if (nidp)
> > + *nidp = nid;
> > + return &hstates[i];
> > + }
> > + }
> > +
> > + BUG();
> > + return NULL;
> > +}
> > +
<snip>
> > +
> > +/*
> > + * hugetlb init time: register hstate attributes for all registered
> > + * node sysdevs. All on-line nodes should have registered their
> > + * associated sysdev by the time the hugetlb module initializes.
> > + */
> > +static void hugetlb_register_all_nodes(void)
> > +{
> > + int nid;
> > +
> > + for (nid = 0; nid < nr_node_ids; nid++) {
> > + struct node *node = &node_devices[nid];
> > + if (node->sysdev.id == nid)
> > + hugetlb_register_node(node);
> > + }
>
> This looks like another use of for_each_node_mask over N_HIGH_MEMORY. I
> previously asked if the check for node->sysdev.id == nid is still
> necessary at this point?
already answered this.
>
> > +
> > + /*
> > + * Let the node sysdev driver know we're here so it can
> > + * [un]register hstate attributes on node hotplug.
> > + */
> > + register_hugetlbfs_with_node(hugetlb_register_node,
> > + hugetlb_unregister_node);
> > +}
> > +#else /* !CONFIG_NUMA */
> > Index: linux-2.6.31-mmotm-090925-1435/include/linux/node.h
> > ===================================================================
> > --- linux-2.6.31-mmotm-090925-1435.orig/include/linux/node.h 2009-10-07 12:31:51.000000000 -0400
> > +++ linux-2.6.31-mmotm-090925-1435/include/linux/node.h 2009-10-07 12:32:01.000000000 -0400
> > @@ -28,6 +28,7 @@ struct node {
> >
> > struct memory_block;
> > extern struct node node_devices[];
> > +typedef void (*node_registration_func_t)(struct node *);
> >
> > extern int register_node(struct node *, int, struct node *);
> > extern void unregister_node(struct node *node);
>
> I previously suggested against the typedef unless this functionality (node
> hotplug notifiers) becomes more generic outside of the hugetlb use case.
I'd like to keep it. I've read the CodingStyle and I know it argues
against typedefs, but the strongest prohibition is against [pointers to]
structs whose members could be reasonable accessed. I don't think I
violate that. And, this does allow the registration function
definitions that take the func pointer as an argument to show up in
cscope. I find that useful. Wish they all did [func defs with func
args show up in cscope, that is]. But, if you and others feel strongly
about this, I suppose we can rip it out.
--
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-10-09 15:13 UTC|newest]
Thread overview: 31+ messages / expand[flat|nested] mbox.gz Atom feed top
2009-10-08 16:24 [PATCH 0/12] hugetlb: V10 numa control of persistent huge pages alloc/free Lee Schermerhorn
2009-10-08 16:25 ` [PATCH 1/12] nodemask: make NODEMASK_ALLOC more general Lee Schermerhorn
2009-10-08 20:17 ` David Rientjes
2009-10-08 16:25 ` [PATCH 2/12] hugetlb: rework hstate_next_node_* functions Lee Schermerhorn
2009-10-08 16:25 ` [PATCH 3/12] hugetlb: add nodemask arg to huge page alloc, free and surplus adjust fcns Lee Schermerhorn
2009-10-08 20:32 ` David Rientjes
2009-10-08 16:25 ` [PATCH 4/12] hugetlb: factor init_nodemask_of_node Lee Schermerhorn
2009-10-08 20:20 ` David Rientjes
2009-10-08 16:25 ` [PATCH 5/12] hugetlb: derive huge pages nodes allowed from task mempolicy Lee Schermerhorn
2009-10-08 21:22 ` [patch] mm: add gfp flags for NODEMASK_ALLOC slab allocations David Rientjes
2009-10-09 1:01 ` KAMEZAWA Hiroyuki
2009-10-08 16:25 ` [PATCH 6/12] hugetlb: add generic definition of NUMA_NO_NODE Lee Schermerhorn
2009-10-08 20:16 ` Christoph Lameter
2009-10-08 20:26 ` David Rientjes
2009-10-27 21:44 ` [patch -mm] acpi: remove NID_INVAL David Rientjes
2009-10-28 14:53 ` Cyrill Gorcunov
2009-10-29 18:40 ` Christoph Lameter
2009-10-08 16:25 ` [PATCH 7/12] hugetlb: add per node hstate attributes Lee Schermerhorn
2009-10-08 20:42 ` David Rientjes
2009-10-09 12:57 ` Lee Schermerhorn
2009-10-09 22:10 ` David Rientjes
2009-10-09 13:49 ` Lee Schermerhorn [this message]
2009-10-09 22:18 ` David Rientjes
2009-10-12 15:41 ` Lee Schermerhorn
2009-10-13 2:09 ` David Rientjes
2009-10-08 16:25 ` [PATCH 8/12] hugetlb: update hugetlb documentation for NUMA controls Lee Schermerhorn
2009-10-08 16:25 ` [PATCH 9/12] hugetlb: use only nodes with memory for huge pages Lee Schermerhorn
2009-10-08 16:26 ` [PATCH 10/12] mm: clear node in N_HIGH_MEMORY and stop kswapd when all memory is offlined Lee Schermerhorn
2009-10-08 20:19 ` David Rientjes
2009-10-08 16:26 ` [PATCH 11/12] hugetlb: handle memory hot-plug events Lee Schermerhorn
2009-10-08 16:26 ` [PATCH 12/12] hugetlb: offload per node attribute registrations Lee Schermerhorn
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=1255096198.14370.65.camel@useless.americas.hpqcorp.net \
--to=lee.schermerhorn@hp.com \
--cc=agl@us.ibm.com \
--cc=akpm@linux-foundation.org \
--cc=andi@firstfloor.org \
--cc=apw@canonical.com \
--cc=eric.whitney@hp.com \
--cc=linux-mm@kvack.org \
--cc=linux-numa@vger.kernel.org \
--cc=mel@csn.ul.ie \
--cc=nacc@us.ibm.com \
--cc=randy.dunlap@oracle.com \
--cc=rientjes@google.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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox