diff options
author | Ian Molton <ian@mnementh.co.uk> | 2017-07-08 14:43:34 +0100 |
---|---|---|
committer | Marcel Holtmann <marcel@holtmann.org> | 2017-07-20 11:18:35 +0200 |
commit | ca2eae7d25a1d3c7c675808fa907188e6a099537 (patch) | |
tree | 42c6f965f42f5fc4e542a3d8be7b5c8f2be98440 /drivers/bluetooth | |
parent | 2193a9800b1d6ae771539e1cdae1e7340b9d90ea (diff) | |
download | linux-ca2eae7d25a1d3c7c675808fa907188e6a099537.tar.bz2 |
Bluetooth: hci_nokia: prevent crash on module removal
Only cancel any ongoing work after making sure, that no new work
can be scheduled. This fixes a race condition in the remove handler.
Signed-off-by: Ian Molton <ian@mnementh.co.uk>
Reviewed-by: Sebastian Reichel <sebastian.reichel@collabora.co.uk>
Signed-off-by: Marcel Holtmann <marcel@holtmann.org>
Diffstat (limited to 'drivers/bluetooth')
-rw-r--r-- | drivers/bluetooth/hci_nokia.c | 4 |
1 files changed, 3 insertions, 1 deletions
diff --git a/drivers/bluetooth/hci_nokia.c b/drivers/bluetooth/hci_nokia.c index 181a15b549e5..bc1f4496583e 100644 --- a/drivers/bluetooth/hci_nokia.c +++ b/drivers/bluetooth/hci_nokia.c @@ -770,10 +770,12 @@ static void nokia_bluetooth_serdev_remove(struct serdev_device *serdev) struct hci_uart *hu = &btdev->hu; struct hci_dev *hdev = hu->hdev; - cancel_work_sync(&hu->write_work); hci_unregister_dev(hdev); hci_free_dev(hdev); + + cancel_work_sync(&hu->write_work); + hu->proto->close(hu); pm_runtime_disable(&btdev->serdev->dev); |