linux-acpi.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Frank Rowand <frowand.list@gmail.com>
To: Tomeu Vizoso <tomeu.vizoso@collabora.com>
Cc: linux-kernel@vger.kernel.org, Rob Herring <robh+dt@kernel.org>,
	Stephen Warren <swarren@wwwdotorg.org>,
	Javier Martinez Canillas <javier@osg.samsung.com>,
	Greg Kroah-Hartman <gregkh@linuxfoundation.org>,
	Mark Brown <broonie@kernel.org>,
	Thierry Reding <thierry.reding@gmail.com>,
	Alan Stern <stern@rowland.harvard.edu>,
	"Rafael J. Wysocki" <rjw@rjwysocki.net>,
	linux-arm-kernel@lists.infradead.org,
	Dmitry Torokhov <dmitry.torokhov@gmail.com>,
	devicetree@vger.kernel.org,
	Linus Walleij <linus.walleij@linaro.org>,
	linux-acpi@vger.kernel.org, Arnd Bergmann <arnd@arndb.de>
Subject: Re: [PATCH v6 21/22] driver core: Start processing deferred probes earlier
Date: Mon, 05 Oct 2015 16:52:35 -0700	[thread overview]
Message-ID: <56130D43.10200@gmail.com> (raw)
In-Reply-To: <1442844182-27787-22-git-send-email-tomeu.vizoso@collabora.com>

On 9/21/2015 7:03 AM, Tomeu Vizoso wrote:
> Some initcalls in the late level assume that some devices will have
> already probed without explicitly checking for that.
> 
> After the recent move to defer most device probes when they are
> registered, pressure increased in the late initcall level.
> 
> By starting the processing of the deferred queue in device_initcall_sync
> we increase the chances that the initcalls mentioned before will find
> the devices they depend on to have already probed.
> 
> Signed-off-by: Tomeu Vizoso <tomeu.vizoso@collabora.com>
> ---
> 
> Changes in v4:
> - Start processing deferred probes in device_initcall_sync
> 
>  drivers/base/dd.c | 4 ++--
>  1 file changed, 2 insertions(+), 2 deletions(-)
> 
> diff --git a/drivers/base/dd.c b/drivers/base/dd.c
> index 269ea76c1a4f..f0ef9233fcd6 100644
> --- a/drivers/base/dd.c
> +++ b/drivers/base/dd.c
> @@ -176,7 +176,7 @@ static void driver_deferred_probe_trigger(void)
>   *
>   * We don't want to get in the way when the bulk of drivers are getting probed.
>   * Instead, this initcall makes sure that deferred probing is delayed until
> - * late_initcall time.
> + * device_initcall_sync time.

This is a misuse of the *_sync initcall level.

If a deferred probe created a thread and expected a wait at the
following *_sync level then the wait would not occur because
there is no subsequent *_sync level.  This is not a problem today
because (as far as I know) there are no threads in the probe
functions.  But there has been interest in adding parallel
probing and that could expose this problem.

The purpose of the *_sync initcall levels is to allow the corresponding
initcall level to use multiple threads of execution instead of a single
thread.  The *_sync level provides a location for a wait for all of the
threads at the corresponding init level to complete.  This is better
explained in the git log:

commit 735a7ffb739b6efeaeb1e720306ba308eaaeb20e
Author: Andrew Morton <akpm@osdl.org>
Date:   Fri Oct 27 11:42:37 2006 -0700

    [PATCH] drivers: wait for threaded probes between initcall levels

    The multithreaded-probing code has a problem: after one initcall level (eg,
    core_initcall) has been processed, we will then start processing the next
    level (postcore_initcall) while the kernel threads which are handling
    core_initcall are still executing.  This breaks the guarantees which the
    layered initcalls previously gave us.

    IOW, we want to be multithreaded _within_ an initcall level, but not between
    different levels.

    Fix that up by causing the probing code to wait for all outstanding probes at
    one level to complete before we start processing the next level.

>   */
>  static int deferred_probe_initcall(void)
>  {
> @@ -190,7 +190,7 @@ static int deferred_probe_initcall(void)
>  	flush_workqueue(deferred_wq);
>  	return 0;
>  }
> -late_initcall(deferred_probe_initcall);
> +device_initcall_sync(deferred_probe_initcall);
>  
>  static void driver_bound(struct device *dev)
>  {
> 

  reply	other threads:[~2015-10-05 23:52 UTC|newest]

Thread overview: 70+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2015-09-21 14:02 [PATCH v6 0/22] On-demand device probing Tomeu Vizoso
2015-09-21 14:02 ` [PATCH v6 01/22] driver core: handle -EPROBE_DEFER from bus_type.match() Tomeu Vizoso
2015-10-22  1:00   ` Rafael J. Wysocki
2015-09-21 14:02 ` [PATCH v6 02/22] ARM: amba: Move reading of periphid to amba_match() Tomeu Vizoso
2015-09-21 14:02 ` [PATCH v6 03/22] of/platform: Point to struct device from device node Tomeu Vizoso
2015-09-22  0:39   ` Rob Herring
     [not found]     ` <CAL_JsqK5CH+a-xQYcocqPb0XqV3F1shC48YQxsTFf9sXjx_xHQ-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2015-09-22  6:45       ` Tomeu Vizoso
     [not found]   ` <1442844182-27787-4-git-send-email-tomeu.vizoso-ZGY8ohtN/8qB+jHODAdFcQ@public.gmane.org>
2015-10-22  1:02     ` Rafael J. Wysocki
2015-10-22 13:01       ` Tomeu Vizoso
2015-10-24 13:57         ` Rafael J. Wysocki
2015-10-27 14:48           ` Tomeu Vizoso
2015-10-27 15:43             ` Rafael J. Wysocki
2015-10-27 21:24               ` Rob Herring
2015-09-21 14:02 ` [PATCH v6 04/22] of: add function to allow probing a device from a OF node Tomeu Vizoso
     [not found]   ` <1442844182-27787-5-git-send-email-tomeu.vizoso-ZGY8ohtN/8qB+jHODAdFcQ@public.gmane.org>
2015-10-22  1:06     ` Rafael J. Wysocki
     [not found]       ` <10119606.2TraDKGPVy-sKB8Sp2ER+y1GS7QM15AGw@public.gmane.org>
2015-10-22 13:03         ` Tomeu Vizoso
2015-10-22 23:54           ` Mark Brown
2015-10-24 14:28             ` Rafael J. Wysocki
2015-10-24 13:55           ` Rafael J. Wysocki
2015-10-24 20:09             ` Rob Herring
2015-10-26  0:13               ` Mark Brown
2015-10-26  0:15                 ` Dmitry Torokhov
     [not found]                 ` <20151026001301.GT29919-GFdadSzt00ze9xe1eoZjHA@public.gmane.org>
2015-10-26  2:48                   ` Rafael J. Wysocki
2015-10-26  3:09                     ` Mark Brown
2015-10-26  8:16     ` Geert Uytterhoeven
2015-10-27 14:46       ` Tomeu Vizoso
2015-09-21 14:02 ` [PATCH v6 05/22] gpio: Probe GPIO drivers on demand Tomeu Vizoso
2015-09-21 14:02 ` [PATCH v6 06/22] gpio: Probe pinctrl devices " Tomeu Vizoso
2015-09-21 14:02 ` [PATCH v6 07/22] regulator: core: Remove regulator_list Tomeu Vizoso
2015-09-21 19:38   ` Mark Brown
     [not found]     ` <20150921193803.GB30445-GFdadSzt00ze9xe1eoZjHA@public.gmane.org>
2015-09-22  7:21       ` Tomeu Vizoso
2015-09-21 14:02 ` [PATCH v6 08/22] regulator: core: Probe regulators on demand Tomeu Vizoso
     [not found]   ` <1442844182-27787-9-git-send-email-tomeu.vizoso-ZGY8ohtN/8qB+jHODAdFcQ@public.gmane.org>
2015-09-21 19:39     ` Mark Brown
2015-09-21 14:02 ` [PATCH v6 09/22] drm: Probe panels " Tomeu Vizoso
2015-09-21 14:02 ` [PATCH v6 10/22] drm/tegra: Probe dpaux devices " Tomeu Vizoso
2015-09-21 14:02 ` [PATCH v6 11/22] i2c: core: Probe i2c adapters and " Tomeu Vizoso
2015-09-21 14:02 ` [PATCH v6 12/22] pwm: Probe PWM chip " Tomeu Vizoso
2015-09-21 14:02 ` [PATCH v6 13/22] backlight: Probe backlight " Tomeu Vizoso
2015-09-21 14:02 ` [PATCH v6 14/22] usb: phy: Probe phy " Tomeu Vizoso
2015-09-21 14:02 ` [PATCH v6 15/22] clk: Probe clk providers " Tomeu Vizoso
     [not found] ` <1442844182-27787-1-git-send-email-tomeu.vizoso-ZGY8ohtN/8qB+jHODAdFcQ@public.gmane.org>
2015-09-21 14:02   ` [PATCH v6 16/22] pinctrl: Probe pinctrl devices " Tomeu Vizoso
2015-09-21 14:02 ` [PATCH v6 17/22] phy: core: Probe phy providers " Tomeu Vizoso
2015-09-21 14:02 ` [PATCH v6 18/22] dma: of: Probe DMA controllers " Tomeu Vizoso
2015-09-21 14:02 ` [PATCH v6 19/22] power-supply: Probe power supplies " Tomeu Vizoso
2015-09-21 14:03 ` [PATCH v6 20/22] driver core: Allow deferring probes until late init Tomeu Vizoso
2015-09-26 18:15   ` Rob Herring
2015-09-29  8:05     ` Tomeu Vizoso
2015-09-29 16:58       ` Rob Herring
2015-09-21 14:03 ` [PATCH v6 21/22] driver core: Start processing deferred probes earlier Tomeu Vizoso
2015-10-05 23:52   ` Frank Rowand [this message]
2015-10-06  2:49     ` Rob Herring
     [not found]       ` <CAL_JsqKBKSsvEuoufc=xesSvcA1bf-X43O0YOvuntUJE5NYCJA-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2015-10-06 10:45         ` Mark Brown
2015-09-21 14:03 ` [PATCH v6 22/22] of/platform: Defer probes of registered devices Tomeu Vizoso
2015-10-21  5:54   ` Scott Wood
2015-10-21 13:44     ` Rob Herring
     [not found]       ` <CAL_JsqLhZmc8cEC+tFJ25KLe0bQZsWmrRWGBMQake9VN6OjvdQ-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2015-10-21 22:51         ` Scott Wood
     [not found]           ` <1445467912.701.90.camel-KZfg59tc24xl57MIdRCFDg@public.gmane.org>
2015-10-22 13:04             ` Tomeu Vizoso
2015-10-22 21:27               ` Scott Wood
     [not found]                 ` <1445549230.701.116.camel-KZfg59tc24xl57MIdRCFDg@public.gmane.org>
2015-10-24 13:51                   ` Rafael J. Wysocki
2015-10-28 14:40                 ` Tomeu Vizoso
2015-10-29  4:17                   ` Rob Herring
     [not found]                   ` <CAAObsKDR6pTEDK-G+jw+cr9MD-XoZqU8niqvDFHqFM0ve-+Smw-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2015-10-29 16:06                     ` Scott Wood
     [not found]     ` <1445406845.701.55.camel-KZfg59tc24xl57MIdRCFDg@public.gmane.org>
2015-10-22  0:34       ` Michael Ellerman
2015-09-26 18:17 ` [PATCH v6 0/22] On-demand device probing Rob Herring
     [not found]   ` <5606E120.3070305-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org>
2015-09-26 19:22     ` Greg Kroah-Hartman
     [not found]       ` <20150926192218.GA15657-U8xfFu+wG4EAvxtiuMwx3w@public.gmane.org>
2015-09-30 10:09         ` Tomeu Vizoso
2015-09-30 10:23           ` Greg Kroah-Hartman
2015-09-29  8:08   ` Tomeu Vizoso
2015-10-13 19:57   ` Tomeu Vizoso
2015-10-13 21:21     ` Rob Herring

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=56130D43.10200@gmail.com \
    --to=frowand.list@gmail.com \
    --cc=arnd@arndb.de \
    --cc=broonie@kernel.org \
    --cc=devicetree@vger.kernel.org \
    --cc=dmitry.torokhov@gmail.com \
    --cc=gregkh@linuxfoundation.org \
    --cc=javier@osg.samsung.com \
    --cc=linus.walleij@linaro.org \
    --cc=linux-acpi@vger.kernel.org \
    --cc=linux-arm-kernel@lists.infradead.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=rjw@rjwysocki.net \
    --cc=robh+dt@kernel.org \
    --cc=stern@rowland.harvard.edu \
    --cc=swarren@wwwdotorg.org \
    --cc=thierry.reding@gmail.com \
    --cc=tomeu.vizoso@collabora.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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).