Bluetooth: Add identity address check in param lookup functions
authorJohan Hedberg <johan.hedberg@intel.com>
Thu, 3 Jul 2014 16:33:51 +0000 (19:33 +0300)
committerMarcel Holtmann <marcel@holtmann.org>
Thu, 3 Jul 2014 16:45:09 +0000 (18:45 +0200)
Since we only store entries with identity addresses in the
le_conn_params and pend_le_conns lists we can avoid unnecessary lookups
by checking for an identity address before diving into the lists
themselves.

Signed-off-by: Johan Hedberg <johan.hedberg@intel.com>
Signed-off-by: Marcel Holtmann <marcel@holtmann.org>
net/bluetooth/hci_core.c
net/bluetooth/hci_event.c

index 8882a6cd287600eebce8fb38513de58978b6c002..750f969df8db43184513fd52b940855c8975998c 100644 (file)
@@ -3399,6 +3399,10 @@ struct hci_conn_params *hci_conn_params_lookup(struct hci_dev *hdev,
 {
        struct hci_conn_params *params;
 
+       /* The conn params list only contains identity addresses */
+       if (!hci_is_identity_address(addr, addr_type))
+               return NULL;
+
        list_for_each_entry(params, &hdev->le_conn_params, list) {
                if (bacmp(&params->addr, addr) == 0 &&
                    params->addr_type == addr_type) {
@@ -3432,6 +3436,10 @@ struct hci_conn_params *hci_pend_le_conn_lookup(struct hci_dev *hdev,
 {
        struct hci_conn_params *param;
 
+       /* The list only contains identity addresses */
+       if (!hci_is_identity_address(addr, addr_type))
+               return NULL;
+
        list_for_each_entry(param, &hdev->pend_le_conns, pend_le_conn) {
                if (bacmp(&param->addr, addr) == 0 &&
                    param->addr_type == addr_type)
index e0b439d4f9588c383cf8824842030051badcc2a8..20317e516e740895be0355d319ff3458126d8389 100644 (file)
@@ -4246,10 +4246,6 @@ static void process_adv_report(struct hci_dev *hdev, u8 type, bdaddr_t *bdaddr,
                if (type == LE_ADV_DIRECT_IND)
                        return;
 
-               /* The conn params list only contains identity addresses */
-               if (!hci_is_identity_address(bdaddr, bdaddr_type))
-                       return;
-
                param = hci_conn_params_lookup(hdev, bdaddr, bdaddr_type);
                if (!param || param->auto_connect != HCI_AUTO_CONN_REPORT)
                        return;