public inbox for linux-kernel@vger.kernel.org
 help / color / mirror / Atom feed
From: Dmitry Torokhov <dmitry.torokhov@gmail.com>
To: Tejun Heo <tj@kernel.org>
Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>,
	"Luis R . Rodriguez" <mcgrof@suse.com>,
	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 6/8] amd64_edac: enforce synchronous probe
Date: Wed, 18 Mar 2015 17:26:19 -0700	[thread overview]
Message-ID: <20150319002619.GM11485@dtor-ws> (raw)
In-Reply-To: <20150318232401.GG25365@htj.duckdns.org>

On Wed, Mar 18, 2015 at 07:24:01PM -0400, Tejun Heo wrote:
> Hello, Dmitry.
> 
> On Wed, Mar 18, 2015 at 03:15:30PM -0700, Dmitry Torokhov wrote:
> > So let's say that we we have 2 devices D1 and D2 which have
> > children C1 and C2 with leaves L1 and L2:
> > 
> > Device	Probe time
> > D1	5
> > D2	1
> > C1	2
> > C2	4
> > L1	1
> > L2	1
> > 
> > If we run fully async we will need 8 units to probe everything
> > (max(D1+C1+L1, D2+C2+L2)). With pausing at each level we'd need 10
> > units (max(D1, D2) + max(C1, C2) + max(L1, L2).
> 
> Yeah, the details will differ depending on the specifics of layering
> but it's likely to add more synchronization points.
> 
> > > Doing things based on a big switch is going to create two largely
> > > separate modes of operations.  For a lot of cases, the gain in boot
> > > time might not be enough to turn on the switch and we sure can't
> > > default to turning it on.  This is a deviation we can avoid with
> > > reasonable amount of effort.  The trade-off seems pretty clear to me.
> > 
> > As I mentioned, the benefit / trade-off depends on your point of view.
> > For servers nobody would care. For consumer devices it is very
> > important.
> 
> Shouldn't we still be able to extract most of parallelism this way,
> especially given that as the probing walks down the hierarchy, they
> get decoupled from each other?

Why would they get decoupled? For example, if we are talking about input
devices, they can be connected to platform bus or one of i2c buses or
HID (via USB). If we want to ensure ordering we'd have to synchronize
all of them somehow and I do not have even sure what the rule should be.
I mean I am probing platform devices simultaneously and I come to an
i2c controller and gpio input device. So I wait till both done probing
before posting new devices to the driver core? What if one returns
-EPROBE_DEFER? Do I stop and wait for the deferral to complete? What if
deferral is satisfied by a 3rd device on platform bus? If I am waiting
for all devices to probe I won't be able to resolve the deferral. And
even without deferral in old world we'd probe i2c and i2c will lead to
discovery of another input device which would be registered before
registering the platform input device. So with async we'd have to pause
platform probing until all children of i2c are done probing, which
pretty much kills all async gains as far as I can see.

> 
> Even if certain use cases can benefit from completely ignoring
> ordering, it's a lot more consistent to add an option to ignore device
> ordering on top of general async mechanism rather than having fully
> async vs. sync probing paths.  We'd still be traveling and testing
> most of the same logic.  What bothers me primarily is that this being

I think the logic is pretty much the same even with async probing,
especially if you take into account -EPROBE_DEFER handling that we
already have. You may not run into it that often on x86 but it is pretty
common on arm devices and it does change the probe order.

>
> some obscure boot flag that only several users know and exploit which
> makes the kernel behave very differently.

I do not think this flag is useful for end users but rather for
distributions. Either their userspace is ready to handle fully async
probe or not quite yet.

Thanks.

-- 
Dmitry

  reply	other threads:[~2015-03-19  0:26 UTC|newest]

Thread overview: 36+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2015-01-16 23:33 [PATCH 0/8] Asynchronous device/driver probing support Dmitry Torokhov
2015-01-16 23:33 ` [PATCH 1/8] module: add extra argument for parse_params() callback Dmitry Torokhov
2015-01-16 23:33 ` [PATCH 2/8] driver-core: add asynchronous probing support for drivers Dmitry Torokhov
2015-01-16 23:33 ` [PATCH 3/8] driver-core: add driver module asynchronous probe support Dmitry Torokhov
2015-01-16 23:33 ` [PATCH 4/8] driver-core: enable drivers to opt-out of async probe Dmitry Torokhov
2015-01-16 23:33 ` [PATCH 5/8] driver-core: platform_driver_probe() must probe synchronously Dmitry Torokhov
2015-01-16 23:33 ` [PATCH 6/8] amd64_edac: enforce synchronous probe Dmitry Torokhov
2015-03-18 16:56   ` Tejun Heo
2015-03-18 17:45     ` Dmitry Torokhov
2015-03-18 17:50       ` Dmitry Torokhov
2015-03-18 18:16       ` Tejun Heo
2015-03-18 18:23         ` Dmitry Torokhov
2015-03-18 18:27           ` Tejun Heo
2015-03-18 18:37             ` Dmitry Torokhov
2015-03-18 18:45               ` Tejun Heo
2015-03-18 19:36                 ` Dmitry Torokhov
2015-03-18 19:51                   ` Tejun Heo
2015-03-18 20:26                     ` Dmitry Torokhov
2015-03-18 21:02                       ` Tejun Heo
2015-03-18 21:41                         ` Dmitry Torokhov
2015-03-18 21:50                           ` Tejun Heo
2015-03-18 22:15                             ` Dmitry Torokhov
2015-03-18 23:24                               ` Tejun Heo
2015-03-19  0:26                                 ` Dmitry Torokhov [this message]
2015-03-19 15:41                                   ` Tejun Heo
2015-03-19 16:01                                     ` Dmitry Torokhov
2015-03-19 16:19                                       ` Tejun Heo
2015-03-19 17:04                                         ` Dmitry Torokhov
2015-01-16 23:33 ` [PATCH 7/8] module: add core_param_unsafe Dmitry Torokhov
2015-01-20  5:43   ` Rusty Russell
2015-01-16 23:33 ` [PATCH 8/8] driver-core: allow forcing async probing for modules and builtins Dmitry Torokhov
2015-02-03 23:12 ` [PATCH 0/8] Asynchronous device/driver probing support Dmitry Torokhov
2015-02-07 10:06   ` Greg Kroah-Hartman
2015-03-03 21:18     ` Dmitry Torokhov
2015-03-18 16:46       ` Dmitry Torokhov
  -- strict thread matches above, loose matches on Subject: below --
2015-03-30 23:20 [PATCH v2 " Dmitry Torokhov
2015-03-30 23:20 ` [PATCH 6/8] amd64_edac: enforce synchronous probe 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=20150319002619.GM11485@dtor-ws \
    --to=dmitry.torokhov@gmail.com \
    --cc=arjan@linux.intel.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