summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMichal Pecio <michal.pecio@gmail.com>2026-06-03 12:11:22 +0300
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>2026-06-03 20:23:28 +0300
commit298ff132714a660283ae6ed700e9bd33ef58ec1a (patch)
tree3adc84ab50d572b3cc91286308bfc5c9008f3126
parentd20405dcdfb616cbae5c3e17e790a969ea03469d (diff)
downloadlinux-298ff132714a660283ae6ed700e9bd33ef58ec1a.tar.xz
usb: xhci: Remove isochronous URB_SHORT_NOT_OK handling
This URB flag was never supposed to have any effect on isoc endpoints. No kernel code uses the flag except usb_sg_init(), on non-isoc only. USBFS can't use it on isoc because proc_do_submiturb() rejects it. Signed-off-by: Michal Pecio <michal.pecio@gmail.com> Signed-off-by: Mathias Nyman <mathias.nyman@linux.intel.com> Link: https://patch.msgid.link/20260603091132.1110849-6-mathias.nyman@linux.intel.com Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
-rw-r--r--drivers/usb/host/xhci-ring.c12
1 files changed, 3 insertions, 9 deletions
diff --git a/drivers/usb/host/xhci-ring.c b/drivers/usb/host/xhci-ring.c
index 1fbf43a51037..a5342d49a65b 100644
--- a/drivers/usb/host/xhci-ring.c
+++ b/drivers/usb/host/xhci-ring.c
@@ -2395,7 +2395,6 @@ static void process_isoc_td(struct xhci_hcd *xhci, struct xhci_virt_ep *ep,
u32 trb_comp_code;
bool sum_trbs_for_length = false;
u32 remaining, requested, ep_trb_len;
- int short_framestatus;
trb_comp_code = GET_COMP_CODE(le32_to_cpu(event->transfer_len));
urb_priv = td->urb->hcpriv;
@@ -2404,8 +2403,6 @@ static void process_isoc_td(struct xhci_hcd *xhci, struct xhci_virt_ep *ep,
requested = frame->length;
remaining = EVENT_TRB_LEN(le32_to_cpu(event->transfer_len));
ep_trb_len = TRB_LEN(le32_to_cpu(ep_trb->generic.field[2]));
- short_framestatus = td->urb->transfer_flags & URB_SHORT_NOT_OK ?
- -EREMOTEIO : 0;
/* handle completion code */
switch (trb_comp_code) {
@@ -2413,15 +2410,12 @@ static void process_isoc_td(struct xhci_hcd *xhci, struct xhci_virt_ep *ep,
/* Don't overwrite status if TD had an error, see xHCI 4.9.1 */
if (td->error_mid_td)
break;
- if (remaining) {
- frame->status = short_framestatus;
+ if (remaining)
sum_trbs_for_length = true;
- break;
- }
frame->status = 0;
break;
case COMP_SHORT_PACKET:
- frame->status = short_framestatus;
+ frame->status = 0;
sum_trbs_for_length = true;
break;
case COMP_BANDWIDTH_OVERRUN_ERROR:
@@ -2456,7 +2450,7 @@ static void process_isoc_td(struct xhci_hcd *xhci, struct xhci_virt_ep *ep,
break;
case COMP_STOPPED_SHORT_PACKET:
/* field normally containing residue now contains transferred */
- frame->status = short_framestatus;
+ frame->status = 0;
requested = remaining;
break;
case COMP_STOPPED_LENGTH_INVALID: