extern rwlock_t hci_dev_list_lock;
 extern struct mutex hci_cb_list_lock;
 
+#define hci_dev_set_flag(hdev, nr)    set_bit((nr), &(hdev)->dev_flags)
 #define hci_dev_test_flag(hdev, nr)   test_bit((nr), &(hdev)->dev_flags)
 
 /* ----- HCI interface to upper protocols ----- */
 
         */
        if (hci_dev_test_flag(hdev, HCI_LE_SCAN)) {
                hci_req_add_le_scan_disable(&req);
-               set_bit(HCI_LE_SCAN_INTERRUPTED, &hdev->dev_flags);
+               hci_dev_set_flag(hdev, HCI_LE_SCAN_INTERRUPTED);
        }
 
        hci_req_add_le_create_conn(&req, conn);
 
 
        /* LE-only controllers have LE implicitly enabled */
        if (!lmp_bredr_capable(hdev))
-               set_bit(HCI_LE_ENABLED, &hdev->dev_flags);
+               hci_dev_set_flag(hdev, HCI_LE_ENABLED);
 }
 
 static void hci_setup_event_mask(struct hci_request *req)
                 */
                if (test_bit(HCI_QUIRK_EXTERNAL_CONFIG, &hdev->quirks) ||
                    test_bit(HCI_QUIRK_INVALID_BDADDR, &hdev->quirks))
-                       set_bit(HCI_UNCONFIGURED, &hdev->dev_flags);
+                       hci_dev_set_flag(hdev, HCI_UNCONFIGURED);
 
                /* For an unconfigured controller it is required to
                 * read at least the version information provided by
 
        if (!ret) {
                hci_dev_hold(hdev);
-               set_bit(HCI_RPA_EXPIRED, &hdev->dev_flags);
+               hci_dev_set_flag(hdev, HCI_RPA_EXPIRED);
                set_bit(HCI_UP, &hdev->flags);
                hci_notify(hdev, HCI_DEV_UP);
                if (!hci_dev_test_flag(hdev, HCI_SETUP) &&
         */
        if (!hci_dev_test_flag(hdev, HCI_USER_CHANNEL) &&
            !hci_dev_test_flag(hdev, HCI_MGMT))
