]> git.baikalelectronics.ru Git - kernel.git/commitdiff
Bluetooth: Remove update_scan hci_request dependancy
authorBrian Gix <brian.gix@intel.com>
Thu, 21 Jul 2022 23:22:24 +0000 (16:22 -0700)
committerLuiz Augusto von Dentz <luiz.von.dentz@intel.com>
Fri, 22 Jul 2022 19:55:40 +0000 (12:55 -0700)
This removes the remaining calls to HCI_OP_WRITE_SCAN_ENABLE from
hci_request call chains, and converts them to hci_sync calls.

Signed-off-by: Brian Gix <brian.gix@intel.com>
Signed-off-by: Luiz Augusto von Dentz <luiz.von.dentz@intel.com>
include/net/bluetooth/hci_core.h
include/net/bluetooth/hci_sync.h
net/bluetooth/hci_event.c
net/bluetooth/hci_request.c
net/bluetooth/hci_request.h
net/bluetooth/hci_sync.c
net/bluetooth/mgmt.c

index 83bbeffe71e9794ef4f05002f97b39a8593fa4b4..df65b107b596b33099f26ef73a19b936df2bee56 100644 (file)
@@ -517,7 +517,6 @@ struct hci_dev {
        struct work_struct      cmd_work;
        struct work_struct      tx_work;
 
-       struct work_struct      scan_update;
        struct delayed_work     le_scan_disable;
        struct delayed_work     le_scan_restart;
 
index 544e949b5dbf5dbea93e76587bf79a4abe97842b..5c4d4cace9c3436086fbb8db69c72316a1d2a8d2 100644 (file)
@@ -78,6 +78,7 @@ int hci_read_clock_sync(struct hci_dev *hdev, struct hci_cp_read_clock *cp);
 
 int hci_write_fast_connectable_sync(struct hci_dev *hdev, bool enable);
 int hci_update_scan_sync(struct hci_dev *hdev);
+int hci_update_scan(struct hci_dev *hdev);
 
 int hci_write_le_host_supported_sync(struct hci_dev *hdev, u8 le, u8 simul);
 int hci_remove_ext_adv_instance_sync(struct hci_dev *hdev, u8 instance,
index 34bec7446d005ea51ae198e08e2ca14edaf6951f..b32ca92fc6929cf8d425fa50f7f5d3411b041b3c 100644 (file)
@@ -3173,7 +3173,7 @@ static void hci_conn_complete_evt(struct hci_dev *hdev, void *data,
                        hci_send_cmd(hdev, HCI_OP_READ_REMOTE_FEATURES,
                                     sizeof(cp), &cp);
 
-                       hci_req_update_scan(hdev);
+                       hci_update_scan(hdev);
                }
 
                /* Set packet type for incoming connection */
@@ -3371,7 +3371,7 @@ static void hci_disconn_complete_evt(struct hci_dev *hdev, void *data,
                if (test_and_clear_bit(HCI_CONN_FLUSH_KEY, &conn->flags))
                        hci_remove_link_key(hdev, &conn->dst);
 
-               hci_req_update_scan(hdev);
+               hci_update_scan(hdev);
        }
 
        params = hci_conn_params_lookup(hdev, &conn->dst, conn->dst_type);
index 5a01bf99750019e48a34c74c57db9c993505aa8a..0ce486afbf438fe5d490a1bccaa7736550b6b330 100644 (file)
@@ -1835,21 +1835,6 @@ void __hci_req_update_scan(struct hci_request *req)
        hci_req_add(req, HCI_OP_WRITE_SCAN_ENABLE, 1, &scan);
 }
 
-static int update_scan(struct hci_request *req, unsigned long opt)
-{
-       hci_dev_lock(req->hdev);
-       __hci_req_update_scan(req);
-       hci_dev_unlock(req->hdev);
-       return 0;
-}
-
-static void scan_update_work(struct work_struct *work)
-{
-       struct hci_dev *hdev = container_of(work, struct hci_dev, scan_update);
-
-       hci_req_sync(hdev, update_scan, 0, HCI_CMD_TIMEOUT, NULL);
-}
-
 static u8 get_service_classes(struct hci_dev *hdev)
 {
        struct bt_uuid *uuid;
@@ -2348,7 +2333,6 @@ static void discov_off(struct work_struct *work)
 
 void hci_request_setup(struct hci_dev *hdev)
 {
-       INIT_WORK(&hdev->scan_update, scan_update_work);
        INIT_DELAYED_WORK(&hdev->discov_off, discov_off);
        INIT_DELAYED_WORK(&hdev->le_scan_disable, le_scan_disable_work);
        INIT_DELAYED_WORK(&hdev->le_scan_restart, le_scan_restart_work);
@@ -2360,7 +2344,6 @@ void hci_request_cancel_all(struct hci_dev *hdev)
 {
        __hci_cmd_sync_cancel(hdev, ENODEV);
 
-       cancel_work_sync(&hdev->scan_update);
        cancel_delayed_work_sync(&hdev->discov_off);
        cancel_delayed_work_sync(&hdev->le_scan_disable);
        cancel_delayed_work_sync(&hdev->le_scan_restart);
index 2b2fba278510b6e2f2c8cf8fc6dc267ce652d426..821244ad9d73bb93ec2aa0c0963c4c7ef8fd55a2 100644 (file)
@@ -108,11 +108,6 @@ bool hci_req_stop_discovery(struct hci_request *req);
 
 int hci_req_configure_datapath(struct hci_dev *hdev, struct bt_codec *codec);
 
-static inline void hci_req_update_scan(struct hci_dev *hdev)
-{
-       queue_work(hdev->req_workqueue, &hdev->scan_update);
-}
-
 void __hci_req_update_scan(struct hci_request *req);
 
 int hci_update_random_address(struct hci_request *req, bool require_privacy,
index 1fbeee970aa7188f2559500f81f092e816866a92..46a04488d614d4c066a91981e947b675c6ddb7cd 100644 (file)
@@ -2236,6 +2236,16 @@ int hci_update_passive_scan_sync(struct hci_dev *hdev)
        return err;
 }
 
+static int update_scan_sync(struct hci_dev *hdev, void *data)
+{
+       return hci_update_scan_sync(hdev);
+}
+
+int hci_update_scan(struct hci_dev *hdev)
+{
+       return hci_cmd_sync_queue(hdev, update_scan_sync, NULL, NULL);
+}
+
 static int update_passive_scan_sync(struct hci_dev *hdev, void *data)
 {
        return hci_update_passive_scan_sync(hdev);
index aa651129b71431fd2b7a7401982aec8f60e5ea89..153206763f002b84337793fd1a0ae0bfde3a7975 100644 (file)
@@ -1611,7 +1611,7 @@ static int set_connectable_update_settings(struct hci_dev *hdev,
                return err;
 
        if (changed) {
-               hci_req_update_scan(hdev);
+               hci_update_scan(hdev);
                hci_update_passive_scan(hdev);
                return new_settings(hdev, sk);
        }
@@ -7081,7 +7081,7 @@ static int add_device(struct sock *sk, struct hci_dev *hdev,
                if (err)
                        goto unlock;
 
-               hci_req_update_scan(hdev);
+               hci_update_scan(hdev);
 
                goto added;
        }
@@ -7193,7 +7193,7 @@ static int remove_device(struct sock *sk, struct hci_dev *hdev,
                                goto unlock;
                        }
 
-                       hci_req_update_scan(hdev);
+                       hci_update_scan(hdev);
 
                        device_removed(sk, hdev, &cp->addr.bdaddr,
                                       cp->addr.type);
@@ -7257,7 +7257,7 @@ static int remove_device(struct sock *sk, struct hci_dev *hdev,
                        kfree(b);
                }
 
-               hci_req_update_scan(hdev);
+               hci_update_scan(hdev);
 
                list_for_each_entry_safe(p, tmp, &hdev->le_conn_params, list) {
                        if (p->auto_connect == HCI_AUTO_CONN_DISABLED)