• M
    ath10k: fix unregister deadlock when fw probe fails · a491a920
    Michal Kazior 提交于
    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: NMichal Kazior <michal.kazior@tieto.com>
    Signed-off-by: NKalle Valo <kvalo@qca.qualcomm.com>
    a491a920
core.c 25.2 KB