All of lore.kernel.org
 help / color / mirror / Atom feed
From: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
To: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Cc: "Luis R. Rodriguez" <mcgrof@kernel.org>,
	"Rafael J. Wysocki" <rafael@kernel.org>,
	Lukas Wunner <lukas@wunner.de>,
	"Rafael J. Wysocki" <rjw@rjwysocki.net>,
	Linux PM list <linux-pm@vger.kernel.org>,
	Alan Stern <stern@rowland.harvard.edu>,
	Linux Kernel Mailing List <linux-kernel@vger.kernel.org>,
	Tomeu Vizoso <tomeu.vizoso@collabora.com>,
	Mark Brown <broonie@kernel.org>,
	Marek Szyprowski <m.szyprowski@samsung.com>,
	Kevin Hilman <khilman@kernel.org>,
	Ulf Hansson <ulf.hansson@linaro.org>,
	Geert Uytterhoeven <geert@linux-m68k.org>,
	Lars-Peter Clausen <lars@metafoo.de>,
	Grant Likely <grant.likely@secretlab.ca>,
	Mauro Carvalho Chehab <mchehab@osg.samsung.com>,
	Dmitry Torokhov <dmitry.torokhov@gmail.com>,
	Andrzej Hajda <a.hajda@samsung.com>,
	Christoph Hellwig <hch@infradead.org>,
	Arnd Bergmann <arnd@arndb.de>
Subject: Re: [PATCH v5 2/5] driver core: Functional dependencies tracking support
Date: Fri, 11 Nov 2016 02:08:35 +0200	[thread overview]
Message-ID: <3465624.0TqEj8I9ee@avalon> (raw)
In-Reply-To: <20161110224054.GA10575@kroah.com>

Hi Greg,

On Thursday 10 Nov 2016 23:40:54 Greg Kroah-Hartman wrote:
> On Thu, Nov 10, 2016 at 11:04:07PM +0100, Luis R. Rodriguez wrote:
> > This is more forward looking, but -- if we had an annotation in
> > Kconfig/turned to a mod info section, or to start off with just a driver
> > MODULE_SUGGESTS() macro to start off with it might suffice for the driver
> > core to request_module() annotated dependencies, such requests could be
> > explicitly suggested as synchronous so init + probe do run together
> > (as-is today), after which it could know that all possible drivers that
> > needed to be loaded should now be loaded. If this sounds plausible to
> > help, do we have drivers where we can test this on? For instance, since
> > the functional dependency framework annotates functional dependencies for
> > consumers/providers for suspend/resume and un time PM could such
> > MODULE_SUGGESTS() annotations be considered on the consumers to suggest
> > the provider drivers so their own probe yields to their providers to try
> > first ?
> 
> No.
> 
> Stop.
> 
> First off, the "driver core" NEVER can "know" if "all possible drivers
> that should be loaded, are loaded.  That way lies madness and
> impossibility.
> 
> Secondly, yet-another-section isn't going to help anything here, we
> alredy "suggest" to userspace a bunch of stuff, so we get the needed
> modules loaded, at sometime in the future, if they are around, and
> userspace feels like it.  That's the best we can ever do.
> 
> Don't try to make this more difficult than it is please. DEFER works
> today really really well, and it's really really simple.
> Inter-dependancy of modules and devices connected to each other are two
> different things, be careful about this.

One issue we don't address today is handling of optional dependencies. A 
simple example is an SPI controller that can use a DMA engine or work in PIO 
mode. At probe time the driver will request a DMA channel if the platform 
(ACPI, DT, platform data) specifies that DMA is available. This can fail for 
various reasons, one of them being that the DMA engine driver hasn't probed 
the DMA device yet. In that case the SPI controller driver will continue in 
PIO mode, ignoring the DMA engine that will later be probed. We can't defer 
probing of the SPI controller as the DMA engine driver might never get loaded, 
which would result in the SPI controller probe being deferred forever.

One solution for this type of dependency issue would be to notify the SPI 
controller driver after probe that the DMA channel is now available. I'd like 
to avoid that though, as it would drastically increase the complexity of lots 
of drivers and create lots of race conditions.

There are certain configurations that we could possibly consider as invalid. 
For instance if the SPI controller driver is built-in and the DMA engine 
driver built as a module, the user clearly shot themselves in the foot and the 
kernel can't be blamed.

For resources that can't be built as a module (IOMMUs for instance) we thus 
only have to consider the case where both drivers are built-in, as the 
resource built-in and consumer as a module should work properly from an 
ordering point of view (at least as long as we don't allow asynchronous 
probing of built-in drivers to be delayed enough for modules to be loaded...). 
In this case, if the resource driver isn't available when the consumer is 
probed, if will never be available at the consumer can safely proceed in a 
degraded mode. We would thus only need to solve the probe ordering issue.

