public inbox for linux-kernel@vger.kernel.org
 help / color / mirror / Atom feed
From: Dmitry Torokhov <dmitry.torokhov@gmail.com>
To: Dan Williams <dan.j.williams@gmail.com>
Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>,
	"Luis R . Rodriguez" <mcgrof@suse.com>, Tejun Heo <tj@kernel.org>,
	Linux Kernel Mailing List <linux-kernel@vger.kernel.org>,
	Arjan van de Ven <arjan@linux.intel.com>,
	Rusty Russell <rusty@rustcorp.com.au>,
	Olof Johansson <olof@lixom.net>,
	Tetsuo Handa <penguin-kernel@i-love.sakura.ne.jp>
Subject: Re: [PATCH 2/8] driver-core: add asynchronous probing support for drivers
Date: Mon, 6 Jul 2015 16:33:45 -0700	[thread overview]
Message-ID: <20150706233345.GE32140@dtor-ws> (raw)
In-Reply-To: <CAA9_cmeMrDEUY8s=88pXnfoN7p+=hnk+Y6Uwte2L=ETL34P3uA@mail.gmail.com>

On Sat, Jun 27, 2015 at 04:45:25PM -0700, Dan Williams wrote:
> On Mon, Mar 30, 2015 at 4:20 PM, Dmitry Torokhov
> <dmitry.torokhov@gmail.com> wrote:
> > Some devices take a long time when initializing, and not all drivers are
> > suited to initialize their devices when they are open. For example,
> > input drivers need to interrogate their devices in order to publish
> > device's capabilities before userspace will open them. When such drivers
> > are compiled into kernel they may stall entire kernel initialization.
> >
> > This change allows drivers request for their probe functions to be
> > called asynchronously during driver and device registration (manual
> > binding is still synchronous). Because async_schedule is used to perform
> > asynchronous calls module loading will still wait for the probing to
> > complete.
> >
> > Note that the end goal is to make the probing asynchronous by default,
> > so annotating drivers with PROBE_PREFER_ASYNCHRONOUS is a temporary
> > measure that allows us to speed up boot process while we validating and
> > fixing the rest of the drivers and preparing userspace.
> >
> > This change is based on earlier patch by "Luis R. Rodriguez"
> > <mcgrof@suse.com>
> >
> > Signed-off-by: Dmitry Torokhov <dmitry.torokhov@gmail.com>
> > ---
> >  drivers/base/base.h    |   1 +
> >  drivers/base/bus.c     |  31 +++++++---
> >  drivers/base/dd.c      | 149 ++++++++++++++++++++++++++++++++++++++++++-------
> >  include/linux/device.h |  28 ++++++++++
> >  4 files changed, 182 insertions(+), 27 deletions(-)
> 
> Just noticed this patch.  It caught my eye because I had a hard time
> getting an open coded implementation of asynchronous probing to work
> in the new libnvdimm subsystem.  Especially the messy races of tearing
> things down while probing is still in flight.

And that is exactly the reason why asynchronous probing was moved into
driver code. It knows the state of the device and knows when it is OK to
remove it or start suspend transitions, etc.

> I ended up implementing
> asynchronous device registration which eliminated a lot of complexity
> and of course the bugs.

serio and gameport subsystems have been using asynchronous registration
for ages (not because of probing but because of issues with serio ports
- such as Synaptics pass-through - stacked on top of each other and
historicaly driver code deadlocking if you try to register child
device on the same bus that parent is). However I was never too happy
with it because with asynchronous registration you can't really handle
errors. What do you do if device registartion fails?

> In general I tend to think that async
> registration is less risky than async probe since it keeps wider
> portions of the traditional device model synchronous and leverages the
> fact that the device model is already well prepared for asynchronous
> arrival of devices due to hotplug.  Splitting the "initial probe" from
> the "manual probe" case seems like a recipe for confusion.

The split is because again serio and USB subsystems resort to somewhat
manual binding due to the need of handling recursion on the bus. But
otherwise we already have asynchronous probing, because we have deferred
probes and also driver modules can be loaded asynchronously with device
registration.

