[bug report] usb: Assimilate usb_get_descriptor() to linux
Andrew Goodbody
andrew.goodbody at linaro.org
Thu Jun 19 14:02:39 CEST 2025
Hello Philip Oberfichtner,
Commit 2fc8638403c7 ("usb: Assimilate usb_get_descriptor() to linux")
from Jun 4, 2024, leads to the following Smatch static checker
warning:
common/usb.c:261 usb_control_msg()
warn: should this be 'timeout == -1'
common/usb.c
220 int usb_control_msg(struct usb_device *dev, unsigned int pipe,
221 unsigned char request, unsigned char
requesttype,
222 unsigned short value, unsigned short index,
223 void *data, unsigned short size, int
timeout)
224 {
225 ALLOC_CACHE_ALIGN_BUFFER(struct devrequest,
setup_packet, 1);
226 int err;
227
228 if ((timeout == 0) && (!asynch_allowed)) {
229 /* request for a asynch control pipe is not
allowed */
230 return -EINVAL;
231 }
232
233 /* set setup command */
234 setup_packet->requesttype = requesttype;
235 setup_packet->request = request;
236 setup_packet->value = cpu_to_le16(value);
237 setup_packet->index = cpu_to_le16(index);
238 setup_packet->length = cpu_to_le16(size);
239 debug("usb_control_msg: request: 0x%X, requesttype:
0x%X, " \
240 "value 0x%X index 0x%X length 0x%X\n",
241 request, requesttype, value, index, size);
242 dev->status = USB_ST_NOT_PROC; /*not yet processed */
243
244 err = submit_control_msg(dev, pipe, data, size,
setup_packet);
245 if (err < 0)
246 return err;
247 if (timeout == 0)
248 return (int)size;
249
250 /*
251 * Wait for status to update until timeout expires, USB
driver
252 * interrupt handler may set the status when the USB
operation has
253 * been completed.
254 */
255 while (timeout--) {
256 if (!((volatile unsigned long)dev->status &
USB_ST_NOT_PROC))
257 break;
258 mdelay(1);
259 }
260
--> 261 if (timeout == 0)
262 return -ETIMEDOUT;
263
264 if (dev->status)
265 return -1;
266
267 return dev->act_len;
268 }
Regards,
Andrew Goodbody
More information about the U-Boot
mailing list