Patch "driver core: Fix wait_for_device_probe() & deferred_probe_timeout interaction" has been added to the 5.10-stable tree

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



This is a note to let you know that I've just added the patch titled

    driver core: Fix wait_for_device_probe() & deferred_probe_timeout interaction

to the 5.10-stable tree which can be found at:
    http://www.kernel.org/git/?p=linux/kernel/git/stable/stable-queue.git;a=summary

The filename of the patch is:
     driver-core-fix-wait_for_device_probe-deferred_probe.patch
and it can be found in the queue-5.10 subdirectory.

If you, or anyone else, feels it should not be added to the stable tree,
please let <stable@xxxxxxxxxxxxxxx> know about it.



commit 328c969650b7ecb222121fe6ee9cdacda7c24bd7
Author: Saravana Kannan <saravanak@xxxxxxxxxx>
Date:   Fri Jun 3 13:31:37 2022 +0200

    driver core: Fix wait_for_device_probe() & deferred_probe_timeout interaction
    
    [ Upstream commit 5ee76c256e928455212ab759c51d198fedbe7523 ]
    
    Mounting NFS rootfs was timing out when deferred_probe_timeout was
    non-zero [1].  This was because ip_auto_config() initcall times out
    waiting for the network interfaces to show up when
    deferred_probe_timeout was non-zero. While ip_auto_config() calls
    wait_for_device_probe() to make sure any currently running deferred
    probe work or asynchronous probe finishes, that wasn't sufficient to
    account for devices being deferred until deferred_probe_timeout.
    
    Commit 35a672363ab3 ("driver core: Ensure wait_for_device_probe() waits
    until the deferred_probe_timeout fires") tried to fix that by making
    sure wait_for_device_probe() waits for deferred_probe_timeout to expire
    before returning.
    
    However, if wait_for_device_probe() is called from the kernel_init()
    context:
    
    - Before deferred_probe_initcall() [2], it causes the boot process to
      hang due to a deadlock.
    
    - After deferred_probe_initcall() [3], it blocks kernel_init() from
      continuing till deferred_probe_timeout expires and beats the point of
      deferred_probe_timeout that's trying to wait for userspace to load
      modules.
    
    Neither of this is good. So revert the changes to
    wait_for_device_probe().
    
    [1] - https://lore.kernel.org/lkml/TYAPR01MB45443DF63B9EF29054F7C41FD8C60@xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx/
    [2] - https://lore.kernel.org/lkml/YowHNo4sBjr9ijZr@dev-arch.thelio-3990X/
    [3] - https://lore.kernel.org/lkml/Yo3WvGnNk3LvLb7R@xxxxxxxxxxxxx/
    
    Fixes: 35a672363ab3 ("driver core: Ensure wait_for_device_probe() waits until the deferred_probe_timeout fires")
    Cc: John Stultz <jstultz@xxxxxxxxxx>
    Cc: "David S. Miller" <davem@xxxxxxxxxxxxx>
    Cc: Alexey Kuznetsov <kuznet@xxxxxxxxxxxxx>
    Cc: Hideaki YOSHIFUJI <yoshfuji@xxxxxxxxxxxxxx>
    Cc: Jakub Kicinski <kuba@xxxxxxxxxx>
    Cc: Rob Herring <robh@xxxxxxxxxx>
    Cc: Geert Uytterhoeven <geert@xxxxxxxxxxxxxx>
    Cc: Yoshihiro Shimoda <yoshihiro.shimoda.uh@xxxxxxxxxxx>
    Cc: Robin Murphy <robin.murphy@xxxxxxx>
    Cc: Andy Shevchenko <andy.shevchenko@xxxxxxxxx>
    Cc: Sudeep Holla <sudeep.holla@xxxxxxx>
    Cc: Andy Shevchenko <andriy.shevchenko@xxxxxxxxxxxxxxx>
    Cc: Naresh Kamboju <naresh.kamboju@xxxxxxxxxx>
    Cc: Basil Eljuse <Basil.Eljuse@xxxxxxx>
    Cc: Ferry Toth <fntoth@xxxxxxxxx>
    Cc: Arnd Bergmann <arnd@xxxxxxxx>
    Cc: Anders Roxell <anders.roxell@xxxxxxxxxx>
    Cc: linux-pm@xxxxxxxxxxxxxxx
    Reported-by: Nathan Chancellor <nathan@xxxxxxxxxx>
    Reported-by: Sebastian Andrzej Siewior <bigeasy@xxxxxxxxxxxxx>
    Tested-by: Geert Uytterhoeven <geert+renesas@xxxxxxxxx>
    Acked-by: John Stultz <jstultz@xxxxxxxxxx>
    Signed-off-by: Saravana Kannan <saravanak@xxxxxxxxxx>
    Link: https://lore.kernel.org/r/20220526034609.480766-2-saravanak@xxxxxxxxxx
    Signed-off-by: Greg Kroah-Hartman <gregkh@xxxxxxxxxxxxxxxxxxx>
    Reviewed-by: Rafael J. Wysocki <rafael@xxxxxxxxxx>
    Signed-off-by: Linus Torvalds <torvalds@xxxxxxxxxxxxxxxxxxxx>
    Signed-off-by: Sasha Levin <sashal@xxxxxxxxxx>

diff --git a/drivers/base/dd.c b/drivers/base/dd.c
index 4f4e8aedbd2c..f9d9f1ad9215 100644
--- a/drivers/base/dd.c
+++ b/drivers/base/dd.c
@@ -250,7 +250,6 @@ DEFINE_SHOW_ATTRIBUTE(deferred_devs);
 
 int driver_deferred_probe_timeout;
 EXPORT_SYMBOL_GPL(driver_deferred_probe_timeout);
-static DECLARE_WAIT_QUEUE_HEAD(probe_timeout_waitqueue);
 
 static int __init deferred_probe_timeout_setup(char *str)
 {
@@ -302,7 +301,6 @@ static void deferred_probe_timeout_work_func(struct work_struct *work)
 	list_for_each_entry(p, &deferred_probe_pending_list, deferred_probe)
 		dev_info(p->device, "deferred probe pending\n");
 	mutex_unlock(&deferred_probe_mutex);
-	wake_up_all(&probe_timeout_waitqueue);
 }
 static DECLARE_DELAYED_WORK(deferred_probe_timeout_work, deferred_probe_timeout_work_func);
 
@@ -706,9 +704,6 @@ int driver_probe_done(void)
  */
 void wait_for_device_probe(void)
 {
-	/* wait for probe timeout */
-	wait_event(probe_timeout_waitqueue, !driver_deferred_probe_timeout);
-
 	/* wait for the deferred probe workqueue to finish */
 	flush_work(&deferred_probe_work);
 



[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Index of Archives]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux