* [PATCH] drivercore: Fix ordering between deferred_probe and exiting initcalls
@ 2013-02-14 18:14 Grant Likely
2013-02-14 18:28 ` Greg Kroah-Hartman
0 siblings, 1 reply; 2+ messages in thread
From: Grant Likely @ 2013-02-14 18:14 UTC (permalink / raw)
To: linux-kernel
Cc: Grant Likely, Arnd Bergmann, Russell King, Greg Kroah-Hartman,
Linus Torvalds, stable
One of the side effects of deferred probe is that some drivers which
used to be probed before initcalls completed are now happening slightly
later. This causes two problems.
- If a console driver gets deferred, then it may not be ready when
userspace starts. For example, if a uart depends on pinctrl, then the
uart will get deferred and /dev/console will not be available
- __init sections will be discarded before built-in drivers are probed.
Strictly speaking, __init functions should not be called in a drivers
__probe path, but there are a lot of drivers (console stuff again)
that do anyway. In the past it was perfectly safe to do so because all
built-in drivers got probed before the end of initcalls.
This patch fixes the problem by forcing the first pass of the deferred
list to complete at late_initcall time. This is late enough to catch the
drivers that are known to have the above issues.
Signed-off-by: Grant Likely <grant.likely@secretlab.ca>
Tested-by: Haojian Zhuang <haojian.zhuang@linaro.org>
Cc: Arnd Bergmann <arnd@arndb.de>
Cc: Russell King <linux@arm.linux.org.uk>
Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Cc: Linus Torvalds <torvalds@linux-foundation.org>
Cc: stable@vger.kernel.org
---
Hi Greg and Linus,
Okay, so this is really late to be sending for v3.8, and it doesn't have
nearly the amount of testing that I would like it to have. I haven't
even put it into linux-next yet. However, it is a real bug that some of
the Linaro folks have run into that is caused by deferred probe. It
isn't very widespread, but it is there.
It probably should be in v3.8, but given how ridiculously late it is and
that it isn't a widespread problem it would probably be just fine to go
in during the v3.9 merge window and get backported to linux-stable. If I
don't hear otherwise then that is what I'll do.
Still, here it is. If you think it really should be merged before
tagging v3.8 then please go ahead and apply it.
For stable it needs to go into v3.4 onwards.
g.
drivers/base/dd.c | 2 ++
1 file changed, 2 insertions(+)
diff --git a/drivers/base/dd.c b/drivers/base/dd.c
index e3bbed8..61d3e1b 100644
--- a/drivers/base/dd.c
+++ b/drivers/base/dd.c
@@ -172,6 +172,8 @@ static int deferred_probe_initcall(void)
driver_deferred_probe_enable = true;
driver_deferred_probe_trigger();
+ /* Sort as many dependencies as possible before exiting initcalls */
+ flush_workqueue(deferred_wq);
return 0;
}
late_initcall(deferred_probe_initcall);
--
1.7.10.4
^ permalink raw reply related [flat|nested] 2+ messages in thread
* Re: [PATCH] drivercore: Fix ordering between deferred_probe and exiting initcalls
2013-02-14 18:14 [PATCH] drivercore: Fix ordering between deferred_probe and exiting initcalls Grant Likely
@ 2013-02-14 18:28 ` Greg Kroah-Hartman
0 siblings, 0 replies; 2+ messages in thread
From: Greg Kroah-Hartman @ 2013-02-14 18:28 UTC (permalink / raw)
To: Grant Likely
Cc: linux-kernel, Arnd Bergmann, Russell King, Linus Torvalds, stable
On Thu, Feb 14, 2013 at 06:14:27PM +0000, Grant Likely wrote:
> One of the side effects of deferred probe is that some drivers which
> used to be probed before initcalls completed are now happening slightly
> later. This causes two problems.
> - If a console driver gets deferred, then it may not be ready when
> userspace starts. For example, if a uart depends on pinctrl, then the
> uart will get deferred and /dev/console will not be available
> - __init sections will be discarded before built-in drivers are probed.
> Strictly speaking, __init functions should not be called in a drivers
> __probe path, but there are a lot of drivers (console stuff again)
> that do anyway. In the past it was perfectly safe to do so because all
> built-in drivers got probed before the end of initcalls.
>
> This patch fixes the problem by forcing the first pass of the deferred
> list to complete at late_initcall time. This is late enough to catch the
> drivers that are known to have the above issues.
>
> Signed-off-by: Grant Likely <grant.likely@secretlab.ca>
> Tested-by: Haojian Zhuang <haojian.zhuang@linaro.org>
> Cc: Arnd Bergmann <arnd@arndb.de>
> Cc: Russell King <linux@arm.linux.org.uk>
> Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
> Cc: Linus Torvalds <torvalds@linux-foundation.org>
> Cc: stable@vger.kernel.org
> ---
>
> Hi Greg and Linus,
>
> Okay, so this is really late to be sending for v3.8, and it doesn't have
> nearly the amount of testing that I would like it to have. I haven't
> even put it into linux-next yet. However, it is a real bug that some of
> the Linaro folks have run into that is caused by deferred probe. It
> isn't very widespread, but it is there.
>
> It probably should be in v3.8, but given how ridiculously late it is and
> that it isn't a widespread problem it would probably be just fine to go
> in during the v3.9 merge window and get backported to linux-stable. If I
> don't hear otherwise then that is what I'll do.
>
> Still, here it is. If you think it really should be merged before
> tagging v3.8 then please go ahead and apply it.
Nah, we can wait for 3.9-rc1, I'll queue it up in my tree and push it to
Linus for then, and tag it for stable kernels to be backported at that
point in time.
thanks,
greg k-h
^ permalink raw reply [flat|nested] 2+ messages in thread
end of thread, other threads:[~2013-02-14 18:28 UTC | newest]
Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2013-02-14 18:14 [PATCH] drivercore: Fix ordering between deferred_probe and exiting initcalls Grant Likely
2013-02-14 18:28 ` Greg Kroah-Hartman
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).