I'm not sure how far these simple(r) solutions that consider certain cases as 
invalid would scale though, and whether we won't need a more generic solution 
at some point anyway.

-- 
Regards,

Laurent Pinchart

WARNING: multiple messages have this Message-ID (diff)
From: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
To: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Cc: "Luis R. Rodriguez" <mcgrof@kernel.org>,
	"Rafael J. Wysocki" <rafael@kernel.org>,
	Lukas Wunner <lukas@wunner.de>,
	"Rafael J. Wysocki" <rjw@rjwysocki.net>,
	Linux PM list <linux-pm@vger.kernel.org>,
	Alan Stern <stern@rowland.harvard.edu>,
	Linux Kernel Mailing List <linux-kernel@vger.kernel.org>,
	Tomeu Vizoso <tomeu.vizoso@collabora.com>,
	Mark Brown <broonie@kernel.org>,
	Marek Szyprowski <m.szyprowski@samsung.com>,
	Kevin Hilman <khilman@kernel.org>,
	Ulf Hansson <ulf.hansson@linaro.org>,
	Geert Uytterhoeven <geert@linux-m68k.org>,
	Lars-Peter Clausen <lars@metafoo.de>,
	Grant Likely <grant.likely@secretlab.ca>,
	Mauro Carvalho Chehab <mchehab@osg.samsung.com>,
	Dmitry Torokhov <dmitry.torokhov@gmail.com>,
	Andrzej Hajda <a.hajda@samsung.com>,
	Christoph
Subject: Re: [PATCH v5 2/5] driver core: Functional dependencies tracking support
Date: Fri, 11 Nov 2016 02:08:35 +0200	[thread overview]
Message-ID: <3465624.0TqEj8I9ee@avalon> (raw)
In-Reply-To: <20161110224054.GA10575@kroah.com>

Hi Greg,

On Thursday 10 Nov 2016 23:40:54 Greg Kroah-Hartman wrote:
> On Thu, Nov 10, 2016 at 11:04:07PM +0100, Luis R. Rodriguez wrote:
> > This is more forward looking, but -- if we had an annotation in
> > Kconfig/turned to a mod info section, or to start off with just a driver
> > MODULE_SUGGESTS() macro to start off with it might suffice for the driver
> > core to request_module() annotated dependencies, such requests could be
> > explicitly suggested as synchronous so init + probe do run together
> > (as-is today), after which it could know that all possible drivers that
> > needed to be loaded should now be loaded. If this sounds plausible to
> > help, do we have drivers where we can test this on? For instance, since
> > the functional dependency framework annotates functional dependencies for
> > consumers/providers for suspend/resume and un time PM could such
> > MODULE_SUGGESTS() annotations be considered on the consumers to suggest
> > the provider drivers so their own probe yields to their providers to try
> > first ?
> 
> No.
> 
> Stop.
> 
> First off, the "driver core" NEVER can "know" if "all possible drivers
> that should be loaded, are loaded.  That way lies madness and
> impossibility.
> 
> Secondly, yet-another-section isn't going to help anything here, we
> alredy "suggest" to userspace a bunch of stuff, so we get the needed
> modules loaded, at sometime in the future, if they are around, and
> userspace feels like it.  That's the best we can ever do.
> 
> Don't try to make this more difficult than it is please. DEFER works
> today really really well, and it's really really simple.
> Inter-dependancy of modules and devices connected to each other are two
> different things, be careful about this.

One issue we don't address today is handling of optional dependencies. A 
simple example is an SPI controller that can use a DMA engine or work in PIO 
mode. At probe time the driver will request a DMA channel if the platform 
(ACPI, DT, platform data) specifies that DMA is available. This can fail for 
various reasons, one of them being that the DMA engine driver hasn't probed 
the DMA device yet. In that case the SPI controller driver will continue in 
PIO mode, ignoring the DMA engine that will later be probed. We can't defer 
probing of the SPI controller as the DMA engine driver might never get loaded, 
which would result in the SPI controller probe being deferred forever.

One solution for this type of dependency issue would be to notify the SPI 
controller driver after probe that the DMA channel is now available. I'd like 
to avoid that though, as it would drastically increase the complexity of lots 
of drivers and create lots of race conditions.

There are certain configurations that we could possibly consider as invalid. 
For instance if the SPI controller driver is built-in and the DMA engine 
driver built as a module, the user clearly shot themselves in the foot and the 
kernel can't be blamed.

