Hi Marcus, Thank you for the patch! Perhaps something to improve: [auto build test WARNING on balbi-usb/next] [also build test WARNING on v4.17-rc7] [if your patch is applied to the wrong git tree, please drop us a note to help improve the system] url: https://github.com/0day-ci/linux/commits/Marcus-Folkesson/usb-gadget-ccid-add-support-for-USB-CCID-Gadget-Device/20180529-014427 base: https://git.kernel.org/pub/scm/linux/kernel/git/balbi/usb.git next reproduce: # apt-get install sparse make ARCH=x86_64 allmodconfig make C=1 CF=-D__CHECK_ENDIAN__ sparse warnings: (new ones prefixed by >>) >> drivers/usb/gadget/function/f_ccid.c:423:43: sparse: incorrect type in assignment (different base types) @@ expected unsigned int [unsigned] [usertype] <noident> @@ got ed int [unsigned] [usertype] <noident> @@ drivers/usb/gadget/function/f_ccid.c:423:43: expected unsigned int [unsigned] [usertype] <noident> drivers/usb/gadget/function/f_ccid.c:423:43: got restricted __le32 [usertype] <noident> >> drivers/usb/gadget/function/f_ccid.c:424:31: sparse: expression using sizeof(void) drivers/usb/gadget/function/f_ccid.c:429:43: sparse: incorrect type in assignment (different base types) @@ expected unsigned int [unsigned] [usertype] <noident> @@ got ed int [unsigned] [usertype] <noident> @@ drivers/usb/gadget/function/f_ccid.c:429:43: expected unsigned int [unsigned] [usertype] <noident> drivers/usb/gadget/function/f_ccid.c:429:43: got restricted __le32 [usertype] <noident> drivers/usb/gadget/function/f_ccid.c:430:31: sparse: expression using sizeof(void) >> drivers/usb/gadget/function/f_ccid.c:481:5: sparse: symbol 'ccidg_start_ep' was not declared. Should it be static? >> drivers/usb/gadget/function/f_ccid.c:669:35: sparse: Using plain integer as NULL pointer >> drivers/usb/gadget/function/f_ccid.c:831:41: sparse: incorrect type in assignment (different base types) @@ expected unsigned int static [unsigned] [addressable] [toplevel] [usertype] dwFeatures @@ got sable] [toplevel] [usertype] dwFeatures @@ drivers/usb/gadget/function/f_ccid.c:831:41: expected unsigned int static [unsigned] [addressable] [toplevel] [usertype] dwFeatures drivers/usb/gadget/function/f_ccid.c:831:41: got restricted __le32 [usertype] <noident> >> drivers/usb/gadget/function/f_ccid.c:833:41: sparse: incorrect type in assignment (different base types) @@ expected unsigned short static [unsigned] [addressable] [toplevel] [assigned] [usertype] wLcdLayout @@ got level] [assigned] [usertype] wLcdLayout @@ drivers/usb/gadget/function/f_ccid.c:833:41: expected unsigned short static [unsigned] [addressable] [toplevel] [assigned] [usertype] wLcdLayout drivers/usb/gadget/function/f_ccid.c:833:41: got restricted __le16 [usertype] <noident> >> drivers/usb/gadget/function/f_ccid.c:835:41: sparse: incorrect type in assignment (different base types) @@ expected unsigned int static [unsigned] [addressable] [toplevel] [assigned] [usertype] dwProtocols @@ got level] [assigned] [usertype] dwProtocols @@ drivers/usb/gadget/function/f_ccid.c:835:41: expected unsigned int static [unsigned] [addressable] [toplevel] [assigned] [usertype] dwProtocols drivers/usb/gadget/function/f_ccid.c:835:41: got restricted __le32 [usertype] <noident> In file included from include/linux/printk.h:332:0, from include/linux/kernel.h:14, from include/linux/list.h:9, from include/linux/kobject.h:19, from include/linux/cdev.h:5, from drivers/usb/gadget/function/f_ccid.c:8: drivers/usb/gadget/function/f_ccid.c: In function 'ccidg_bulk_read': drivers/usb/gadget/function/f_ccid.c:612:5: warning: format '%i' expects argument of type 'int', but argument 4 has type 'size_t {aka long unsigned int}' [-Wformat=] "ccid: too small buffer size. %i provided, need at least %in", ^ include/linux/dynamic_debug.h:135:39: note: in definition of macro 'dynamic_dev_dbg' __dynamic_dev_dbg(&descriptor, dev, fmt, 32- ^~~ include/linux/usb/composite.h:632:2: note: in expansion of macro 'dev_dbg' dev_dbg(&(d)->gadget->dev , fmt , ## args) ^~~~~~~ drivers/usb/gadget/function/f_ccid.c:611:3: note: in expansion of macro 'DBG' DBG(ccidg->function.config->cdev, ^~~ drivers/usb/gadget/function/f_ccid.c:612:5: warning: format '%i' expects argument of type 'int', but argument 5 has type 'long unsigned int' [-Wformat=] "ccid: too small buffer size. %i provided, need at least %in", ^ include/linux/dynamic_debug.h:135:39: note: in definition of macro 'dynamic_dev_dbg' __dynamic_dev_dbg(&descriptor, dev, fmt, 44- ^~~ include/linux/usb/composite.h:632:2: note: in expansion of macro 'dev_dbg' dev_dbg(&(d)->gadget->dev , fmt , ## args) ^~~~~~~ drivers/usb/gadget/function/f_ccid.c:611:3: note: in expansion of macro 'DBG' DBG(ccidg->function.config->cdev, ^~~ drivers/usb/gadget/function/f_ccid.c: In function 'ccidg_bulk_write': drivers/usb/gadget/function/f_ccid.c:683:5: warning: format '%i' expects argument of type 'int', but argument 4 has type 'size_t {aka long unsigned int}' [-Wformat=] "ccid: too much data. %i provided, but we can only handle %in", ^ include/linux/dynamic_debug.h:135:39: note: in definition of macro 'dynamic_dev_dbg' __dynamic_dev_dbg(&descriptor, dev, fmt, 57- ^~~ include/linux/usb/composite.h:632:2: note: in expansion of macro 'dev_dbg' dev_dbg(&(d)->gadget->dev , fmt , ## args) ^~~~~~~ drivers/usb/gadget/function/f_ccid.c:682:3: note: in expansion of macro 'DBG' DBG(ccidg->function.config->cdev, ^~~ drivers/usb/gadget/function/f_ccid.c:683:5: warning: format '%i' expects argument of type 'int', but argument 5 has type 'long unsigned int' [-Wformat=] "ccid: too much data. %i provided, but we can only handle %in", ^ include/linux/dynamic_debug.h:135:39: note: in definition of macro 'dynamic_dev_dbg' __dynamic_dev_dbg(&descriptor, dev, fmt, 69- ^~~ include/linux/usb/composite.h:632:2: note: in expansion of macro 'dev_dbg' dev_dbg(&(d)->gadget->dev , fmt , ## args) ^~~~~~~ drivers/usb/gadget/function/f_ccid.c:682:3: note: in expansion of macro 'DBG' DBG(ccidg->function.config->cdev, ^~~ Please review and possibly fold the followup patch. vim +423 drivers/usb/gadget/function/f_ccid.c 403 404 static int ccidg_function_setup(struct usb_function *f, 405 const struct usb_ctrlrequest *ctrl) 406 { 407 struct f_ccidg *ccidg = container_of(f, struct f_ccidg, function); 408 struct usb_composite_dev *cdev = f->config->cdev; 409 struct usb_request *req = cdev->req; 410 int ret = -EOPNOTSUPP; 411 u16 w_index = le16_to_cpu(ctrl->wIndex); 412 u16 w_value = le16_to_cpu(ctrl->wValue); 413 u16 w_length = le16_to_cpu(ctrl->wLength); 414 415 if (!atomic_read(&ccidg->online)) 416 return -ENOTCONN; 417 418 switch (ctrl->bRequestType & USB_TYPE_MASK) { 419 case USB_TYPE_CLASS: 420 { 421 switch (ctrl->bRequest) { 422 case CCIDGENERICREQ_GET_CLOCK_FREQUENCIES: > 423 *(u32 *) req->buf = cpu_to_le32(ccid_class_desc.dwDefaultClock); > 424 ret = min_t(u32, w_length, 425 sizeof(ccid_class_desc.dwDefaultClock)); 426 break; 427 428 case CCIDGENERICREQ_GET_DATA_RATES: > 429 *(u32 *) req->buf = cpu_to_le32(ccid_class_desc.dwDataRate); > 430 ret = min_t(u32, w_length, sizeof(ccid_class_desc.dwDataRate)); 431 break; 432 433 default: 434 VDBG(f->config->cdev, 435 "ccid: invalid control req%02x.%02x v%04x i%04x l%d\n", 436 ctrl->bRequestType, ctrl->bRequest, 437 w_value, w_index, w_length); 438 } 439 } 440 } 441 442 /* responded with data transfer or status phase? */ 443 if (ret >= 0) { 444 VDBG(f->config->cdev, "ccid: req%02x.%02x v%04x i%04x l%d\n", 445 ctrl->bRequestType, ctrl->bRequest, 446 w_value, w_index, w_length); 447 448 req->length = ret; 449 ret = usb_ep_queue(cdev->gadget->ep0, req, GFP_ATOMIC); 450 if (ret < 0) 451 ERROR(f->config->cdev, 452 "ccid: ep0 enqueue err %d\n", ret); 453 } 454 455 return ret; 456 } 457 458 static void ccidg_function_disable(struct usb_function *f) 459 { 460 struct f_ccidg *ccidg = func_to_ccidg(f); 461 struct ccidg_bulk_dev *bulk_dev = &ccidg->bulk_dev; 462 struct usb_request *req; 463 464 /* Disable endpoints */ 465 usb_ep_disable(ccidg->in); 466 usb_ep_disable(ccidg->out); 467 468 /* Free endpoint related requests */ 469 if (!atomic_read(&bulk_dev->rx_req_busy)) 470 ccidg_request_free(bulk_dev->rx_req, ccidg->out); 471 while ((req = ccidg_req_get(ccidg, &bulk_dev->tx_idle))) 472 ccidg_request_free(req, ccidg->in); 473 474 atomic_set(&ccidg->online, 0); 475 476 /* Wake up threads */ 477 wake_up(&bulk_dev->write_wq); 478 wake_up(&bulk_dev->read_wq); 479 } 480 > 481 int ccidg_start_ep(struct f_ccidg *ccidg, struct usb_function *f, 482 struct usb_ep *ep) 483 { 484 struct usb_composite_dev *cdev = f->config->cdev; 485 int ret; 486 487 usb_ep_disable(ep); 488 489 ret = config_ep_by_speed(cdev->gadget, f, ep); 490 if (ret) { 491 ERROR(cdev, "ccid: can't configure %s: %d\n", ep->name, ret); 492 return ret; 493 } 494 495 ret = usb_ep_enable(ep); 496 if (ret) { 497 ERROR(cdev, "ccid: can't start %s: %d\n", ep->name, ret); 498 return ret; 499 } 500 501 ep->driver_data = ccidg; 502 503 return ret; 504 } 505 --- 0-DAY kernel test infrastructure Open Source Technology Center https://lists.01.org/pipermail/kbuild-all Intel Corporation -- To unsubscribe from this list: send the line "unsubscribe linux-usb" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html