]> git.ipfire.org Git - thirdparty/ipxe.git/commitdiff
[usb] Reset control endpoints immediately after failure
authorMichael Brown <mcb30@ipxe.org>
Tue, 29 Sep 2020 09:16:14 +0000 (10:16 +0100)
committerMichael Brown <mcb30@ipxe.org>
Tue, 29 Sep 2020 09:16:14 +0000 (10:16 +0100)
The current error handling mechanism defers the endpoint reset until
the next use of the endpoint, on the basis that errors are detected
during completions and completion handling should not recursively call
usb_poll().

In the case of usb_control(), we are already at the level that calls
usb_poll() and can therefore safely perform the endpoint reset
immediately.  This has no impact on functionality, but does make
debugging traces easier to read since the reset will appear
immediately after the causative error.

Signed-off-by: Michael Brown <mcb30@ipxe.org>
src/drivers/bus/usb.c

index a7b68752863c47c9e25e9b818c6dc6e099d4fb43..74f11ecb805430a0528fa9764e4136add9062c24 100644 (file)
@@ -818,6 +818,7 @@ int usb_control ( struct usb_device *usb, unsigned int request,
                                       "failed: %s\n", usb->name, request,
                                       value, index, strerror ( rc ) );
                                free_iob ( cmplt );
+                               usb_endpoint_reset ( ep );
                                return rc;
                        }