Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 5a54e7c8 authored by Marcel Holtmann's avatar Marcel Holtmann Committed by Johan Hedberg
Browse files

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: default avatarMarcel Holtmann <marcel@holtmann.org>
Signed-off-by: default avatarJohan Hedberg <johan.hedberg@intel.com>
parent e03ab519
Loading
Loading
Loading
Loading
+1 −2
Original line number Original line Diff line number Diff line
@@ -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;
+3 −3
Original line number Original line Diff line number Diff line
@@ -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);