Bluetooth: Convert L2CAP ident spinlock into a mutex
The spinlock protecting the L2CAP ident number can be converted into a mutex since the whole processing is run in a workqueue. So instead of using a spinlock, just use a mutex here. Signed-off-by: Marcel Holtmann <marcel@holtmann.org> Signed-off-by: Johan Hedberg <johan.hedberg@intel.com>
This commit is contained in:
parent
e03ab5199d
commit
5a54e7c85b
2 changed files with 4 additions and 5 deletions
|
@ -625,11 +625,10 @@ struct l2cap_conn {
|
||||||
|
|
||||||
struct delayed_work info_timer;
|
struct delayed_work info_timer;
|
||||||
|
|
||||||
spinlock_t lock;
|
|
||||||
|
|
||||||
struct sk_buff *rx_skb;
|
struct sk_buff *rx_skb;
|
||||||
__u32 rx_len;
|
__u32 rx_len;
|
||||||
__u8 tx_ident;
|
__u8 tx_ident;
|
||||||
|
struct mutex ident_lock;
|
||||||
|
|
||||||
struct sk_buff_head pending_rx;
|
struct sk_buff_head pending_rx;
|
||||||
struct work_struct pending_rx_work;
|
struct work_struct pending_rx_work;
|
||||||
|
|
|
@ -798,14 +798,14 @@ static u8 l2cap_get_ident(struct l2cap_conn *conn)
|
||||||
* 200 - 254 are used by utilities like l2ping, etc.
|
* 200 - 254 are used by utilities like l2ping, etc.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
spin_lock(&conn->lock);
|
mutex_lock(&conn->ident_lock);
|
||||||
|
|
||||||
if (++conn->tx_ident > 128)
|
if (++conn->tx_ident > 128)
|
||||||
conn->tx_ident = 1;
|
conn->tx_ident = 1;
|
||||||
|
|
||||||
id = conn->tx_ident;
|
id = conn->tx_ident;
|
||||||
|
|
||||||
spin_unlock(&conn->lock);
|
mutex_unlock(&conn->ident_lock);
|
||||||
|
|
||||||
return id;
|
return id;
|
||||||
}
|
}
|
||||||
|
@ -7016,7 +7016,7 @@ static struct l2cap_conn *l2cap_conn_add(struct hci_conn *hcon)
|
||||||
conn->hs_enabled = test_bit(HCI_HS_ENABLED,
|
conn->hs_enabled = test_bit(HCI_HS_ENABLED,
|
||||||
&hcon->hdev->dev_flags);
|
&hcon->hdev->dev_flags);
|
||||||
|
|
||||||
spin_lock_init(&conn->lock);
|
mutex_init(&conn->ident_lock);
|
||||||
mutex_init(&conn->chan_lock);
|
mutex_init(&conn->chan_lock);
|
||||||
|
|
||||||
INIT_LIST_HEAD(&conn->chan_l);
|
INIT_LIST_HEAD(&conn->chan_l);
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue