Linux ACPI
 help / color / mirror / Atom feed
From: Tomeu Vizoso <tomeu.vizoso@collabora.com>
To: linux-kernel@vger.kernel.org
Cc: devicetree@vger.kernel.org, linux-acpi@vger.kernel.org,
	Arnd Bergmann <arnd@arndb.de>,
	Stephen Warren <swarren@wwwdotorg.org>,
	Greg Kroah-Hartman <gregkh@linuxfoundation.org>,
	Linus Walleij <linus.walleij@linaro.org>,
	Dmitry Torokhov <dmitry.torokhov@gmail.com>,
	"Rafael J. Wysocki" <rjw@rjwysocki.net>,
	Tomeu Vizoso <tomeu.vizoso@collabora.com>,
	Javier Martinez Canillas <javier@osg.samsung.com>,
	Mark Brown <broonie@kernel.org>,
	Thierry Reding <thierry.reding@gmail.com>,
	linux-arm-kernel@lists.infradead.org
Subject: [PATCH v2 01/22] platform: delay device-driver matches until late_initcall
Date: Tue, 28 Jul 2015 15:19:32 +0200	[thread overview]
Message-ID: <1438089593-7696-2-git-send-email-tomeu.vizoso@collabora.com> (raw)
In-Reply-To: <1438089593-7696-1-git-send-email-tomeu.vizoso@collabora.com>

Delay matches of platform devices until late_initcall, when we are sure
that all built-in drivers have been registered already.  This is needed
to prevent deferred probes because of some drivers not having registered
yet.

The reason why only platform devices are delayed is that some other
devices are expected to be probed earlier than late_initcall, for
example, the system PNP driver needs to probe its devices in
fs_initcall.

Signed-off-by: Tomeu Vizoso <tomeu.vizoso@collabora.com>
---

Changes in v2:
- Move delay to platform.c

 drivers/base/platform.c | 28 ++++++++++++++++++++++++++++
 1 file changed, 28 insertions(+)

diff --git a/drivers/base/platform.c b/drivers/base/platform.c
index 063f0ab15259..fcf654678e27 100644
--- a/drivers/base/platform.c
+++ b/drivers/base/platform.c
@@ -33,6 +33,8 @@
 /* For automatically allocated device IDs */
 static DEFINE_IDA(platform_devid_ida);
 
+static bool enable_matches;
+
 struct device platform_bus = {
 	.init_name	= "platform",
 };
@@ -839,6 +841,15 @@ static int platform_match(struct device *dev, struct device_driver *drv)
 	struct platform_device *pdev = to_platform_device(dev);
 	struct platform_driver *pdrv = to_platform_driver(drv);
 
+	/*
+	 * Delay matches of platform devices until late_initcall, when we are
+	 * sure that all built-in drivers have been registered already. This
+	 * is needed to prevent deferred probes because of some drivers
+	 * not having registered yet.
+	 */
+	if (!enable_matches)
+		return false;
+
 	/* When driver_override is set, only bind to the matching driver */
 	if (pdev->driver_override)
 		return !strcmp(pdev->driver_override, drv->name);
@@ -859,6 +870,23 @@ static int platform_match(struct device *dev, struct device_driver *drv)
 	return (strcmp(pdev->name, drv->name) == 0);
 }
 
+static int __probe_device(struct device *dev, void *data)
+{
+	device_initial_probe(dev);
+
+	return 0;
+}
+
+static int probe_delayed_matches_initcall(void)
+{
+	enable_matches = true;
+
+	bus_for_each_dev(&platform_bus_type, NULL, NULL, __probe_device);
+
+	return 0;
+}
+late_initcall(probe_delayed_matches_initcall);
+
 #ifdef CONFIG_PM_SLEEP
 
 static int platform_legacy_suspend(struct device *dev, pm_message_t mesg)
-- 
2.4.3

  reply	other threads:[~2015-07-28 13:19 UTC|newest]

