Bluetooth: Remove redundant IRK lookup
authorJohan Hedberg <johan.hedberg@intel.com>
Thu, 3 Jul 2014 16:33:48 +0000 (19:33 +0300)
committerMarcel Holtmann <marcel@holtmann.org>
Thu, 3 Jul 2014 16:45:08 +0000 (18:45 +0200)
When processing passive scanning results we need the resolved identity
address both in check_pending_le_conn() as well as later in
process_adv_report(). Since process_adv_report() calls
check_pending_le_conn() we can simply resolve the IRK earlier in the
function and thereby eliminate a second lookup.

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

index dd70e3a4fea55da8a29ae64922061d67237d337d..643c5a8d40505eab337f34432729597d22ff481a 100644 (file)
@@ -4186,16 +4186,6 @@ static void check_pending_le_conn(struct hci_dev *hdev, bdaddr_t *addr,
                                  u8 addr_type)
 {
        struct hci_conn *conn;
-       struct smp_irk *irk;
-
-       /* If this is a resolvable address, we should resolve it and then
-        * update address and address type variables.
-        */
-       irk = hci_get_irk(hdev, addr, addr_type);
-       if (irk) {
-               addr = &irk->bdaddr;
-               addr_type = irk->addr_type;
-       }
 
        if (!hci_pend_le_conn_lookup(hdev, addr, addr_type))
                return;
@@ -4233,6 +4223,13 @@ static void process_adv_report(struct hci_dev *hdev, u8 type, bdaddr_t *bdaddr,
                struct hci_conn_params *param;
                struct smp_irk *irk;
 
+               /* Check if we need to convert to identity address */
+               irk = hci_get_irk(hdev, bdaddr, bdaddr_type);
+               if (irk) {
+                       bdaddr = &irk->bdaddr;
+                       bdaddr_type = irk->addr_type;
+               }
+
                if (type == LE_ADV_IND || type == LE_ADV_DIRECT_IND)
                        check_pending_le_conn(hdev, bdaddr, bdaddr_type);
 
@@ -4242,13 +4239,6 @@ static void process_adv_report(struct hci_dev *hdev, u8 type, bdaddr_t *bdaddr,
                if (type == LE_ADV_DIRECT_IND)
                        return;
 
-               /* Check if we need to convert to identity address */
-               irk = hci_get_irk(hdev, bdaddr, bdaddr_type);
-               if (irk) {
-                       bdaddr = &irk->bdaddr;
-                       bdaddr_type = irk->addr_type;
-               }
-
                /* The conn params list only contains identity addresses */
                if (!hci_is_identity_address(bdaddr, bdaddr_type))
                        return;