[PATCH 4/4] usb: gadget: dummy_hcd: set no_sg_constraint on the host controller
Igor Skalkin <[email protected]> Fri, 7 Aug 2026 09:54:38 +0200
| Newsgroups | org.kernel.vger.linux-usb,org.kernel.vger.linux-kernel |
|---|---|
| Message-ID | <[email protected]> |
dummy_hcd copies data in software and has no hardware DMA alignment requirement. Set no_sg_constraint = 1 so the USB core does not reject SG URBs whose non-final segments are not a multiple of the endpoint maxpacket size. For SuperSpeed bulk endpoints maxpacket is 1024 bytes; usbtest generates SG lists with varying segment sizes (e.g. 512 bytes) that are valid transfers but not maxpacket-aligned, causing usb_submit_urb to return -EINVAL before the URB reaches the host controller. Assisted-by: OpenCode:claude-sonnet-5 Signed-off-by: Igor Skalkin <[email protected]> --- drivers/usb/gadget/udc/dummy_hcd.c | 1 + 1 file changed, 1 insertion(+) diff --git a/drivers/usb/gadget/udc/dummy_hcd.c b/drivers/usb/gadget/udc/dummy_hcd.c index 7597c9e9fa66..2cfb1d035b34 100644 --- a/drivers/usb/gadget/udc/dummy_hcd.c +++ b/drivers/usb/gadget/udc/dummy_hcd.c @@ -2550,6 +2550,7 @@ static int dummy_setup(struct usb_hcd *hcd) dum = *((void **)dev_get_platdata(hcd->self.controller)); hcd->self.sg_tablesize = ~0; + hcd->self.no_sg_constraint = 1; if (usb_hcd_is_primary_hcd(hcd)) { dum->hs_hcd = hcd_to_dummy_hcd(hcd); dum->hs_hcd->dum = dum; -- 2.49.0