Thread overview: 39+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2015-07-28 13:19 [PATCH v2 0/22] On-demand device probing Tomeu Vizoso
2015-07-28 13:19 ` Tomeu Vizoso [this message]
2015-07-30  3:20   ` [PATCH v2 01/22] platform: delay device-driver matches until late_initcall Rob Herring
2015-07-31 10:06     ` Tomeu Vizoso
2015-07-28 13:19 ` [PATCH v2 02/22] of/platform: Set fwnode field for new devices Tomeu Vizoso
2015-07-28 13:19 ` [PATCH v2 03/22] device property: add fwnode_get_name() Tomeu Vizoso
2015-07-28 13:19 ` [PATCH v2 04/22] of/platform: add of_platform_device_find() Tomeu Vizoso
2015-07-28 13:39   ` Rob Herring
2015-07-28 13:54     ` Tomeu Vizoso
2015-07-28 15:31       ` Rob Herring
2015-07-29  6:14         ` Tomeu Vizoso
     [not found]           ` <CAAObsKA+vMsgiC52jReJckeDjXhdd=_NBocFbMapdwFReiY1SQ-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2015-07-29 11:20             ` Tomeu Vizoso
2015-07-29 12:15               ` Tomeu Vizoso
2015-07-29 15:27               ` Rob Herring
2015-07-31 10:32                 ` Tomeu Vizoso
2015-07-28 13:19 ` [PATCH v2 05/22] ACPI: add acpi_dev_get_device() Tomeu Vizoso
     [not found]   ` <1438089593-7696-6-git-send-email-tomeu.vizoso-ZGY8ohtN/8qB+jHODAdFcQ@public.gmane.org>
2015-07-30  3:08     ` Rob Herring
2015-07-28 13:19 ` [PATCH v2 06/22] device property: add fwnode_ensure_device() Tomeu Vizoso
2015-07-28 13:19 ` [PATCH v2 07/22] gpio: Probe GPIO drivers on demand Tomeu Vizoso
2015-07-28 13:19 ` [PATCH v2 08/22] gpio: Probe pinctrl devices " Tomeu Vizoso
2015-07-28 13:19 ` [PATCH v2 09/22] regulator: core: Reduce critical area in _regulator_get Tomeu Vizoso
2015-07-28 13:19 ` [PATCH v2 10/22] regulator: core: Probe regulators on demand Tomeu Vizoso
2015-07-28 13:19 ` [PATCH v2 11/22] drm: Probe panels " Tomeu Vizoso
2015-07-28 13:19 ` [PATCH v2 12/22] drm/tegra: Probe dpaux devices " Tomeu Vizoso
2015-07-28 13:19 ` [PATCH v2 13/22] i2c: core: Probe i2c master " Tomeu Vizoso
2015-08-09 12:34   ` Wolfram Sang
2015-08-09 13:37     ` Tomeu Vizoso
2015-07-28 13:19 ` [PATCH v2 14/22] pwm: Probe PWM chip " Tomeu Vizoso
2015-07-28 13:19 ` [PATCH v2 15/22] backlight: Probe backlight " Tomeu Vizoso
2015-07-28 13:19 ` [PATCH v2 16/22] usb: phy: Probe phy " Tomeu Vizoso
2015-07-28 13:19 ` [PATCH v2 17/22] clk: Probe clk providers " Tomeu Vizoso
2015-07-28 13:19 ` [PATCH v2 18/22] pinctrl: Probe pinctrl devices " Tomeu Vizoso
2015-07-28 13:19 ` [PATCH v2 19/22] phy: core: Probe phy providers " Tomeu Vizoso
2015-07-28 13:19 ` [PATCH v2 20/22] dma: of: Probe DMA controllers " Tomeu Vizoso
2015-07-28 13:19 ` [PATCH v2 21/22] power-supply: Probe power supplies " Tomeu Vizoso
2015-07-28 13:19 ` [PATCH v2 22/22] ASoC: core: Probe components " Tomeu Vizoso
     [not found] ` <1438089593-7696-1-git-send-email-tomeu.vizoso-ZGY8ohtN/8qB+jHODAdFcQ@public.gmane.org>
2015-07-29  0:36   ` [PATCH v2 0/22] On-demand device probing Rafael J. Wysocki
2015-07-30  3:06 ` Rob Herring
2015-07-31 10:28   ` Tomeu Vizoso

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=1438089593-7696-2-git-send-email-tomeu.vizoso@collabora.com \
    --to=tomeu.vizoso@collabora.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=swarren@wwwdotorg.org \
    --cc=thierry.reding@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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox