]> git.ipfire.org Git - thirdparty/kernel/stable.git/commitdiff
xhci: handle failed buffer copy to URB sg list and fix a W=1 copiler warning
authorMathias Nyman <mathias.nyman@linux.intel.com>
Thu, 17 Jun 2021 15:03:53 +0000 (18:03 +0300)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Tue, 20 Jul 2021 14:02:10 +0000 (16:02 +0200)
[ Upstream commit 271a21d8b280b186f8cc9ca6f7151902efde9512 ]

Set the urb->actual_length to bytes successfully copied in case all bytes
weren't copied from a temporary buffer to the URB sg list.
Also print a debug message

Signed-off-by: Mathias Nyman <mathias.nyman@linux.intel.com>
Link: https://lore.kernel.org/r/20210617150354.1512157-4-mathias.nyman@linux.intel.com
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Signed-off-by: Sasha Levin <sashal@kernel.org>
drivers/usb/host/xhci.c

index 0d2f1c37ab7452acc253ca05b62de79bcd64a098..73cdaa3f306755364c3f29c2197abb3f48117427 100644 (file)
@@ -1362,12 +1362,17 @@ static void xhci_unmap_temp_buf(struct usb_hcd *hcd, struct urb *urb)
                                 urb->transfer_buffer_length,
                                 dir);
 
-       if (usb_urb_dir_in(urb))
+       if (usb_urb_dir_in(urb)) {
                len = sg_pcopy_from_buffer(urb->sg, urb->num_sgs,
                                           urb->transfer_buffer,
                                           buf_len,
                                           0);
-
+               if (len != buf_len) {
+                       xhci_dbg(hcd_to_xhci(hcd),
+                                "Copy from tmp buf to urb sg list failed\n");
+                       urb->actual_length = len;
+               }
+       }
        urb->transfer_flags &= ~URB_DMA_MAP_SINGLE;
        kfree(urb->transfer_buffer);
        urb->transfer_buffer = NULL;