Skip to contentSkip to conversation

usb: gadget: u_serial: Dequeue the console request only when queued

PATCH New Fabricio Akio 1 participant 1 message Sep 28 USB

lore
Share & tools
lore
#0 lore raw

PATCH 1/1 usb: gadget: u_serial: Dequeue the console request only when queued

gs_console_disconnect() dequeues the console request even when it is idle, which dwc3 reports as "request ... was not queued" on every disconnect. Dequeue it only while req->length marks it as queued.

---
Tested on a Motorola Moto X4 (XT1900-6, SDM630) with the sdm660-mainline 7.2.3 tree and the gadget serial console in use: "request ... was not queued to ep3in" is logged on every system suspend without this patch, and not over three consecutive cycles with it. The path where the request is still queued at disconnect was not exercised. Applies unchanged to next-20260928.

---
 drivers/usb/gadget/function/u_serial.c | 6 +++++-
 1 file changed, 5 insertions(+), 1 deletion(-)
drivers/usb/gadget/function/u_serial.c +5 -1
index cdd1dfc666c4..53a56ddec08a 100644
@@ -1055,6 +1055,7 @@ static void gs_console_disconnect(struct gs_port *port)
 	struct gs_console *cons = port->console;
 	struct usb_request *req;
 	struct usb_ep *ep;
+	bool was_queued;
 
 	if (!cons)
 		return;
@@ -1063,6 +1064,8 @@ static void gs_console_disconnect(struct gs_port *port)
 
 	req = cons->req;
 	ep = cons->console.data;
+	/* A non-zero length marks the request as queued. */
+	was_queued = req && req->length;
 	cons->req = NULL;
 
 	spin_unlock(&cons->lock);
@@ -1070,7 +1073,8 @@ static void gs_console_disconnect(struct gs_port *port)
 	if (!req)
 		return;
 
-	usb_ep_dequeue(ep, req);
+	if (was_queued)
+		usb_ep_dequeue(ep, req);
 	gs_free_req(ep, req);
 }
 

---
base-commit: 6375e61c01e93e35ee7acd336a689ac1fae4b509
change-id: 20260928-u-serial-console-dequeue-f9790a8e87c6

Best regards,

Signature · 1 line
Fabricio Akio <[email protected]>