public inbox for linux-kernel@vger.kernel.org
 help / color / mirror / Atom feed
From: Robin Holt <holt@sgi.com>
To: Dave Hansen <dave@linux.vnet.ibm.com>
Cc: Robin Holt <holt@sgi.com>, lkml <linux-kernel@vger.kernel.org>,
	"Robert P. J. Day" <rpjday@crashcourse.ca>,
	Greg Kroah-Hartman <gregkh@suse.de>,
	Badari Pulavarty <pbadari@us.ibm.com>,
	Dave Hansen <haveblue@us.ibm.com>,
	Gary Hade <garyhade@us.ibm.com>, Ingo Molnar <mingo@elte.hu>,
	Matt Tolentino <matthew.e.tolentino@intel.com>
Subject: Re: [Patch 1/3] Introduce kset_find_obj_hinted.
Date: Wed, 29 Sep 2010 16:44:25 -0500	[thread overview]
Message-ID: <20100929214425.GR14064@sgi.com> (raw)
In-Reply-To: <1285793956.19976.10359.camel@nimitz>

On Wed, Sep 29, 2010 at 01:59:16PM -0700, Dave Hansen wrote:
> On Wed, 2010-09-29 at 14:00 -0500, Robin Holt wrote:
> > 
> >  struct kobject *kset_find_obj(struct kset *kset, const char *name)
> >  {
> > +       return kset_find_obj_hinted(kset, name, NULL);
> > +}
> > +
> > +/**
> > + * kset_find_obj_hinted - search for object in kset given a predecessor hint.
> > + * @kset: kset we're looking in.
> > + * @name: object's name.
> > + * @hint: hint to possible object's predecessor.
> > + *
> > + * Check the hint's next object and if it is a match return it directly,
> > + * otherwise, fall back to the behavior of kset_find_obj().  Either way
> > + * a reference for the returned object is held and the reference on the
> > + * hinted object is released.
> > + */
> > +struct kobject *kset_find_obj_hinted(struct kset *kset, const char *name,
> > +                                    struct kobject *hint)
> > +{
> >         struct kobject *k;
> >         struct kobject *ret = NULL;
> > 
> >         spin_lock(&kset->list_lock);
> > +
> > +       if (!hint)
> > +               goto slow_search;
> > +
> > +       /* end of list detection */
> > +       if (hint->entry.next == kset->list.next)
> > +               goto slow_search;
> > +
> > +       k = container_of(hint->entry.next, struct kobject, entry);
> > +       if (!kobject_name(k) || strcmp(kobject_name(k), name))
> > +               goto slow_search;
> > +
> > +       ret = kobject_get(k);
> > +       goto unlock_exit;
> > +
> > +slow_search:
> >         list_for_each_entry(k, &kset->list, entry) {
> >                 if (kobject_name(k) && !strcmp(kobject_name(k), name)) {
> >                         ret = kobject_get(k);
> >                         break;
> >                 }
> >         }
> 
> So, the slow search ends up looking through _all_ of the sections in the
> order they got registered, which _guarantees_ that we'll go all the way
> through the list every time.  Right?
> 
> I guess we could also add to the list using list_add_tail(), iterate
> during the search using list_for_each_tail(), or even just look at the
> last entry by looking at kset->list.prev directly.  Those would have the
> advantage of not having to have several levels in the call chain.  We
> also wouldn't have to change anything if and when this gets fixed
> properly.

Except that drivers/base/memory.c's memory_dev_init registers all the
memory sections and then later, drivers/base/node.c's node_dev_init
looks for memory sections on each node and does the symlink.

Since the two are separated in time, either the head or tail based search
is going to end up with last or first part of the search sequence being
much slower.

Robin

  reply	other threads:[~2010-09-29 21:44 UTC|newest]

Thread overview: 10+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2010-09-29 19:00 [Patch 0/3] Speed up link_mem_sections during boot Robin Holt
2010-09-29 19:00 ` [Patch 1/3] Introduce kset_find_obj_hinted Robin Holt
2010-09-29 20:59   ` Dave Hansen
2010-09-29 21:44     ` Robin Holt [this message]
2010-09-30  1:59   ` KAMEZAWA Hiroyuki
2010-09-29 19:00 ` [Patch 2/3] Introduce find_memory_block_hinted which utilizes kset_find_obj_hinted Robin Holt
2010-09-30  2:00   ` KAMEZAWA Hiroyuki
2010-09-29 19:00 ` [Patch 3/3] Convert link_mem_sections to use find_memory_block_hinted Robin Holt
2010-09-30  2:01   ` KAMEZAWA Hiroyuki
2010-10-05 23:18   ` patch "driver core: Convert link_mem_sections to use find_memory_block_hinted." added to gregkh-2.6 tree gregkh

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=20100929214425.GR14064@sgi.com \
    --to=holt@sgi.com \
    --cc=dave@linux.vnet.ibm.com \
    --cc=garyhade@us.ibm.com \
    --cc=gregkh@suse.de \
    --cc=haveblue@us.ibm.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=matthew.e.tolentino@intel.com \
    --cc=mingo@elte.hu \
    --cc=pbadari@us.ibm.com \
    --cc=rpjday@crashcourse.ca \
    /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