summaryrefslogtreecommitdiff
path: root/net
diff options
context:
space:
mode:
authorAnton Khirnov <anton@khirnov.net>2024-07-29 21:58:10 +0200
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>2024-08-14 15:34:03 +0200
commit09e309f3962e8ef9bf103d0f0dba0c838dc88813 (patch)
treeb5058f3a7db4b88e5772bfd3af8c4c1c2d1d19fd /net
parent699ca84febb9ffe3f5bf4e51640e4fd3aceb2338 (diff)
downloadlinux-09e309f3962e8ef9bf103d0f0dba0c838dc88813.tar.gz
linux-09e309f3962e8ef9bf103d0f0dba0c838dc88813.tar.bz2
linux-09e309f3962e8ef9bf103d0f0dba0c838dc88813.zip
Bluetooth: hci_sync: avoid dup filtering when passive scanning with adv monitor
[ Upstream commit b5431dc2803ac159d6d4645ae237d15c3cb252db ] This restores behaviour (including the comment) from now-removed hci_request.c, and also matches existing code for active scanning. Without this, the duplicates filter is always active when passive scanning, which makes it impossible to work with devices that send nontrivial dynamic data in their advertisement reports. Fixes: abfeea476c68 ("Bluetooth: hci_sync: Convert MGMT_OP_START_DISCOVERY") Signed-off-by: Anton Khirnov <anton@khirnov.net> Signed-off-by: Luiz Augusto von Dentz <luiz.von.dentz@intel.com> Signed-off-by: Sasha Levin <sashal@kernel.org>
Diffstat (limited to 'net')
-rw-r--r--net/bluetooth/hci_sync.c14
1 files changed, 14 insertions, 0 deletions
diff --git a/net/bluetooth/hci_sync.c b/net/bluetooth/hci_sync.c
index 2f26147fdf3c..4e90bd722e7b 100644
--- a/net/bluetooth/hci_sync.c
+++ b/net/bluetooth/hci_sync.c
@@ -2972,6 +2972,20 @@ static int hci_passive_scan_sync(struct hci_dev *hdev)
} else if (hci_is_adv_monitoring(hdev)) {
window = hdev->le_scan_window_adv_monitor;
interval = hdev->le_scan_int_adv_monitor;
+
+ /* Disable duplicates filter when scanning for advertisement
+ * monitor for the following reasons.
+ *
+ * For HW pattern filtering (ex. MSFT), Realtek and Qualcomm
+ * controllers ignore RSSI_Sampling_Period when the duplicates
+ * filter is enabled.
+ *
+ * For SW pattern filtering, when we're not doing interleaved
+ * scanning, it is necessary to disable duplicates filter,
+ * otherwise hosts can only receive one advertisement and it's
+ * impossible to know if a peer is still in range.
+ */
+ filter_dups = LE_SCAN_FILTER_DUP_DISABLE;
} else {
window = hdev->le_scan_window;
interval = hdev->le_scan_interval;