From 8ddb01b6649748a0a4536d39239a4fe635e32167 Mon Sep 17 00:00:00 2001 From: Anuj Jain Date: Tue, 16 May 2023 19:25:19 +0530 Subject: [PATCH] Revert "Bluetooth: Store advertising handle so it can be re-enabled" This reverts commit 7087c4f69487f017722df7d299ef9b7709996b79. Patch revert is needed as it is the cause for GATT Server TCT fail. Change-Id: I55bedbb6b0d44058c13ac06df121c5d936611c74 Signed-off-by: Anuj Jain --- include/net/bluetooth/hci_core.h | 1 - net/bluetooth/hci_event.c | 45 ++++++++++++++-------------------------- 2 files changed, 16 insertions(+), 30 deletions(-) diff --git a/include/net/bluetooth/hci_core.h b/include/net/bluetooth/hci_core.h index c5068fb..d39a8d9 100644 --- a/include/net/bluetooth/hci_core.h +++ b/include/net/bluetooth/hci_core.h @@ -643,7 +643,6 @@ struct hci_conn { __u8 init_addr_type; bdaddr_t resp_addr; __u8 resp_addr_type; - __u8 adv_instance; __u16 handle; __u16 state; __u8 mode; diff --git a/net/bluetooth/hci_event.c b/net/bluetooth/hci_event.c index d219042..003c9fe 100644 --- a/net/bluetooth/hci_event.c +++ b/net/bluetooth/hci_event.c @@ -2529,20 +2529,19 @@ static void hci_cs_disconnect(struct hci_dev *hdev, u8 status) conn = hci_conn_hash_lookup_handle(hdev, __le16_to_cpu(cp->handle)); if (conn) { + u8 type = conn->type; + mgmt_disconnect_failed(hdev, &conn->dst, conn->type, conn->dst_type, status); - if (conn->type == LE_LINK) { - hdev->cur_adv_instance = conn->adv_instance; - hci_req_reenable_advertising(hdev); - } - /* If the disconnection failed for any reason, the upper layer * does not retry to disconnect in current implementation. * Hence, we need to do some basic cleanup here and re-enable * advertising if necessary. */ hci_conn_del(conn); + if (type == LE_LINK) + hci_req_reenable_advertising(hdev); } hci_dev_unlock(hdev); @@ -3087,6 +3086,7 @@ static void hci_disconn_complete_evt(struct hci_dev *hdev, struct sk_buff *skb) struct hci_conn_params *params; struct hci_conn *conn; bool mgmt_connected; + u8 type; BT_DBG("%s status 0x%2.2x", hdev->name, ev->status); @@ -3141,7 +3141,10 @@ static void hci_disconn_complete_evt(struct hci_dev *hdev, struct sk_buff *skb) } } + type = conn->type; + hci_disconn_cfm(conn, ev->reason); + hci_conn_del(conn); /* The suspend notifier is waiting for all devices to disconnect so * clear the bit from pending tasks and inform the wait queue. @@ -3161,12 +3164,8 @@ static void hci_disconn_complete_evt(struct hci_dev *hdev, struct sk_buff *skb) * or until a connection is created or until the Advertising * is timed out due to Directed Advertising." */ - if (conn->type == LE_LINK) { - hdev->cur_adv_instance = conn->adv_instance; + if (type == LE_LINK) hci_req_reenable_advertising(hdev); - } - - hci_conn_del(conn); #ifdef TIZEN_BT if (conn->type == ACL_LINK && !hci_conn_num(hdev, ACL_LINK)) { @@ -5586,13 +5585,6 @@ static void le_conn_complete_evt(struct hci_dev *hdev, u8 status, conn->handle = handle; conn->state = BT_CONFIG; - /* Store current advertising instance as connection advertising instance - * when sotfware rotation is in use so it can be re-enabled when - * disconnected. - */ - if (!ext_adv_capable(hdev)) - conn->adv_instance = hdev->cur_adv_instance; - conn->le_conn_interval = interval; conn->le_conn_latency = latency; conn->le_supv_timeout = supervision_timeout; @@ -5676,13 +5668,13 @@ static void hci_le_ext_adv_term_evt(struct hci_dev *hdev, struct sk_buff *skb) { struct hci_evt_le_ext_adv_set_term *ev = (void *) skb->data; struct hci_conn *conn; - struct adv_info *adv; BT_DBG("%s status 0x%2.2x", hdev->name, ev->status); - adv = hci_find_adv_instance(hdev, ev->handle); - if (ev->status) { + struct adv_info *adv; + + adv = hci_find_adv_instance(hdev, ev->handle); if (!adv) return; @@ -5693,15 +5685,9 @@ static void hci_le_ext_adv_term_evt(struct hci_dev *hdev, struct sk_buff *skb) return; } - if (adv) - adv->enabled = false; - conn = hci_conn_hash_lookup_handle(hdev, __le16_to_cpu(ev->conn_handle)); if (conn) { - /* Store handle in the connection so the correct advertising - * instance can be re-enabled when disconnected. - */ - conn->adv_instance = ev->handle; + struct adv_info *adv_instance; if (hdev->adv_addr_type != ADDR_LE_DEV_RANDOM || bacmp(&conn->resp_addr, BDADDR_ANY)) @@ -5712,8 +5698,9 @@ static void hci_le_ext_adv_term_evt(struct hci_dev *hdev, struct sk_buff *skb) return; } - if (adv) - bacpy(&conn->resp_addr, &adv->random_addr); + adv_instance = hci_find_adv_instance(hdev, ev->handle); + if (adv_instance) + bacpy(&conn->resp_addr, &adv_instance->random_addr); } } -- 2.7.4