diff options
author | Gustavo F. Padovan <padovan@profusion.mobi> | 2011-06-17 12:03:21 -0400 |
---|---|---|
committer | Gustavo F. Padovan <padovan@profusion.mobi> | 2011-12-18 14:07:54 -0500 |
commit | 19c40e3bcaf2d969f5d4ee85bbe1330b54d36d9c (patch) | |
tree | f854037b80d82f59a9b505d2643102b2a51f0629 /include | |
parent | 09fd0de5bd8f8ef3317e5365f92f1a13dcd89aa9 (diff) |
Bluetooth: Use delayed_work for connection timeout
Bluetooth rx task runs now in a workqueue, so it a good approach run any
timer that share locking with process context code also in a workqueue.
Acked-by: Marcel Holtmann <marcel@holtmann.org>
Signed-off-by: Gustavo F. Padovan <padovan@profusion.mobi>
Diffstat (limited to 'include')
-rw-r--r-- | include/net/bluetooth/hci_core.h | 8 |
1 files changed, 5 insertions, 3 deletions
diff --git a/include/net/bluetooth/hci_core.h b/include/net/bluetooth/hci_core.h index e7dbe597a4bb..d91590850429 100644 --- a/include/net/bluetooth/hci_core.h +++ b/include/net/bluetooth/hci_core.h | |||
@@ -297,7 +297,7 @@ struct hci_conn { | |||
297 | struct sk_buff_head data_q; | 297 | struct sk_buff_head data_q; |
298 | struct list_head chan_list; | 298 | struct list_head chan_list; |
299 | 299 | ||
300 | struct timer_list disc_timer; | 300 | struct delayed_work disc_work; |
301 | struct timer_list idle_timer; | 301 | struct timer_list idle_timer; |
302 | struct timer_list auto_accept_timer; | 302 | struct timer_list auto_accept_timer; |
303 | 303 | ||
@@ -517,7 +517,7 @@ void hci_conn_put_device(struct hci_conn *conn); | |||
517 | static inline void hci_conn_hold(struct hci_conn *conn) | 517 | static inline void hci_conn_hold(struct hci_conn *conn) |
518 | { | 518 | { |
519 | atomic_inc(&conn->refcnt); | 519 | atomic_inc(&conn->refcnt); |
520 | del_timer(&conn->disc_timer); | 520 | cancel_delayed_work_sync(&conn->disc_work); |
521 | } | 521 | } |
522 | 522 | ||
523 | static inline void hci_conn_put(struct hci_conn *conn) | 523 | static inline void hci_conn_put(struct hci_conn *conn) |
@@ -536,7 +536,9 @@ static inline void hci_conn_put(struct hci_conn *conn) | |||
536 | } else { | 536 | } else { |
537 | timeo = msecs_to_jiffies(10); | 537 | timeo = msecs_to_jiffies(10); |
538 | } | 538 | } |
539 | mod_timer(&conn->disc_timer, jiffies + timeo); | 539 | cancel_delayed_work_sync(&conn->disc_work); |
540 | queue_delayed_work(conn->hdev->workqueue, | ||
541 | &conn->disc_work, jiffies + timeo); | ||
540 | } | 542 | } |
541 | } | 543 | } |
542 | 544 | ||