If you have concrete examples where asynchronous probig as it merged
causes issues I'd love to hear and fix them.

Thanks.

-- 
Dmitry

  parent reply	other threads:[~2015-07-06 23:33 UTC|newest]

Thread overview: 40+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2015-03-30 23:20 [PATCH v2 0/8] Asynchronous device/driver probing support Dmitry Torokhov
2015-03-30 23:20 ` [PATCH 1/8] module: add extra argument for parse_params() callback Dmitry Torokhov
2015-03-30 23:20 ` [PATCH 2/8] driver-core: add asynchronous probing support for drivers Dmitry Torokhov
2015-05-29 10:48   ` Tomeu Vizoso
2015-05-29 13:23     ` Tomeu Vizoso
2015-06-01 12:04       ` Tomeu Vizoso
2015-07-06 23:41         ` Dmitry Torokhov
2015-06-27 23:45   ` Dan Williams
2015-07-03 18:30     ` Luis R. Rodriguez
2015-07-06 23:33     ` Dmitry Torokhov [this message]
2015-03-30 23:20 ` [PATCH 3/8] driver-core: add driver module asynchronous probe support Dmitry Torokhov
2015-03-30 23:20 ` [PATCH 4/8] driver-core: enable drivers to opt-out of async probe Dmitry Torokhov
2015-03-30 23:20 ` [PATCH 5/8] driver-core: platform_driver_probe() must probe synchronously Dmitry Torokhov
2015-03-30 23:20 ` [PATCH 6/8] amd64_edac: enforce synchronous probe Dmitry Torokhov
2015-03-30 23:20 ` [PATCH 7/8] module: add core_param_unsafe Dmitry Torokhov
2015-03-30 23:20 ` [PATCH 8/8] driver-core: allow enabling async probing for all modules and builtins Dmitry Torokhov
2015-05-20  7:27   ` Greg Kroah-Hartman
2015-05-20 16:44     ` Dmitry Torokhov
2015-05-21  4:34       ` Greg Kroah-Hartman
2015-05-21 19:02         ` Luis R. Rodriguez
2015-03-31 20:39 ` [PATCH v2 0/8] Asynchronous device/driver probing support Tejun Heo
2015-04-06 16:22   ` Dmitry Torokhov
2015-04-06 17:45     ` Greg Kroah-Hartman
2015-05-18 21:48       ` Dmitry Torokhov
2015-05-19  0:53         ` Greg Kroah-Hartman
  -- strict thread matches above, loose matches on Subject: below --
2015-07-04 14:09 [PATCH 2/8] driver-core: add asynchronous probing support for drivers Dan Williams
2015-07-06 23:23 ` Luis R. Rodriguez
2015-07-06 23:40   ` Dmitry Torokhov
2015-07-09  0:36     ` Dan Williams
2015-07-09  0:49       ` Dmitry Torokhov
2015-07-09  1:00         ` Dan Williams
2015-07-09  4:44           ` Dmitry Torokhov
2015-07-09  5:14             ` Dan Williams
2015-07-07  8:45   ` Tom Gundersen
2015-07-06 23:38 ` Dmitry Torokhov
2015-07-09  0:43   ` Dan Williams
2015-07-09  0:52     ` Dmitry Torokhov
2015-07-09  0:54       ` Dan Williams
2015-07-09  0:57         ` Dmitry Torokhov
2015-01-16 23:33 [PATCH 0/8] Asynchronous device/driver probing support Dmitry Torokhov
2015-01-16 23:33 ` [PATCH 2/8] driver-core: add asynchronous probing support for drivers Dmitry Torokhov

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=20150706233345.GE32140@dtor-ws \
    --to=dmitry.torokhov@gmail.com \
    --cc=arjan@linux.intel.com \
    --cc=dan.j.williams@gmail.com \
    --cc=gregkh@linuxfoundation.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=mcgrof@suse.com \
    --cc=olof@lixom.net \
    --cc=penguin-kernel@i-love.sakura.ne.jp \
    --cc=rusty@rustcorp.com.au \
    --cc=tj@kernel.org \
    /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