public inbox for linux-kernel@vger.kernel.org
 help / color / mirror / Atom feed
From: Dave Hansen <dave@linux.vnet.ibm.com>
To: Robin Holt <holt@sgi.com>
Cc: 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 13:59:16 -0700	[thread overview]
Message-ID: <1285793956.19976.10359.camel@nimitz> (raw)
In-Reply-To: <20100929190115.494540024@gulag1.americas.sgi.com>

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.

-- Dave


  reply	other threads:[~2010-09-29 20:59 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 [this message]
2010-09-29 21:44     ` Robin Holt
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=1285793956.19976.10359.camel@nimitz \
    --to=dave@linux.vnet.ibm.com \
    --cc=garyhade@us.ibm.com \
    --cc=gregkh@suse.de \
    --cc=haveblue@us.ibm.com \
    --cc=holt@sgi.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