diff options
author | Manish Mandlik <mmandlik@google.com> | 2022-03-12 11:08:58 +0100 |
---|---|---|
committer | Marcel Holtmann <marcel@holtmann.org> | 2022-03-18 17:12:08 +0100 |
commit | 37b63c68194d09d358c8abd73692adf9a6ceaad3 (patch) | |
tree | fc5f54678f4b213a8dde136b41a8277100d3b843 /net/bluetooth | |
parent | Bluetooth: fix incorrect nonblock bitmask in bt_sock_wait_ready() (diff) | |
download | linux-37b63c68194d09d358c8abd73692adf9a6ceaad3.tar.xz linux-37b63c68194d09d358c8abd73692adf9a6ceaad3.zip |
Bluetooth: msft: Clear tracked devices on resume
Clear already tracked devices on system resume. Once the monitors are
reregistered after resume, matched devices in range will be found again.
Signed-off-by: Manish Mandlik <mmandlik@google.com>
Reviewed-by: Miao-chen Chou <mcchou@chromium.org>
Signed-off-by: Marcel Holtmann <marcel@holtmann.org>
Diffstat (limited to 'net/bluetooth')
-rw-r--r-- | net/bluetooth/msft.c | 19 |
1 files changed, 15 insertions, 4 deletions
diff --git a/net/bluetooth/msft.c b/net/bluetooth/msft.c index 9a3d77d3ca86..f43994523b1f 100644 --- a/net/bluetooth/msft.c +++ b/net/bluetooth/msft.c @@ -330,12 +330,13 @@ static void msft_le_cancel_monitor_advertisement_cb(struct hci_dev *hdev, /* Do not free the monitor if it is being removed due to * suspend. It will be re-monitored on resume. */ - if (monitor && !msft->suspending) + if (monitor && !msft->suspending) { hci_free_adv_monitor(hdev, monitor); - /* Clear any monitored devices by this Adv Monitor */ - msft_monitor_device_del(hdev, handle_data->mgmt_handle, NULL, - 0, false); + /* Clear any monitored devices by this Adv Monitor */ + msft_monitor_device_del(hdev, handle_data->mgmt_handle, + NULL, 0, false); + } list_del(&handle_data->list); kfree(handle_data); @@ -522,6 +523,16 @@ int msft_resume_sync(struct hci_dev *hdev) if (!msft || !msft_monitor_supported(hdev)) return 0; + hci_dev_lock(hdev); + + /* Clear already tracked devices on resume. Once the monitors are + * reregistered, devices in range will be found again after resume. + */ + hdev->advmon_pend_notify = false; + msft_monitor_device_del(hdev, 0, NULL, 0, true); + + hci_dev_unlock(hdev); + msft->resuming = true; while (1) { |