On Mon, 20 Feb 2017, Gustavo A. R. Silva wrote:
> Hello everybody,
>
> I ran into the following piece of code at
> drivers/usb/misc/usbtest.c:149 (linux-next)
>
> 149 /* take the first altsetting with in-bulk + out-bulk;
> 150 * ignore other endpoints and altsettings.
> 151 */
> 152 for (ep = 0; ep < alt->desc.bNumEndpoints; ep++) {
> 153 struct usb_host_endpoint *e;
> 154
> 155 e = alt->endpoint + ep;
> 156 switch (usb_endpoint_type(&e->desc)) {
> 157 case USB_ENDPOINT_XFER_BULK:
> 158 break;
> 159 case USB_ENDPOINT_XFER_INT:
> 160 if (dev->info->intr)
> 161 goto try_intr;
> 162 case USB_ENDPOINT_XFER_ISOC:
> 163 if (dev->info->iso)
> 164 goto try_iso;
> 165 /* FALLTHROUGH */
> 166 default:
> 167 continue;
> 168 }
>
> The thing is that the case for USB_ENDPOINT_XFER_INT is not terminated
> by a break statement, and it falls through to the next case
> USB_ENDPOINT_XFER_ISOC, in case "if (dev->info->intr)" turns to be
> false.
>
> My question here is if this code is intentional?
As far as I can tell, it is not.
> Similar to the case for USB_ENDPOINT_XFER_ISOC, which falls through to
> the default case. But in that case there is a code comment that
> confirms such behavior.
>
> In case it is not intentional, I will write a patch to fix this.
> In case it is indeed intentional I think it would be good to add a
> code comment (/* fall through */) before "case USB_ENDPOINT_XFER_ISOC:"
>
> It would be great to hear any comment about this.
The USB_ENDPOINT_XFER_INT case should end with "continue;".
Although, in fact that whole loop could be structured better. The
"goto" parts really should be all in-line. Then the flow would be a
lot easier to follow.
Alan Stern
--
To unsubscribe from this list: send the line "unsubscribe linux-usb" in
the body of a message to [email protected]
More majordomo info at http://vger.kernel.org/majordomo-info.html