mirror of
https://github.com/torvalds/linux.git
synced 2026-08-02 13:22:02 +02:00
ath10k: fix unregister deadlock when fw probe fails
If firmware probing worker failed it called
device_release_driver() which synchronously called
remove() pci callback. The callback in turn waited
for the worker that called it to finish resulting
in a deadlock.
Waiting for a completion instead of a worker, like
some other drivers do, doesn't seem like the best
idea either:
Syscall Worker
probe_fw()
rmmod
dev_lock()
pci->remove()
wait_for_completion()
complete_all()
device_release_driver()
dev_lock()
[sleep]
free(ar)
dev_unlock()
[resume]
There's no guarantee that Worker upon resuming can
still access any data/code of the module.
Leaving device bound to a driver is not as harmful
as deadlocking so remove the call to
device_release_driver() while a proper solution is
figured out.
Signed-off-by: Michal Kazior <michal.kazior@tieto.com>
Signed-off-by: Kalle Valo <kvalo@qca.qualcomm.com>
This commit is contained in:
parent
7880377012
commit
a491a920ff
|
|
@ -990,7 +990,9 @@ static void ath10k_core_register_work(struct work_struct *work)
|
|||
err_release_fw:
|
||||
ath10k_core_free_firmware_files(ar);
|
||||
err:
|
||||
device_release_driver(ar->dev);
|
||||
/* TODO: It's probably a good idea to release device from the driver
|
||||
* but calling device_release_driver() here will cause a deadlock.
|
||||
*/
|
||||
return;
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user