Re: [PATCH v5 1/5] usb: dwc3: Avoid unmapping USB requests if endxfer is not complete

From: kernel test robot
Date: Wed Aug 31 2022 - 23:31:14 EST


Hi Wesley,

Thank you for the patch! Yet something to improve:

[auto build test ERROR on usb/usb-testing]
[also build test ERROR on next-20220831]
[cannot apply to linus/master v6.0-rc3]
[If your patch is applied to the wrong git tree, kindly drop us a note.
And when submitting patch, we suggest to use '--base' as documented in
https://git-scm.com/docs/git-format-patch#_base_tree_information]

url: https://github.com/intel-lab-lkp/linux/commits/Wesley-Cheng/Fix-controller-halt-and-endxfer-timeout-issues/20220901-023750
base: https://git.kernel.org/pub/scm/linux/kernel/git/gregkh/usb.git usb-testing
config: x86_64-randconfig-a012 (https://download.01.org/0day-ci/archive/20220901/202209011138.FP2kL0sl-lkp@xxxxxxxxx/config)
compiler: clang version 14.0.6 (https://github.com/llvm/llvm-project f28c006a5895fc0e329fe15fead81e37457cb1d1)
reproduce (this is a W=1 build):
wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross
chmod +x ~/bin/make.cross
# https://github.com/intel-lab-lkp/linux/commit/18bece9b81c07fbd2dbcec20ef8cc7e56d1ebf35
git remote add linux-review https://github.com/intel-lab-lkp/linux
git fetch --no-tags linux-review Wesley-Cheng/Fix-controller-halt-and-endxfer-timeout-issues/20220901-023750
git checkout 18bece9b81c07fbd2dbcec20ef8cc7e56d1ebf35
# save the config file
mkdir build_dir && cp config build_dir/.config
COMPILER_INSTALL_PATH=$HOME/0day COMPILER=clang make.cross W=1 O=build_dir ARCH=x86_64 SHELL=/bin/bash drivers/usb/dwc3/

If you fix the issue, kindly add following tag where applicable
Reported-by: kernel test robot <lkp@xxxxxxxxx>

All errors (new ones prefixed by >>):

>> drivers/usb/dwc3/gadget.c:968:6: error: conflicting types for 'dwc3_remove_requests'
void dwc3_remove_requests(struct dwc3 *dwc, struct dwc3_ep *dep, int status)
^
drivers/usb/dwc3/core.h:1563:6: note: previous declaration is here
void dwc3_remove_requests(struct dwc3 *dwc, struct dwc3_ep *dep);
^
>> drivers/usb/dwc3/gadget.c:1029:33: error: too many arguments to function call, expected 2, have 3
dwc3_remove_requests(dwc, dep, -ECONNRESET);
~~~~~~~~~~~~~~~~~~~~ ^~~~~~~~~~~
drivers/usb/dwc3/core.h:1563:6: note: 'dwc3_remove_requests' declared here
void dwc3_remove_requests(struct dwc3 *dwc, struct dwc3_ep *dep);
^
drivers/usb/dwc3/gadget.c:2347:34: error: too many arguments to function call, expected 2, have 3
dwc3_remove_requests(dwc, dep, -ESHUTDOWN);
~~~~~~~~~~~~~~~~~~~~ ^~~~~~~~~~
drivers/usb/dwc3/core.h:1563:6: note: 'dwc3_remove_requests' declared here
void dwc3_remove_requests(struct dwc3 *dwc, struct dwc3_ep *dep);
^
3 errors generated.


vim +/dwc3_remove_requests +968 drivers/usb/dwc3/gadget.c

967
> 968 void dwc3_remove_requests(struct dwc3 *dwc, struct dwc3_ep *dep, int status)
969 {
970 struct dwc3_request *req;
971
972 dwc3_stop_active_transfer(dep, true, false);
973
974 /* If endxfer is delayed, avoid unmapping requests */
975 if (dep->flags & DWC3_EP_DELAY_STOP)
976 return;
977
978 /* - giveback all requests to gadget driver */
979 while (!list_empty(&dep->started_list)) {
980 req = next_request(&dep->started_list);
981
982 dwc3_gadget_giveback(dep, req, status);
983 }
984
985 while (!list_empty(&dep->pending_list)) {
986 req = next_request(&dep->pending_list);
987
988 dwc3_gadget_giveback(dep, req, status);
989 }
990
991 while (!list_empty(&dep->cancelled_list)) {
992 req = next_request(&dep->cancelled_list);
993
994 dwc3_gadget_giveback(dep, req, status);
995 }
996 }
997
998 /**
999 * __dwc3_gadget_ep_disable - disables a hw endpoint
1000 * @dep: the endpoint to disable
1001 *
1002 * This function undoes what __dwc3_gadget_ep_enable did and also removes
1003 * requests which are currently being processed by the hardware and those which
1004 * are not yet scheduled.
1005 *
1006 * Caller should take care of locking.
1007 */
1008 static int __dwc3_gadget_ep_disable(struct dwc3_ep *dep)
1009 {
1010 struct dwc3 *dwc = dep->dwc;
1011 u32 reg;
1012
1013 trace_dwc3_gadget_ep_disable(dep);
1014
1015 /* make sure HW endpoint isn't stalled */
1016 if (dep->flags & DWC3_EP_STALL)
1017 __dwc3_gadget_ep_set_halt(dep, 0, false);
1018
1019 reg = dwc3_readl(dwc->regs, DWC3_DALEPENA);
1020 reg &= ~DWC3_DALEPENA_EP(dep->number);
1021 dwc3_writel(dwc->regs, DWC3_DALEPENA, reg);
1022
1023 /* Clear out the ep descriptors for non-ep0 */
1024 if (dep->number > 1) {
1025 dep->endpoint.comp_desc = NULL;
1026 dep->endpoint.desc = NULL;
1027 }
1028
> 1029 dwc3_remove_requests(dwc, dep, -ECONNRESET);
1030
1031 dep->stream_capable = false;
1032 dep->type = 0;
1033 dep->flags &= DWC3_EP_TXFIFO_RESIZED;
1034
1035 return 0;
1036 }
1037

--
0-DAY CI Kernel Test Service
https://01.org/lkp