Commit c69e3f6e authored by Neeraj Sanjay Kale's avatar Neeraj Sanjay Kale Committed by Wentao Guan
Browse files

Bluetooth: btnxpuart: Fix glitches seen in dual A2DP streaming

stable inclusion
from stable-v6.6.76
commit 3924c153761c4dd44f1ef1b5c94a7313f90f8336
category: bugfix
bugzilla: https://gitee.com/openeuler/kernel/issues/IBW08Q

Reference: https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git/commit/?id=3924c153761c4dd44f1ef1b5c94a7313f90f8336



--------------------------------

[ Upstream commit 7de119bb79a63f6a1959b83117a98734914fb0b0 ]

This fixes a regression caused by previous commit for fixing truncated
ACL data, which is causing some intermittent glitches when running two
A2DP streams.

serdev_device_write_buf() is the root cause of the glitch, which is
reverted, and the TX work will continue to write until the queue is empty.

This change fixes both issues. No A2DP streaming glitches or truncated
ACL data issue observed.

Fixes: 8023dd220425 ("Bluetooth: btnxpuart: Fix driver sending truncated data")
Fixes: 689ca16e ("Bluetooth: NXP: Add protocol support for NXP Bluetooth chipsets")
Signed-off-by: default avatarNeeraj Sanjay Kale <neeraj.sanjaykale@nxp.com>
Signed-off-by: default avatarLuiz Augusto von Dentz <luiz.von.dentz@intel.com>
Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
(cherry picked from commit 3924c153761c4dd44f1ef1b5c94a7313f90f8336)
Signed-off-by: default avatarWentao Guan <guanwentao@uniontech.com>
parent 5d5ca54f
Loading
Loading
Loading
Loading
+1 −2
Original line number Diff line number Diff line
@@ -1280,13 +1280,12 @@ static void btnxpuart_tx_work(struct work_struct *work)

	while ((skb = nxp_dequeue(nxpdev))) {
		len = serdev_device_write_buf(serdev, skb->data, skb->len);
		serdev_device_wait_until_sent(serdev, 0);
		hdev->stat.byte_tx += len;

		skb_pull(skb, len);
		if (skb->len > 0) {
			skb_queue_head(&nxpdev->txq, skb);
			break;
			continue;
		}

		switch (hci_skb_pkt_type(skb)) {