aboutsummaryrefslogtreecommitdiffstats
path: root/net/bluetooth/hci_core.c
diff options
context:
space:
mode:
authorMarcel Holtmann <marcel@holtmann.org>2014-12-05 05:45:23 -0500
committerJohan Hedberg <johan.hedberg@intel.com>2014-12-05 06:13:01 -0500
commitee3c3ca5ba2fdff10f3f71b4f9923807a0983564 (patch)
tree8424d397b11f8543c978288a97e9da281019f589 /net/bluetooth/hci_core.c
parent22078800c337cf374d58b63a5b1f670d470e6dbf (diff)
Bluetooth: Clear discovery filter before starting background scan
Currently the discovery filter information are only cleared when the actual discovery procedure has been stopped. To make sure that none of the filters interfere with the background scanning and its device found event reporting, clear the filter before starting background scanning. This means that the discovery filter is now cleared before either Start Discovery, Start Service Discovery or background scanning. Signed-off-by: Marcel Holtmann <marcel@holtmann.org> Signed-off-by: Johan Hedberg <johan.hedberg@intel.com>
Diffstat (limited to 'net/bluetooth/hci_core.c')
-rw-r--r--net/bluetooth/hci_core.c20
1 files changed, 9 insertions, 11 deletions
diff --git a/net/bluetooth/hci_core.c b/net/bluetooth/hci_core.c
index 8b3f839ba826..523700eefdd1 100644
--- a/net/bluetooth/hci_core.c
+++ b/net/bluetooth/hci_core.c
@@ -2052,17 +2052,6 @@ void hci_discovery_set_state(struct hci_dev *hdev, int state)
2052 case DISCOVERY_STOPPED: 2052 case DISCOVERY_STOPPED:
2053 hci_update_background_scan(hdev); 2053 hci_update_background_scan(hdev);
2054 2054
2055 /* Reset RSSI and UUID filters to ensure Start Discovery
2056 * and Start Service Discovery operate properly no matter
2057 * which one started the previous discovery.
2058 *
2059 * While the Start Discovery and Start Service Discovery
2060 * operations will set proper values for RSSI and UUID
2061 * count, it is important to actually free the allocated
2062 * list of UUIDs here.
2063 */
2064 hci_discovery_filter_clear(hdev);
2065
2066 if (old_state != DISCOVERY_STARTING) 2055 if (old_state != DISCOVERY_STARTING)
2067 mgmt_discovering(hdev, 0); 2056 mgmt_discovering(hdev, 0);
2068 break; 2057 break;
@@ -5679,6 +5668,15 @@ void hci_update_background_scan(struct hci_dev *hdev)
5679 if (hdev->discovery.state != DISCOVERY_STOPPED) 5668 if (hdev->discovery.state != DISCOVERY_STOPPED)
5680 return; 5669 return;
5681 5670
5671 /* Reset RSSI and UUID filters when starting background scanning
5672 * since these filters are meant for service discovery only.
5673 *
5674 * The Start Discovery and Start Service Discovery operations
5675 * ensure to set proper values for RSSI threshold and UUID
5676 * filter list. So it is safe to just reset them here.
5677 */
5678 hci_discovery_filter_clear(hdev);
5679
5682 hci_req_init(&req, hdev); 5680 hci_req_init(&req, hdev);
5683 5681
5684 if (list_empty(&hdev->pend_le_conns) && 5682 if (list_empty(&hdev->pend_le_conns) &&