For resources that can't be built as a module (IOMMUs for instance) we thus 
only have to consider the case where both drivers are built-in, as the 
resource built-in and consumer as a module should work properly from an 
ordering point of view (at least as long as we don't allow asynchronous 
probing of built-in drivers to be delayed enough for modules to be loaded...). 
In this case, if the resource driver isn't available when the consumer is 
probed, if will never be available at the consumer can safely proceed in a 
degraded mode. We would thus only need to solve the probe ordering issue.

I'm not sure how far these simple(r) solutions that consider certain cases as 
invalid would scale though, and whether we won't need a more generic solution 
at some point anyway.

-- 
Regards,

Laurent Pinchart

  reply	other threads:[~2016-11-11  0:08 UTC|newest]

Thread overview: 147+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2016-09-08 21:25 [RFC/RFT][PATCH v2 0/7] Functional dependencies between devices Rafael J. Wysocki
2016-09-08 21:26 ` [RFC/RFT][PATCH v2 1/7] driver core: Add a wrapper around __device_release_driver() Rafael J. Wysocki
2016-09-08 21:27 ` [RFC/RFT][PATCH v2 2/7] driver core: Functional dependencies tracking support Rafael J. Wysocki
2016-09-09  8:25   ` Ulf Hansson
2016-09-09 12:06     ` Mark Brown
2016-09-09 14:13       ` Ulf Hansson
2016-09-15  1:11     ` Rafael J. Wysocki
2016-09-11 13:40   ` Lukas Wunner
2016-09-11 20:43     ` Lukas Wunner
2016-09-14  1:21       ` Rafael J. Wysocki
2016-09-14  8:28         ` Lukas Wunner
2016-09-14 13:17           ` Rafael J. Wysocki
2016-09-08 21:28 ` [RFC/RFT][PATCH v2 3/7] PM / sleep: Make async suspend/resume of devices use device links Rafael J. Wysocki
2016-09-10 13:31   ` Lukas Wunner
2016-09-10 22:12     ` Rafael J. Wysocki
2016-09-08 21:29 ` [RFC/RFT][PATCH v2 4/7] PM / runtime: Pass flags argument to __pm_runtime_disable() Rafael J. Wysocki
2016-09-08 21:29 ` [RFC/RFT][PATCH v2 5/7] PM / runtime: Flag to indicate PM sleep transitions in progress Rafael J. Wysocki
2016-09-12 14:07   ` Lukas Wunner
2016-09-12 21:25     ` Rafael J. Wysocki
2016-09-12 22:52       ` Lukas Wunner
2016-09-13  7:21       ` Marek Szyprowski
2016-09-13 23:59         ` Rafael J. Wysocki
2016-09-08 21:30 ` [RFC/RFT][PATCH v2 6/7] PM / runtime: Use device links Rafael J. Wysocki
2016-09-12  9:47   ` Lukas Wunner
2016-09-12 13:57     ` Rafael J. Wysocki
2016-09-14  1:19       ` Rafael J. Wysocki
2016-09-08 21:31 ` [RFC/RFT][PATCH v2 7/7] PM / runtime: Optimize the use of " Rafael J. Wysocki
2016-09-08 21:35 ` [RFC/RFT][PATCH v2 0/7] Functional dependencies between devices Rafael J. Wysocki
2016-09-10 11:39 ` Lukas Wunner
2016-09-10 22:04   ` Rafael J. Wysocki
2016-09-13 17:57     ` Lukas Wunner
2016-09-13 23:18       ` Rafael J. Wysocki
2016-09-18 12:39         ` Lukas Wunner
     [not found] ` <CGME20160913095858eucas1p267ec2397c9e4577f94557e4a38498164@eucas1p2.samsung.com>
2016-09-13  9:58   ` Marek Szyprowski
2016-09-13 22:41     ` Rafael J. Wysocki
2016-09-18 11:23       ` Lukas Wunner
2016-09-15 22:03 ` [RFC/RFT][PATCH v3 0/5] " Rafael J. Wysocki
2016-09-15 22:04   ` [Resend][RFC/RFT][PATCH v3 1/5] driver core: Add a wrapper around __device_release_driver() Rafael J. Wysocki
2016-09-15 22:06   ` [RFC/RFT][PATCH v3 2/5] driver core: Functional dependencies tracking support Rafael J. Wysocki
2016-09-16  7:53     ` Marek Szyprowski
2016-09-16 12:06       ` Rafael J. Wysocki
2016-09-16 12:33     ` [Update][RFC/RFT][PATCH " Rafael J. Wysocki
2016-09-19 22:46       ` Lukas Wunner
2016-09-23 13:03         ` Lukas Wunner
2016-09-23 13:42         ` Rafael J. Wysocki
2016-09-26 16:51           ` Lukas Wunner
2016-09-27 12:16             ` Rafael J. Wysocki
2016-09-27  8:54       ` Lukas Wunner
2016-09-27 11:52         ` Rafael J. Wysocki
2016-09-28 10:43           ` Lukas Wunner
2016-09-28 11:31             ` Rafael J. Wysocki
2016-09-29 10:36               ` Lukas Wunner
2016-09-15 22:06   ` [RFC/RFT][PATCH v3 3/5] PM / sleep: Make async suspend/resume of devices use device links Rafael J. Wysocki
2016-09-15 22:07   ` [RFC/RFT][PATCH v3 4/5] PM / runtime: Use " Rafael J. Wysocki
2016-09-15 22:07   ` [RFC/RFT][PATCH v3 5/5] PM / runtime: Optimize the use of " Rafael J. Wysocki
2016-09-16  7:25   ` [RFC/RFT][PATCH v3 0/5] Functional dependencies between devices Marek Szyprowski
2016-09-16  7:57     ` Marek Szyprowski
2016-09-16 12:04       ` Rafael J. Wysocki
2016-09-27 12:34   ` Lukas Wunner
2016-09-28  0:33     ` Rafael J. Wysocki
2016-09-28 11:42       ` Lukas Wunner
2016-09-29  0:51         ` Rafael J. Wysocki
2016-11-15 18:50           ` Lukas Wunner
2016-09-29  0:24 ` [PATCH v4 " Rafael J. Wysocki
2016-09-29  0:25   ` [Resend][PATCH v4 1/5] driver core: Add a wrapper around __device_release_driver() Rafael J. Wysocki
2016-09-29  0:38   ` [PATCH v4 2/5] driver core: Functional dependencies tracking support Rafael J. Wysocki
2016-10-01  7:43     ` Lukas Wunner
2016-10-01 23:32       ` Rafael J. Wysocki
2016-09-29  0:38   ` [Resend][PATCH v4 3/5] PM / sleep: Make async suspend/resume of devices use device links Rafael J. Wysocki
2016-09-29  0:40   ` [PATCH v4 4/5] PM / runtime: Use " Rafael J. Wysocki
2016-09-29  0:41   ` [Rebase][PATCH v4 5/5] PM / runtime: Optimize the use of " Rafael J. Wysocki
2016-09-29  6:58   ` [PATCH v4 0/5] Functional dependencies between devices Marek Szyprowski
2016-09-29 12:27     ` Rafael J. Wysocki
2016-10-02 23:13   ` Lukas Wunner
2016-10-10 12:36 ` [PATCH v5 " Rafael J. Wysocki
2016-10-10 12:37   ` [Resend][PATCH v5 1/5] driver core: Add a wrapper around __device_release_driver() Rafael J. Wysocki
2016-10-10 12:51   ` [PATCH v5 2/5] driver core: Functional dependencies tracking support Rafael J. Wysocki
2016-10-26 11:19     ` Lukas Wunner
2016-10-27 15:25       ` Greg Kroah-Hartman
2016-10-28  9:57         ` Lukas Wunner
2016-11-07 21:22         ` Luis R. Rodriguez
2016-11-08  6:45           ` Greg Kroah-Hartman
2016-11-08 19:21             ` Luis R. Rodriguez
2016-11-08 19:43               ` Greg Kroah-Hartman
2016-11-08 20:58                 ` Luis R. Rodriguez
2016-11-08 20:58                   ` Luis R. Rodriguez
2016-11-09  6:45                   ` Greg Kroah-Hartman
2016-11-09  9:36                     ` Andrzej Hajda
2016-11-09  9:41                       ` Greg Kroah-Hartman
2016-11-13 16:58                   ` Lukas Wunner
2016-11-10  0:43           ` Rafael J. Wysocki
2016-11-10  0:59             ` Luis R. Rodriguez
2016-11-10  0:59               ` Luis R. Rodriguez
2016-11-10  7:14               ` Laurent Pinchart
2016-11-10 22:04                 ` Luis R. Rodriguez
2016-11-10 22:04                   ` Luis R. Rodriguez
2016-11-10 22:40                   ` Greg Kroah-Hartman
2016-11-10 22:40                     ` Greg Kroah-Hartman
2016-11-11  0:08                     ` Laurent Pinchart [this message]
2016-11-11  0:08                       ` Laurent Pinchart
2016-11-13 10:59                       ` Greg Kroah-Hartman
2016-11-13 10:59                         ` Greg Kroah-Hartman
2016-11-14 14:50                         ` Luis R. Rodriguez
2016-11-14 14:50                           ` Luis R. Rodriguez
2016-11-14  8:15                       ` Geert Uytterhoeven
2016-11-14  8:15                         ` Geert Uytterhoeven
2016-11-10  8:46               ` Geert Uytterhoeven
2016-11-10 22:12                 ` Luis R. Rodriguez
2016-11-10 22:12                   ` Luis R. Rodriguez
2016-10-27 15:32     ` Greg Kroah-Hartman
2016-11-07 21:39     ` Luis R. Rodriguez
2016-11-10  1:07       ` Rafael J. Wysocki
2016-11-10  7:05       ` Laurent Pinchart
2016-11-10 23:09         ` Luis R. Rodriguez
2016-11-13 17:34       ` Lukas Wunner
2016-11-14 13:48         ` Luis R. Rodriguez
2016-11-14 15:48           ` Lukas Wunner
2016-11-14 16:00             ` Luis R. Rodriguez
2016-10-10 12:54   ` [PATCH v5 3/5] PM / sleep: Make async suspend/resume of devices use device links Rafael J. Wysocki
2016-10-10 12:56   ` [PATCH v5 4/5] PM / runtime: Use " Rafael J. Wysocki
2016-10-20 13:17     ` [Update][PATCH " Rafael J. Wysocki
2016-10-10 12:57   ` [Rebase][PATCH v5 5/5] PM / runtime: Optimize the use of " Rafael J. Wysocki
2016-10-18 10:46   ` [PATCH v5 0/5] Functional dependencies between devices Marek Szyprowski
2016-10-19 11:57     ` Rafael J. Wysocki
2016-10-20 10:21       ` Marek Szyprowski
2016-10-20 12:54         ` Rafael J. Wysocki
2016-10-27 15:32   ` Greg Kroah-Hartman
     [not found]   ` <5811F0CF.5000204@huawei.com>
2016-10-28  9:39     ` Lukas Wunner
2016-11-02 20:55       ` Hanjun Guo
2016-10-30 16:22 ` [PATCH v6 " Rafael J. Wysocki
2016-10-30 16:28   ` [Resend][PATCH v6 3/5] PM / sleep: Make async suspend/resume of devices use device links Rafael J. Wysocki
2016-10-30 16:29   ` [Resend][PATCH v6 1/5] driver core: Add a wrapper around __device_release_driver() Rafael J. Wysocki
2016-10-30 16:32   ` [PATCH v6 2/5] driver core: Functional dependencies tracking support Rafael J. Wysocki
2016-10-30 16:32   ` [PATCH v6 4/5] PM / runtime: Use device links Rafael J. Wysocki
2016-12-18 14:01     ` Lukas Wunner
2016-12-18 15:53       ` Rafael J. Wysocki
2016-12-18 16:37         ` Lukas Wunner
2016-12-19 12:38           ` Rafael J. Wysocki
2016-10-30 16:32   ` [Resend][PATCH v6 5/5] PM / runtime: Optimize the use of " Rafael J. Wysocki
2016-10-30 16:40   ` [PATCH v6 0/5] Functional dependencies between devices Rafael J. Wysocki
2016-10-31 17:47   ` Greg Kroah-Hartman
2016-11-01  3:50     ` Rafael J. Wysocki
2016-11-02  7:58     ` Marek Szyprowski
2016-11-05 12:10       ` Greg Kroah-Hartman
2016-11-07 21:15       ` Luis R. Rodriguez
2016-11-08  6:36         ` Marek Szyprowski
2016-11-08 20:14           ` Luis R. Rodriguez

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=3465624.0TqEj8I9ee@avalon \
    --to=laurent.pinchart@ideasonboard.com \
    --cc=a.hajda@samsung.com \
    --cc=arnd@arndb.de \
    --cc=broonie@kernel.org \
    --cc=dmitry.torokhov@gmail.com \
    --cc=geert@linux-m68k.org \
    --cc=grant.likely@secretlab.ca \
    --cc=gregkh@linuxfoundation.org \
    --cc=hch@infradead.org \
    --cc=khilman@kernel.org \
    --cc=lars@metafoo.de \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-pm@vger.kernel.org \
    --cc=lukas@wunner.de \
    --cc=m.szyprowski@samsung.com \
    --cc=mcgrof@kernel.org \
    --cc=mchehab@osg.samsung.com \
    --cc=rafael@kernel.org \
    --cc=rjw@rjwysocki.net \
    --cc=stern@rowland.harvard.edu \
    --cc=tomeu.vizoso@collabora.com \
    --cc=ulf.hansson@linaro.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 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.