All of lore.kernel.org
 help / color / mirror / Atom feed
From: Greg KH <greg@kroah.com>
To: tom.leiming@gmail.com
Cc: kay.sievers@vrfy.org, cornelia.huck@de.ibm.com,
	arjan@infradead.org, linux-kernel@vger.kernel.org
Subject: Re: [PATCH/RESEND] driver core: remove polling for driver_probe_done(v3)
Date: Wed, 18 Feb 2009 16:07:48 -0800	[thread overview]
Message-ID: <20090219000748.GC5181@kroah.com> (raw)
In-Reply-To: <1234882444-6862-1-git-send-email-tom.leiming@gmail.com>


This conflicts with a patch from Arjan in this same area that I've now
applied to my tree (used to be in the -mm tree).

Care to rebase it on the next linux-next release?

thanks,

greg k-h

On Tue, Feb 17, 2009 at 10:54:04PM +0800, tom.leiming@gmail.com wrote:
> From: Ming Lei <tom.leiming@gmail.com>
> 
> This patch adds a function : driver_wait_probe_done,
> which waits on condition of probing done to replace
> polling for driver_probe_done in fs initialization.
> 
> There is no better way to avoid polling for
> driver_probe_done _and_ existence of the root device,
> so we does not replace the driver_probe_done with
> driver_wait_probe_done in such special case.
> 
> Removing polling in fs initialization may lead to
> a faster boot.
> 
> Signed-off-by: Ming Lei <tom.leiming@gmail.com>
> Acked-by: Cornelia Huck <cornelia.huck@de.ibm.com>
> Reviewed-by: Arjan van de Ven <arjan@linux.intel.com>
> ---
>  drivers/base/dd.c      |   12 ++++++++++++
>  include/linux/device.h |    1 +
>  init/do_mounts.c       |    4 ++--
>  init/do_mounts_md.c    |    3 +--
>  4 files changed, 16 insertions(+), 4 deletions(-)
> 
> diff --git a/drivers/base/dd.c b/drivers/base/dd.c
> index 9b721d3..8f9f6fb 100644
> --- a/drivers/base/dd.c
> +++ b/drivers/base/dd.c
> @@ -168,6 +168,18 @@ int driver_probe_done(void)
>  }
>  
>  /**
> + * driver_wait_probe_done
> + * Wait until the probe sequence is finished.
> + *
> + */
> +void driver_wait_probe_done(void)
> +{
> +	pr_debug("%s: probe_count = %d\n", __func__,
> +		 atomic_read(&probe_count));
> +	wait_event(probe_waitqueue, atomic_read(&probe_count) == 0);
> +}
> +
> +/**
>   * driver_probe_device - attempt to bind device & driver together
>   * @drv: driver to bind a device to
>   * @dev: device to try to bind to the driver
> diff --git a/include/linux/device.h b/include/linux/device.h
> index 45e5b19..c53cdbf 100644
> --- a/include/linux/device.h
> +++ b/include/linux/device.h
> @@ -147,6 +147,7 @@ extern void put_driver(struct device_driver *drv);
>  extern struct device_driver *driver_find(const char *name,
>  					 struct bus_type *bus);
>  extern int driver_probe_done(void);
> +extern void driver_wait_probe_done(void);
>  
>  /* sysfs interface for exporting driver attributes */
>  
> diff --git a/init/do_mounts.c b/init/do_mounts.c
> index 708105e..9cb1985 100644
> --- a/init/do_mounts.c
> +++ b/init/do_mounts.c
> @@ -371,8 +371,8 @@ void __init prepare_namespace(void)
>  	}
>  
>  	/* wait for the known devices to complete their probing */
> -	while (driver_probe_done() != 0)
> -		msleep(100);
> +	driver_wait_probe_done();
> +
>  	async_synchronize_full();
>  
>  	md_run_setup();
> diff --git a/init/do_mounts_md.c b/init/do_mounts_md.c
> index ff95e31..63b77f0 100644
> --- a/init/do_mounts_md.c
> +++ b/init/do_mounts_md.c
> @@ -281,8 +281,7 @@ static void __init autodetect_raid(void)
>  	 */
>  	printk(KERN_INFO "md: Waiting for all devices to be available before autodetect\n");
>  	printk(KERN_INFO "md: If you don't use raid, use raid=noautodetect\n");
> -	while (driver_probe_done() < 0)
> -		msleep(100);
> +	driver_wait_probe_done();
>  	fd = sys_open("/dev/md0", 0, 0);
>  	if (fd >= 0) {
>  		sys_ioctl(fd, RAID_AUTORUN, raid_autopart);
> -- 
> 1.6.0

      reply	other threads:[~2009-02-19  0:13 UTC|newest]

Thread overview: 2+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2009-02-17 14:54 [PATCH/RESEND] driver core: remove polling for driver_probe_done(v3) tom.leiming
2009-02-19  0:07 ` Greg KH [this message]

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=20090219000748.GC5181@kroah.com \
    --to=greg@kroah.com \
    --cc=arjan@infradead.org \
    --cc=cornelia.huck@de.ibm.com \
    --cc=kay.sievers@vrfy.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=tom.leiming@gmail.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.