diff options
Diffstat (limited to 'net')
-rw-r--r-- | net/bluetooth/hci_core.c | 31 |
1 files changed, 13 insertions, 18 deletions
diff --git a/net/bluetooth/hci_core.c b/net/bluetooth/hci_core.c index 9a56a4084482..95eeae59812d 100644 --- a/net/bluetooth/hci_core.c +++ b/net/bluetooth/hci_core.c | |||
@@ -2390,22 +2390,25 @@ static inline int __get_blocks(struct hci_dev *hdev, struct sk_buff *skb) | |||
2390 | return DIV_ROUND_UP(skb->len - HCI_ACL_HDR_SIZE, hdev->block_len); | 2390 | return DIV_ROUND_UP(skb->len - HCI_ACL_HDR_SIZE, hdev->block_len); |
2391 | } | 2391 | } |
2392 | 2392 | ||
2393 | static inline void hci_sched_acl_pkt(struct hci_dev *hdev) | 2393 | static inline void __check_timeout(struct hci_dev *hdev, unsigned int cnt) |
2394 | { | 2394 | { |
2395 | struct hci_chan *chan; | ||
2396 | struct sk_buff *skb; | ||
2397 | int quote; | ||
2398 | unsigned int cnt; | ||
2399 | |||
2400 | if (!test_bit(HCI_RAW, &hdev->flags)) { | 2395 | if (!test_bit(HCI_RAW, &hdev->flags)) { |
2401 | /* ACL tx timeout must be longer than maximum | 2396 | /* ACL tx timeout must be longer than maximum |
2402 | * link supervision timeout (40.9 seconds) */ | 2397 | * link supervision timeout (40.9 seconds) */ |
2403 | if (!hdev->acl_cnt && time_after(jiffies, hdev->acl_last_tx + | 2398 | if (!cnt && time_after(jiffies, hdev->acl_last_tx + |
2404 | msecs_to_jiffies(HCI_ACL_TX_TIMEOUT))) | 2399 | msecs_to_jiffies(HCI_ACL_TX_TIMEOUT))) |
2405 | hci_link_tx_to(hdev, ACL_LINK); | 2400 | hci_link_tx_to(hdev, ACL_LINK); |
2406 | } | 2401 | } |
2402 | } | ||
2407 | 2403 | ||
2408 | cnt = hdev->acl_cnt; | 2404 | static inline void hci_sched_acl_pkt(struct hci_dev *hdev) |
2405 | { | ||
2406 | unsigned int cnt = hdev->acl_cnt; | ||
2407 | struct hci_chan *chan; | ||
2408 | struct sk_buff *skb; | ||
2409 | int quote; | ||
2410 | |||
2411 | __check_timeout(hdev, cnt); | ||
2409 | 2412 | ||
2410 | while (hdev->acl_cnt && | 2413 | while (hdev->acl_cnt && |
2411 | (chan = hci_chan_sent(hdev, ACL_LINK, "e))) { | 2414 | (chan = hci_chan_sent(hdev, ACL_LINK, "e))) { |
@@ -2438,20 +2441,12 @@ static inline void hci_sched_acl_pkt(struct hci_dev *hdev) | |||
2438 | 2441 | ||
2439 | static inline void hci_sched_acl_blk(struct hci_dev *hdev) | 2442 | static inline void hci_sched_acl_blk(struct hci_dev *hdev) |
2440 | { | 2443 | { |
2444 | unsigned int cnt = hdev->block_cnt; | ||
2441 | struct hci_chan *chan; | 2445 | struct hci_chan *chan; |
2442 | struct sk_buff *skb; | 2446 | struct sk_buff *skb; |
2443 | int quote; | 2447 | int quote; |
2444 | unsigned int cnt; | ||
2445 | |||
2446 | if (!test_bit(HCI_RAW, &hdev->flags)) { | ||
2447 | /* ACL tx timeout must be longer than maximum | ||
2448 | * link supervision timeout (40.9 seconds) */ | ||
2449 | if (!hdev->block_cnt && time_after(jiffies, hdev->acl_last_tx + | ||
2450 | msecs_to_jiffies(HCI_ACL_TX_TIMEOUT))) | ||
2451 | hci_link_tx_to(hdev, ACL_LINK); | ||
2452 | } | ||
2453 | 2448 | ||
2454 | cnt = hdev->block_cnt; | 2449 | __check_timeout(hdev, cnt); |
2455 | 2450 | ||
2456 | while (hdev->block_cnt > 0 && | 2451 | while (hdev->block_cnt > 0 && |
2457 | (chan = hci_chan_sent(hdev, ACL_LINK, "e))) { | 2452 | (chan = hci_chan_sent(hdev, ACL_LINK, "e))) { |