Bluetooth: Remove useless external function to count controllers
authorMarcel Holtmann <marcel@holtmann.org>
Sat, 5 Oct 2013 18:47:41 +0000 (11:47 -0700)
committerJohan Hedberg <johan.hedberg@intel.com>
Sun, 6 Oct 2013 08:21:09 +0000 (10:21 +0200)
The list of controllers can be counted ahead of time and inline
inside the AMP discover handling. There is no need to export such
a function at all.

In addition just count the AMP controller and only allocated space
for a single mandatory BR/EDR controller. No need to allocate more
space than needed.

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

index 079c5c55c829e867ff148187f69eaa0a186dbc87..db650baf81779688ff0c2c43a032c3557925add0 100644 (file)
@@ -704,19 +704,6 @@ static inline void hci_set_drvdata(struct hci_dev *hdev, void *data)
        dev_set_drvdata(&hdev->dev, data);
 }
 
-/* hci_dev_list shall be locked */
-static inline uint8_t __hci_num_ctrl(void)
-{
-       uint8_t count = 0;
-       struct list_head *p;
-
-       list_for_each(p, &hci_dev_list) {
-               count++;
-       }
-
-       return count;
-}
-
 struct hci_dev *hci_dev_get(int index);
 struct hci_dev *hci_get_route(bdaddr_t *dst, bdaddr_t *src);
 
index eb0f05e09cd59a9513dfecdca6a693aecc0312fc..a6e45e177b3d9e0cc4257a07bb074771a8ed5cc5 100644 (file)
@@ -129,6 +129,7 @@ static int a2mp_discover_req(struct amp_mgr *mgr, struct sk_buff *skb,
        struct a2mp_discov_rsp *rsp;
        u16 ext_feat;
        u8 num_ctrl;
+       struct hci_dev *hdev;
 
        if (len < sizeof(*req))
                return -EINVAL;
@@ -152,7 +153,14 @@ static int a2mp_discover_req(struct amp_mgr *mgr, struct sk_buff *skb,
 
        read_lock(&hci_dev_list_lock);
 
-       num_ctrl = __hci_num_ctrl();
+       /* at minimum the BR/EDR needs to be listed */
+       num_ctrl = 1;
+
+       list_for_each_entry(hdev, &hci_dev_list, list) {
+               if (hdev->dev_type == HCI_AMP)
+                       num_ctrl++;
+       }
+
        len = num_ctrl * sizeof(struct a2mp_cl) + sizeof(*rsp);
        rsp = kmalloc(len, GFP_ATOMIC);
        if (!rsp) {