Skip to content

Commit

Permalink
Bluetooth: Treat LE and ACL links separately on timeout
Browse files Browse the repository at this point in the history
Separate LE and ACL timeouts. Othervise ACL connections
on non LE hw will time out after 45 secs.

Signed-off-by: Ville Tervo <ville.tervo@nokia.com>
Acked-by: Marcel Holtmann <marcel@holtmann.org>
Signed-off-by: Gustavo F. Padovan <padovan@profusion.mobi>
  • Loading branch information
Ville Tervo authored and Gustavo F. Padovan committed Feb 16, 2011
1 parent b92a622 commit bae1f5d
Showing 1 changed file with 7 additions and 7 deletions.
14 changes: 7 additions & 7 deletions net/bluetooth/hci_core.c
Original file line number Diff line number Diff line change
Expand Up @@ -1711,19 +1711,19 @@ static inline struct hci_conn *hci_low_sent(struct hci_dev *hdev, __u8 type, int
return conn;
}

static inline void hci_acl_tx_to(struct hci_dev *hdev)
static inline void hci_link_tx_to(struct hci_dev *hdev, __u8 type)
{
struct hci_conn_hash *h = &hdev->conn_hash;
struct list_head *p;
struct hci_conn *c;

BT_ERR("%s ACL tx timeout", hdev->name);
BT_ERR("%s link tx timeout", hdev->name);

/* Kill stalled connections */
list_for_each(p, &h->list) {
c = list_entry(p, struct hci_conn, list);
if (c->type == ACL_LINK && c->sent) {
BT_ERR("%s killing stalled ACL connection %s",
if (c->type == type && c->sent) {
BT_ERR("%s killing stalled connection %s",
hdev->name, batostr(&c->dst));
hci_acl_disconn(c, 0x13);
}
Expand All @@ -1742,7 +1742,7 @@ static inline void hci_sched_acl(struct hci_dev *hdev)
/* ACL tx timeout must be longer than maximum
* link supervision timeout (40.9 seconds) */
if (!hdev->acl_cnt && time_after(jiffies, hdev->acl_last_tx + HZ * 45))
hci_acl_tx_to(hdev);
hci_link_tx_to(hdev, ACL_LINK);
}

while (hdev->acl_cnt && (conn = hci_low_sent(hdev, ACL_LINK, &quote))) {
Expand Down Expand Up @@ -1812,9 +1812,9 @@ static inline void hci_sched_le(struct hci_dev *hdev)
if (!test_bit(HCI_RAW, &hdev->flags)) {
/* LE tx timeout must be longer than maximum
* link supervision timeout (40.9 seconds) */
if (!hdev->le_cnt &&
if (!hdev->le_cnt && hdev->le_pkts &&
time_after(jiffies, hdev->le_last_tx + HZ * 45))
hci_acl_tx_to(hdev);
hci_link_tx_to(hdev, LE_LINK);
}

cnt = hdev->le_pkts ? hdev->le_cnt : hdev->acl_cnt;
Expand Down

0 comments on commit bae1f5d

Please sign in to comment.