|
@@ -666,6 +666,11 @@ int hci_dev_open(__u16 dev)
|
|
|
|
|
|
hci_req_lock(hdev);
|
|
hci_req_lock(hdev);
|
|
|
|
|
|
|
|
+ if (test_bit(HCI_UNREGISTER, &hdev->dev_flags)) {
|
|
|
|
+ ret = -ENODEV;
|
|
|
|
+ goto done;
|
|
|
|
+ }
|
|
|
|
+
|
|
if (hdev->rfkill && rfkill_blocked(hdev->rfkill)) {
|
|
if (hdev->rfkill && rfkill_blocked(hdev->rfkill)) {
|
|
ret = -ERFKILL;
|
|
ret = -ERFKILL;
|
|
goto done;
|
|
goto done;
|
|
@@ -1850,6 +1855,8 @@ void hci_unregister_dev(struct hci_dev *hdev)
|
|
|
|
|
|
BT_DBG("%p name %s bus %d", hdev, hdev->name, hdev->bus);
|
|
BT_DBG("%p name %s bus %d", hdev, hdev->name, hdev->bus);
|
|
|
|
|
|
|
|
+ set_bit(HCI_UNREGISTER, &hdev->dev_flags);
|
|
|
|
+
|
|
write_lock(&hci_dev_list_lock);
|
|
write_lock(&hci_dev_list_lock);
|
|
list_del(&hdev->list);
|
|
list_del(&hdev->list);
|
|
write_unlock(&hci_dev_list_lock);
|
|
write_unlock(&hci_dev_list_lock);
|