-               set_bit(HCI_BONDABLE, &hdev->dev_flags);
+               hci_dev_set_flag(hdev, HCI_BONDABLE);
 
        err = hci_dev_do_open(hdev);
 
 
        if (conn_changed || discov_changed) {
                /* In case this was disabled through mgmt */
-               set_bit(HCI_BREDR_ENABLED, &hdev->dev_flags);
+               hci_dev_set_flag(hdev, HCI_BREDR_ENABLED);
 
                if (hci_dev_test_flag(hdev, HCI_LE_ENABLED))
                        mgmt_update_adv_data(hdev);
                return -EBUSY;
 
        if (blocked) {
-               set_bit(HCI_RFKILLED, &hdev->dev_flags);
+               hci_dev_set_flag(hdev, HCI_RFKILLED);
                if (!hci_dev_test_flag(hdev, HCI_SETUP) &&
                    !hci_dev_test_flag(hdev, HCI_CONFIG))
                        hci_dev_do_close(hdev);
        }
 
        if (hdev->rfkill && rfkill_blocked(hdev->rfkill))
-               set_bit(HCI_RFKILLED, &hdev->dev_flags);
+               hci_dev_set_flag(hdev, HCI_RFKILLED);
 
-       set_bit(HCI_SETUP, &hdev->dev_flags);
-       set_bit(HCI_AUTO_OFF, &hdev->dev_flags);
+       hci_dev_set_flag(hdev, HCI_SETUP);
+       hci_dev_set_flag(hdev, HCI_AUTO_OFF);
 
        if (hdev->dev_type == HCI_BREDR) {
                /* Assume BR/EDR support until proven otherwise (such as
                 * through reading supported features during init.
                 */
-               set_bit(HCI_BREDR_ENABLED, &hdev->dev_flags);
+               hci_dev_set_flag(hdev, HCI_BREDR_ENABLED);
        }
 
        write_lock(&hci_dev_list_lock);
         * and should not be included in normal operation.
         */
        if (test_bit(HCI_QUIRK_RAW_DEVICE, &hdev->quirks))
-               set_bit(HCI_UNCONFIGURED, &hdev->dev_flags);
+               hci_dev_set_flag(hdev, HCI_UNCONFIGURED);
 
        hci_notify(hdev, HCI_DEV_REG);
        hci_dev_hold(hdev);
 
        BT_DBG("%p name %s bus %d", hdev, hdev->name, hdev->bus);
 
-       set_bit(HCI_UNREGISTER, &hdev->dev_flags);
+       hci_dev_set_flag(hdev, HCI_UNREGISTER);
 
        id = hdev->id;
 
 
        if (status)
                return;
 
-       set_bit(HCI_PERIODIC_INQ, &hdev->dev_flags);
+       hci_dev_set_flag(hdev, HCI_PERIODIC_INQ);
 }
 
 static void hci_cc_exit_periodic_inq(struct hci_dev *hdev, struct sk_buff *skb)
                mgmt_ssp_enable_complete(hdev, sent->mode, status);
        else if (!status) {
                if (sent->mode)
-                       set_bit(HCI_SSP_ENABLED, &hdev->dev_flags);
+                       hci_dev_set_flag(hdev, HCI_SSP_ENABLED);
                else
                        clear_bit(HCI_SSP_ENABLED, &hdev->dev_flags);
        }
 
        if (!hci_dev_test_flag(hdev, HCI_MGMT) && !status) {
                if (sent->support)
-                       set_bit(HCI_SC_ENABLED, &hdev->dev_flags);
+                       hci_dev_set_flag(hdev, HCI_SC_ENABLED);
                else
                        clear_bit(HCI_SC_ENABLED, &hdev->dev_flags);
        }
        if (*sent) {
                struct hci_conn *conn;
 
-               set_bit(HCI_LE_ADV, &hdev->dev_flags);
+               hci_dev_set_flag(hdev, HCI_LE_ADV);
 
                conn = hci_conn_hash_lookup_state(hdev, LE_LINK, BT_CONNECT);
                if (conn)
 
        switch (cp->enable) {
        case LE_SCAN_ENABLE:
-               set_bit(HCI_LE_SCAN, &hdev->dev_flags);
+               hci_dev_set_flag(hdev, HCI_LE_SCAN);
                if (hdev->le_scan_type == LE_SCAN_ACTIVE)
                        clear_pending_adv_report(hdev);
                break;
 
        if (sent->le) {
                hdev->features[1][0] |= LMP_HOST_LE;
-               set_bit(HCI_LE_ENABLED, &hdev->dev_flags);
+               hci_dev_set_flag(hdev, HCI_LE_ENABLED);
        } else {
                hdev->features[1][0] &= ~LMP_HOST_LE;
                clear_bit(HCI_LE_ENABLED, &hdev->dev_flags);
         * whenever the encryption procedure fails.
         */
        if (ev->status && conn->type == LE_LINK)
-               set_bit(HCI_RPA_EXPIRED, &hdev->dev_flags);
+               hci_dev_set_flag(hdev, HCI_RPA_EXPIRED);
 
        clear_bit(HCI_CONN_ENCRYPT_PEND, &conn->flags);
 
 
        if (hci_dev_test_flag(hdev, HCI_LE_ADV) ||
            hci_conn_hash_lookup_state(hdev, LE_LINK, BT_CONNECT)) {
                BT_DBG("Deferring random address update");
-               set_bit(HCI_RPA_EXPIRED, &hdev->dev_flags);
+               hci_dev_set_flag(hdev, HCI_RPA_EXPIRED);
                return;
        }
 
 
 
        BT_DBG("");
 
-       set_bit(HCI_RPA_EXPIRED, &hdev->dev_flags);
+       hci_dev_set_flag(hdev, HCI_RPA_EXPIRED);
 
        if (!hci_dev_test_flag(hdev, HCI_ADVERTISING))
                return;
 
        /* Limited discoverable mode */
        if (cp->val == 0x02)
-               set_bit(HCI_LIMITED_DISCOVERABLE, &hdev->dev_flags);
+               hci_dev_set_flag(hdev, HCI_LIMITED_DISCOVERABLE);
        else
                clear_bit(HCI_LIMITED_DISCOVERABLE, &hdev->dev_flags);
 
                changed = true;
 
        if (val) {
-               set_bit(HCI_CONNECTABLE, &hdev->dev_flags);
+               hci_dev_set_flag(hdev, HCI_CONNECTABLE);
        } else {
                clear_bit(HCI_CONNECTABLE, &hdev->dev_flags);
                clear_bit(HCI_DISCOVERABLE, &hdev->dev_flags);
        }
 
        if (hci_dev_test_flag(hdev, HCI_LE_ADV))
-               set_bit(HCI_ADVERTISING, &hdev->dev_flags);
+               hci_dev_set_flag(hdev, HCI_ADVERTISING);
        else
                clear_bit(HCI_ADVERTISING, &hdev->dev_flags);
 
                        changed = !test_and_set_bit(HCI_ADVERTISING,
                                                    &hdev->dev_flags);
                        if (cp->val == 0x02)
-                               set_bit(HCI_ADVERTISING_CONNECTABLE,
-                                       &hdev->dev_flags);
+                               hci_dev_set_flag(hdev, HCI_ADVERTISING_CONNECTABLE);
                        else
                                clear_bit(HCI_ADVERTISING_CONNECTABLE,
                                          &hdev->dev_flags);
        hci_req_init(&req, hdev);
 
        if (cp->val == 0x02)
-               set_bit(HCI_ADVERTISING_CONNECTABLE, &hdev->dev_flags);
+               hci_dev_set_flag(hdev, HCI_ADVERTISING_CONNECTABLE);
        else
                clear_bit(HCI_ADVERTISING_CONNECTABLE, &hdev->dev_flags);
 
                struct mgmt_mode *cp = cmd->param;
 
                if (cp->val)
-                       set_bit(HCI_FAST_CONNECTABLE, &hdev->dev_flags);
+                       hci_dev_set_flag(hdev, HCI_FAST_CONNECTABLE);
                else
                        clear_bit(HCI_FAST_CONNECTABLE, &hdev->dev_flags);
 
        /* We need to flip the bit already here so that update_adv_data
         * generates the correct flags.
         */
-       set_bit(HCI_BREDR_ENABLED, &hdev->dev_flags);
+       hci_dev_set_flag(hdev, HCI_BREDR_ENABLED);
 
        hci_req_init(&req, hdev);
 
                clear_bit(HCI_SC_ONLY, &hdev->dev_flags);
                break;
        case 0x01:
-               set_bit(HCI_SC_ENABLED, &hdev->dev_flags);
+               hci_dev_set_flag(hdev, HCI_SC_ENABLED);
                clear_bit(HCI_SC_ONLY, &hdev->dev_flags);
                break;
        case 0x02:
-               set_bit(HCI_SC_ENABLED, &hdev->dev_flags);
-               set_bit(HCI_SC_ONLY, &hdev->dev_flags);
+               hci_dev_set_flag(hdev, HCI_SC_ENABLED);
+               hci_dev_set_flag(hdev, HCI_SC_ONLY);
                break;
        }
 
                        changed = !test_and_set_bit(HCI_SC_ENABLED,
                                                    &hdev->dev_flags);
                        if (cp->val == 0x02)
-                               set_bit(HCI_SC_ONLY, &hdev->dev_flags);
+                               hci_dev_set_flag(hdev, HCI_SC_ONLY);
                        else
                                clear_bit(HCI_SC_ONLY, &hdev->dev_flags);
                } else {
        /* If user space supports this command it is also expected to
         * handle IRKs. Therefore, set the HCI_RPA_RESOLVING flag.
         */
-       set_bit(HCI_RPA_RESOLVING, &hdev->dev_flags);
+       hci_dev_set_flag(hdev, HCI_RPA_RESOLVING);
 
        if (cp->privacy) {
                changed = !test_and_set_bit(HCI_PRIVACY, &hdev->dev_flags);
                memcpy(hdev->irk, cp->irk, sizeof(hdev->irk));
-               set_bit(HCI_RPA_EXPIRED, &hdev->dev_flags);
+               hci_dev_set_flag(hdev, HCI_RPA_EXPIRED);
        } else {
                changed = test_and_clear_bit(HCI_PRIVACY, &hdev->dev_flags);
                memset(hdev->irk, 0, sizeof(hdev->irk));
                            BDADDR_ANY);
        }
 
-       set_bit(HCI_RPA_RESOLVING, &hdev->dev_flags);
+       hci_dev_set_flag(hdev, HCI_RPA_RESOLVING);
 
        err = mgmt_cmd_complete(sk, hdev->id, MGMT_OP_LOAD_IRKS, 0, NULL, 0);
 
                mgmt_index_removed(hdev);
 
                if (test_and_change_bit(HCI_UNCONFIGURED, &hdev->dev_flags)) {
-                       set_bit(HCI_CONFIG, &hdev->dev_flags);
-                       set_bit(HCI_AUTO_OFF, &hdev->dev_flags);
+                       hci_dev_set_flag(hdev, HCI_CONFIG);
+                       hci_dev_set_flag(hdev, HCI_AUTO_OFF);
 
                        queue_work(hdev->req_workqueue, &hdev->power_on);
                } else {
 
                clear_bit(HCI_UNCONFIGURED, &hdev->dev_flags);
 
-               set_bit(HCI_CONFIG, &hdev->dev_flags);
-               set_bit(HCI_AUTO_OFF, &hdev->dev_flags);
+               hci_dev_set_flag(hdev, HCI_CONFIG);
+               hci_dev_set_flag(hdev, HCI_AUTO_OFF);
 
                queue_work(hdev->req_workqueue, &hdev->power_on);
        }