[<prev] [next>] [<thread-prev] [day] [month] [year] [list]
Message-ID: <CABBYNZJRTfDUizZ=+JDGT3rZDRJ1HCvYBssrCfgrxOm4U8d-Qw@mail.gmail.com>
Date: Fri, 5 Jan 2024 10:21:59 -0500
From: Luiz Augusto von Dentz <luiz.dentz@...il.com>
To: clancy_shang@....com
Cc: marcel@...tmann.org, johan.hedberg@...il.com,
linux-bluetooth@...r.kernel.org, linux-kernel@...r.kernel.org,
zhongjun.yu@...ctel.com, Clancy Shang <clancy.shang@...ctel.com>
Subject: Re: [PATCH] Bluetooth: hci_sync: Fix BLE devices were unable to
disable the wakeup function
Hi Clancy,
On Thu, Jan 4, 2024 at 9:56 PM <clancy_shang@....com> wrote:
>
> From: Clancy Shang <clancy.shang@...ctel.com>
>
> when BLE master enter suspend, it does not delete the peripheral that
> in acceptlist. so if disable the wakeup function, the BLE master scans with
> basic filter next time, the peripheral can be scanned which is unexpected
>
> Signed-off-by: Clancy Shang <clancy.shang@...ctel.com>
> ---
> net/bluetooth/hci_sync.c | 10 ++++++++++
> 1 file changed, 10 insertions(+)
>
> diff --git a/net/bluetooth/hci_sync.c b/net/bluetooth/hci_sync.c
> index d85a7091a116..abc7f614da5f 100644
> --- a/net/bluetooth/hci_sync.c
> +++ b/net/bluetooth/hci_sync.c
> @@ -2533,6 +2533,7 @@ static u8 hci_update_accept_list_sync(struct hci_dev *hdev)
> struct bdaddr_list *b, *t;
> u8 num_entries = 0;
> bool pend_conn, pend_report;
> + struct hci_conn_params *conn_params;
> u8 filter_policy;
> size_t i, n;
> int err;
> @@ -2585,6 +2586,15 @@ static u8 hci_update_accept_list_sync(struct hci_dev *hdev)
> continue;
> }
>
> + conn_params = hci_conn_params_lookup(hdev, &b->bdaddr, b->bdaddr_type);
> + /* During suspend, only wakeable devices can be in acceptlist */
> + if (conn_params && hdev->suspended &&
> + !(conn_params->flags & HCI_CONN_FLAG_REMOTE_WAKEUP)) {
> + hci_le_del_accept_list_sync(hdev, &b->bdaddr,
> + b->bdaddr_type);
> + continue;
> + }
This might require a lock since that is not a copy of the conn_params
which can be updated concurrently, so perhaps something like the
following is might be safer:
diff --git a/net/bluetooth/hci_sync.c b/net/bluetooth/hci_sync.c
index b3141e3f9cf6..eeb73a54fd26 100644
--- a/net/bluetooth/hci_sync.c
+++ b/net/bluetooth/hci_sync.c
@@ -2206,8 +2206,11 @@ static int hci_le_add_accept_list_sync(struct
hci_dev *hdev,
/* During suspend, only wakeable devices can be in acceptlist */
if (hdev->suspended &&
- !(params->flags & HCI_CONN_FLAG_REMOTE_WAKEUP))
+ !(params->flags & HCI_CONN_FLAG_REMOTE_WAKEUP)) {
+ hci_le_del_accept_list_sync(hdev, ¶ms->bdaddr,
+ params->bdaddr_type);
return 0;
+ }
/* Select filter policy to accept all advertising */
if (*num_entries >= hdev->le_accept_list_size)
> num_entries++;
> }
>
> --
> 2.25.1
>
--
Luiz Augusto von Dentz
Powered by blists - more mailing lists