]> git.ipfire.org Git - thirdparty/kernel/stable.git/commitdiff
Bluetooth: btusb: Fix not handling ZPL/short-transfer
authorLuiz Augusto von Dentz <luiz.von.dentz@intel.com>
Mon, 9 Sep 2024 20:51:52 +0000 (16:51 -0400)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Fri, 4 Oct 2024 14:32:29 +0000 (16:32 +0200)
[ Upstream commit 7b05933340f4490ef5b09e84d644d12484b05fdf ]

Requesting transfers of the exact same size of wMaxPacketSize may result
in ZPL/short-transfer since the USB stack cannot handle it as we are
limiting the buffer size to be the same as wMaxPacketSize.

Also, in terms of throughput this change has the same effect to
interrupt endpoint as 290ba200815f "Bluetooth: Improve USB driver throughput
by increasing the frame size" had for the bulk endpoint, so users of the
advertisement bearer (e.g. BT Mesh) may benefit from this change.

Fixes: 5e23b923da03 ("[Bluetooth] Add generic driver for Bluetooth USB devices")
Signed-off-by: Luiz Augusto von Dentz <luiz.von.dentz@intel.com>
Tested-by: Kiran K <kiran.k@intel.com>
Signed-off-by: Sasha Levin <sashal@kernel.org>
drivers/bluetooth/btusb.c

index 0927f51867c26ac6107f7bc6cd560cacc8748e0a..c41b86608ba8668c7baa926ceeb3cd403487f61e 100644 (file)
@@ -1393,7 +1393,10 @@ static int btusb_submit_intr_urb(struct hci_dev *hdev, gfp_t mem_flags)
        if (!urb)
                return -ENOMEM;
 
-       size = le16_to_cpu(data->intr_ep->wMaxPacketSize);
+       /* Use maximum HCI Event size so the USB stack handles
+        * ZPL/short-transfer automatically.
+        */
+       size = HCI_MAX_EVENT_SIZE;
 
        buf = kmalloc(size, mem_flags);
        if (!buf) {