Hi Johan, > 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@xxxxxxxxx> > Cc: stable@xxxxxxxxxxxxxxx > --- > include/net/bluetooth/hci.h | 1 + > net/bluetooth/hci_core.c | 12 +++++++----- > 2 files changed, 8 insertions(+), 5 deletions(-) > > diff --git a/include/net/bluetooth/hci.h b/include/net/bluetooth/hci.h > index 30c88b5..ba008d5 100644 > --- a/include/net/bluetooth/hci.h > +++ b/include/net/bluetooth/hci.h > @@ -104,6 +104,7 @@ enum { > enum { > HCI_SETUP, > HCI_AUTO_OFF, > + HCI_RFKILLED, > HCI_MGMT, > HCI_PAIRABLE, > HCI_SERVICE_CACHE, > diff --git a/net/bluetooth/hci_core.c b/net/bluetooth/hci_core.c > index 4dbb6cb..70efa16 100644 > --- a/net/bluetooth/hci_core.c > +++ b/net/bluetooth/hci_core.c > @@ -1148,7 +1148,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; > } the problem here is that we never set the initial value of HCI_RFKILLED properly. To make the patch fully equivalent, we should do that. > @@ -1597,10 +1597,12 @@ static int hci_rfkill_set_block(void *data, bool blocked) > if (test_bit(HCI_USER_CHANNEL, &hdev->dev_flags)) > return -EBUSY; > > - 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; Regards Marcel -- To unsubscribe from this list: send the line "unsubscribe linux-bluetooth" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html