|
@@ -2354,6 +2354,17 @@ done:
|
|
return err;
|
|
return err;
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+/* This function requires the caller holds hdev->lock */
|
|
|
|
+static void hci_pend_le_actions_clear(struct hci_dev *hdev)
|
|
|
|
+{
|
|
|
|
+ struct hci_conn_params *p;
|
|
|
|
+
|
|
|
|
+ list_for_each_entry(p, &hdev->le_conn_params, list)
|
|
|
|
+ list_del_init(&p->action);
|
|
|
|
+
|
|
|
|
+ BT_DBG("All LE pending actions cleared");
|
|
|
|
+}
|
|
|
|
+
|
|
static int hci_dev_do_close(struct hci_dev *hdev)
|
|
static int hci_dev_do_close(struct hci_dev *hdev)
|
|
{
|
|
{
|
|
BT_DBG("%s %p", hdev->name, hdev);
|
|
BT_DBG("%s %p", hdev->name, hdev);
|
|
@@ -2391,7 +2402,7 @@ static int hci_dev_do_close(struct hci_dev *hdev)
|
|
hci_dev_lock(hdev);
|
|
hci_dev_lock(hdev);
|
|
hci_inquiry_cache_flush(hdev);
|
|
hci_inquiry_cache_flush(hdev);
|
|
hci_conn_hash_flush(hdev);
|
|
hci_conn_hash_flush(hdev);
|
|
- hci_pend_le_conns_clear(hdev);
|
|
|
|
|
|
+ hci_pend_le_actions_clear(hdev);
|
|
hci_dev_unlock(hdev);
|
|
hci_dev_unlock(hdev);
|
|
|
|
|
|
hci_notify(hdev, HCI_DEV_DOWN);
|
|
hci_notify(hdev, HCI_DEV_DOWN);
|
|
@@ -3460,16 +3471,6 @@ void hci_pend_le_conn_add(struct hci_dev *hdev, struct hci_conn_params *params)
|
|
hci_update_background_scan(hdev);
|
|
hci_update_background_scan(hdev);
|
|
}
|
|
}
|
|
|
|
|
|
-/* This function requires the caller holds hdev->lock */
|
|
|
|
-void hci_pend_le_conns_clear(struct hci_dev *hdev)
|
|
|
|
-{
|
|
|
|
- while (!list_empty(&hdev->pend_le_conns))
|
|
|
|
- list_del_init(hdev->pend_le_conns.next);
|
|
|
|
-
|
|
|
|
- BT_DBG("All LE pending connections cleared");
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
-/* This function requires the caller holds hdev->lock */
|
|
|
|
struct hci_conn_params *hci_conn_params_add(struct hci_dev *hdev,
|
|
struct hci_conn_params *hci_conn_params_add(struct hci_dev *hdev,
|
|
bdaddr_t *addr, u8 addr_type)
|
|
bdaddr_t *addr, u8 addr_type)
|
|
{
|
|
{
|