mirror of
https://github.com/torvalds/linux.git
synced 2024-11-15 00:21:59 +00: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 @@ err_unregister_mac:
|
||||
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