Skip to content

Commit

Permalink
Bluetooth: make use of connection number to optimize the scheduler
Browse files Browse the repository at this point in the history
This checks if there is any existing connection according to its type
before start iterating in the list and immediately stop iterating when
reaching the number of connections.

Signed-off-by: Luiz Augusto von Dentz <[email protected]>
Signed-off-by: Gustavo F. Padovan <[email protected]>
  • Loading branch information
Vudentz authored and Gustavo F. Padovan committed Sep 21, 2011
1 parent da3ba88 commit 52087a7
Show file tree
Hide file tree
Showing 2 changed files with 31 additions and 0 deletions.
16 changes: 16 additions & 0 deletions include/net/bluetooth/hci_core.h
Original file line number Diff line number Diff line change
Expand Up @@ -395,6 +395,22 @@ static inline void hci_conn_hash_del(struct hci_dev *hdev, struct hci_conn *c)
}
}

static inline unsigned int hci_conn_num(struct hci_dev *hdev, __u8 type)
{
struct hci_conn_hash *h = &hdev->conn_hash;
switch (type) {
case ACL_LINK:
return h->acl_num;
case LE_LINK:
return h->le_num;
case SCO_LINK:
case ESCO_LINK:
return h->sco_num;
default:
return 0;
}
}

static inline struct hci_conn *hci_conn_hash_lookup_handle(struct hci_dev *hdev,
__u16 handle)
{
Expand Down
15 changes: 15 additions & 0 deletions net/bluetooth/hci_core.c
Original file line number Diff line number Diff line change
Expand Up @@ -2074,6 +2074,9 @@ static inline struct hci_conn *hci_low_sent(struct hci_dev *hdev, __u8 type, int
min = c->sent;
conn = c;
}

if (hci_conn_num(hdev, type) == num)
break;
}

if (conn) {
Expand Down Expand Up @@ -2131,6 +2134,9 @@ static inline void hci_sched_acl(struct hci_dev *hdev)

BT_DBG("%s", hdev->name);

if (!hci_conn_num(hdev, ACL_LINK))
return;

if (!test_bit(HCI_RAW, &hdev->flags)) {
/* ACL tx timeout must be longer than maximum
* link supervision timeout (40.9 seconds) */
Expand Down Expand Up @@ -2162,6 +2168,9 @@ static inline void hci_sched_sco(struct hci_dev *hdev)

BT_DBG("%s", hdev->name);

if (!hci_conn_num(hdev, SCO_LINK))
return;

while (hdev->sco_cnt && (conn = hci_low_sent(hdev, SCO_LINK, &quote))) {
while (quote-- && (skb = skb_dequeue(&conn->data_q))) {
BT_DBG("skb %p len %d", skb, skb->len);
Expand All @@ -2182,6 +2191,9 @@ static inline void hci_sched_esco(struct hci_dev *hdev)

BT_DBG("%s", hdev->name);

if (!hci_conn_num(hdev, ESCO_LINK))
return;

while (hdev->sco_cnt && (conn = hci_low_sent(hdev, ESCO_LINK, &quote))) {
while (quote-- && (skb = skb_dequeue(&conn->data_q))) {
BT_DBG("skb %p len %d", skb, skb->len);
Expand All @@ -2202,6 +2214,9 @@ static inline void hci_sched_le(struct hci_dev *hdev)

BT_DBG("%s", hdev->name);

if (!hci_conn_num(hdev, LE_LINK))
return;

if (!test_bit(HCI_RAW, &hdev->flags)) {
/* LE tx timeout must be longer than maximum
* link supervision timeout (40.9 seconds) */
Expand Down

0 comments on commit 52087a7

Please sign in to comment.