Bluetooth: Introduce a new HCI_RFKILLED flag
This makes it more convenient to check for rfkill (no need to check for dev->rfkill before calling rfkill_blocked()) and also avoids potential races if the RFKILL state needs to be checked from within the rfkill callback. Signed-off-by: Johan Hedberg <johan.hedberg@intel.com> Cc: stable@vger.kernel.org Acked-by: Marcel Holtmann <marcel@holtmann.org> Signed-off-by: Gustavo Padovan <gustavo.padovan@collabora.co.uk>
This commit is contained in:
committed by
Gustavo Padovan
parent
330b6c1521
commit
5e130367d4
@@ -1146,7 +1146,7 @@ int hci_dev_open(__u16 dev)
|
||||
goto done;
|
||||
}
|
||||
|
||||
if (hdev->rfkill && rfkill_blocked(hdev->rfkill)) {
|
||||
if (test_bit(HCI_RFKILLED, &hdev->dev_flags)) {
|
||||
ret = -ERFKILL;
|
||||
goto done;
|
||||
}
|
||||
@@ -1566,10 +1566,12 @@ static int hci_rfkill_set_block(void *data, bool blocked)
|
||||
|
||||
BT_DBG("%p name %s blocked %d", hdev, hdev->name, blocked);
|
||||
|
||||
if (!blocked)
|
||||
return 0;
|
||||
|
||||
hci_dev_do_close(hdev);
|
||||
if (blocked) {
|
||||
set_bit(HCI_RFKILLED, &hdev->dev_flags);
|
||||
hci_dev_do_close(hdev);
|
||||
} else {
|
||||
clear_bit(HCI_RFKILLED, &hdev->dev_flags);
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
@@ -2209,6 +2211,9 @@ int hci_register_dev(struct hci_dev *hdev)
|
||||
}
|
||||
}
|
||||
|
||||
if (hdev->rfkill && rfkill_blocked(hdev->rfkill))
|
||||
set_bit(HCI_RFKILLED, &hdev->dev_flags);
|
||||
|
||||
set_bit(HCI_SETUP, &hdev->dev_flags);
|
||||
|
||||
if (hdev->dev_type != HCI_AMP)
|
||||
|
Reference in New Issue
Block a user