Commit d5fa1dad authored by Linus Torvalds's avatar Linus Torvalds
Browse files

Merge tag 'driver-core-5.12-rc7' of...

Merge tag 'driver-core-5.12-rc7' of git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/driver-core

Pull driver core fix from Greg KH:
 "Here is a single driver core fix for 5.12-rc7 to resolve a reported
  problem that caused some devices to lockup when booting. It has been
  in linux-next with no reported issues"

* tag 'driver-core-5.12-rc7' of git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/driver-core:
  driver core: Fix locking bug in deferred_probe_timeout_work_func()
parents 445e09e7 eed6e418
Loading
Loading
Loading
Loading
+5 −3
Original line number Original line Diff line number Diff line
@@ -292,14 +292,16 @@ int driver_deferred_probe_check_state(struct device *dev)


static void deferred_probe_timeout_work_func(struct work_struct *work)
static void deferred_probe_timeout_work_func(struct work_struct *work)
{
{
	struct device_private *private, *p;
	struct device_private *p;


	driver_deferred_probe_timeout = 0;
	driver_deferred_probe_timeout = 0;
	driver_deferred_probe_trigger();
	driver_deferred_probe_trigger();
	flush_work(&deferred_probe_work);
	flush_work(&deferred_probe_work);


	list_for_each_entry_safe(private, p, &deferred_probe_pending_list, deferred_probe)
	mutex_lock(&deferred_probe_mutex);
		dev_info(private->device, "deferred probe pending\n");
	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);
	wake_up_all(&probe_timeout_waitqueue);
}
}
static DECLARE_DELAYED_WORK(deferred_probe_timeout_work, deferred_probe_timeout_work_func);
static DECLARE_DELAYED_WORK(deferred_probe_timeout_work, deferred_probe_timeout_work_func);