Hi Hardik, kernel test robot noticed the following build warnings: [auto build test WARNING on usb/usb-testing] [also build test WARNING on usb/usb-next usb/usb-linus linus/master v6.6-rc5 next-20231011] [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/Hardik-Gajjar/usb-core-hub-Add-quirks-for-reducing-device-address-timeout/20231011-165246 base: https://git.kernel.org/pub/scm/linux/kernel/git/gregkh/usb.git usb-testing patch link: https://lore.kernel.org/r/20231011085011.89198-1-hgajjar%40de.adit-jv.com patch subject: [PATCH v3] usb: core: hub: Add quirks for reducing device address timeout config: m68k-allyesconfig (https://download.01.org/0day-ci/archive/20231011/202310111851.fB7Flvj5-lkp@xxxxxxxxx/config) compiler: m68k-linux-gcc (GCC) 13.2.0 reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20231011/202310111851.fB7Flvj5-lkp@xxxxxxxxx/reproduce) If you fix the issue in a separate patch/commit (i.e. not just a new version of the same patch/commit), kindly add following tags | Reported-by: kernel test robot <lkp@xxxxxxxxx> | Closes: https://lore.kernel.org/oe-kbuild-all/202310111851.fB7Flvj5-lkp@xxxxxxxxx/ All warnings (new ones prefixed by >>): drivers/usb/host/xhci.c:1318: warning: Function parameter or member 'desc' not described in 'xhci_get_endpoint_index' >> drivers/usb/host/xhci.c:4001: warning: This comment starts with '/**', but isn't a kernel-doc comment. Refer Documentation/doc-guide/kernel-doc.rst * This function issues an Address Device command to assign a unique USB bus vim +4001 drivers/usb/host/xhci.c 3999 4000 /** > 4001 * This function issues an Address Device command to assign a unique USB bus 4002 * address. Optionally, it sends a SetAddress request. 4003 * 4004 * @param hcd USB host controller data structure. 4005 * @param udev USB device structure representing the connected device. 4006 * @param setup Enum specifying setup mode: address only or with context. 4007 * @param timeout_ms Max wait time (ms) for the command operation to complete. 4008 * 4009 * @return Integer status code: 0 on success, negative on error. 4010 * 4011 */ 4012 static int xhci_setup_device(struct usb_hcd *hcd, struct usb_device *udev, 4013 enum xhci_setup_dev setup, unsigned int timeout_ms) 4014 { 4015 const char *act = setup == SETUP_CONTEXT_ONLY ? "context" : "address"; 4016 unsigned long flags; 4017 struct xhci_virt_device *virt_dev; 4018 int ret = 0; 4019 struct xhci_hcd *xhci = hcd_to_xhci(hcd); 4020 struct xhci_slot_ctx *slot_ctx; 4021 struct xhci_input_control_ctx *ctrl_ctx; 4022 u64 temp_64; 4023 struct xhci_command *command = NULL; 4024 4025 mutex_lock(&xhci->mutex); 4026 4027 if (xhci->xhc_state) { /* dying, removing or halted */ 4028 ret = -ESHUTDOWN; 4029 goto out; 4030 } 4031 4032 if (!udev->slot_id) { 4033 xhci_dbg_trace(xhci, trace_xhci_dbg_address, 4034 "Bad Slot ID %d", udev->slot_id); 4035 ret = -EINVAL; 4036 goto out; 4037 } 4038 4039 virt_dev = xhci->devs[udev->slot_id]; 4040 4041 if (WARN_ON(!virt_dev)) { 4042 /* 4043 * In plug/unplug torture test with an NEC controller, 4044 * a zero-dereference was observed once due to virt_dev = 0. 4045 * Print useful debug rather than crash if it is observed again! 4046 */ 4047 xhci_warn(xhci, "Virt dev invalid for slot_id 0x%x!\n", 4048 udev->slot_id); 4049 ret = -EINVAL; 4050 goto out; 4051 } 4052 slot_ctx = xhci_get_slot_ctx(xhci, virt_dev->out_ctx); 4053 trace_xhci_setup_device_slot(slot_ctx); 4054 4055 if (setup == SETUP_CONTEXT_ONLY) { 4056 if (GET_SLOT_STATE(le32_to_cpu(slot_ctx->dev_state)) == 4057 SLOT_STATE_DEFAULT) { 4058 xhci_dbg(xhci, "Slot already in default state\n"); 4059 goto out; 4060 } 4061 } 4062 4063 command = xhci_alloc_command(xhci, true, GFP_KERNEL); 4064 if (!command) { 4065 ret = -ENOMEM; 4066 goto out; 4067 } 4068 4069 command->in_ctx = virt_dev->in_ctx; 4070 command->timeout_ms = timeout_ms; 4071 4072 slot_ctx = xhci_get_slot_ctx(xhci, virt_dev->in_ctx); 4073 ctrl_ctx = xhci_get_input_control_ctx(virt_dev->in_ctx); 4074 if (!ctrl_ctx) { 4075 xhci_warn(xhci, "%s: Could not get input context, bad type.\n", 4076 __func__); 4077 ret = -EINVAL; 4078 goto out; 4079 } 4080 /* 4081 * If this is the first Set Address since device plug-in or 4082 * virt_device realloaction after a resume with an xHCI power loss, 4083 * then set up the slot context. 4084 */ 4085 if (!slot_ctx->dev_info) 4086 xhci_setup_addressable_virt_dev(xhci, udev); 4087 /* Otherwise, update the control endpoint ring enqueue pointer. */ 4088 else 4089 xhci_copy_ep0_dequeue_into_input_ctx(xhci, udev); 4090 ctrl_ctx->add_flags = cpu_to_le32(SLOT_FLAG | EP0_FLAG); 4091 ctrl_ctx->drop_flags = 0; 4092 4093 trace_xhci_address_ctx(xhci, virt_dev->in_ctx, 4094 le32_to_cpu(slot_ctx->dev_info) >> 27); 4095 4096 trace_xhci_address_ctrl_ctx(ctrl_ctx); 4097 spin_lock_irqsave(&xhci->lock, flags); 4098 trace_xhci_setup_device(virt_dev); 4099 ret = xhci_queue_address_device(xhci, command, virt_dev->in_ctx->dma, 4100 udev->slot_id, setup); 4101 if (ret) { 4102 spin_unlock_irqrestore(&xhci->lock, flags); 4103 xhci_dbg_trace(xhci, trace_xhci_dbg_address, 4104 "FIXME: allocate a command ring segment"); 4105 goto out; 4106 } 4107 xhci_ring_cmd_db(xhci); 4108 spin_unlock_irqrestore(&xhci->lock, flags); 4109 4110 /* ctrl tx can take up to 5 sec; XXX: need more time for xHC? */ 4111 wait_for_completion(command->completion); 4112 4113 /* FIXME: From section 4.3.4: "Software shall be responsible for timing 4114 * the SetAddress() "recovery interval" required by USB and aborting the 4115 * command on a timeout. 4116 */ 4117 switch (command->status) { 4118 case COMP_COMMAND_ABORTED: 4119 case COMP_COMMAND_RING_STOPPED: 4120 xhci_warn(xhci, "Timeout while waiting for setup device command\n"); 4121 ret = -ETIME; 4122 break; 4123 case COMP_CONTEXT_STATE_ERROR: 4124 case COMP_SLOT_NOT_ENABLED_ERROR: 4125 xhci_err(xhci, "Setup ERROR: setup %s command for slot %d.\n", 4126 act, udev->slot_id); 4127 ret = -EINVAL; 4128 break; 4129 case COMP_USB_TRANSACTION_ERROR: 4130 dev_warn(&udev->dev, "Device not responding to setup %s.\n", act); 4131 4132 mutex_unlock(&xhci->mutex); 4133 ret = xhci_disable_slot(xhci, udev->slot_id); 4134 xhci_free_virt_device(xhci, udev->slot_id); 4135 if (!ret) 4136 xhci_alloc_dev(hcd, udev); 4137 kfree(command->completion); 4138 kfree(command); 4139 return -EPROTO; 4140 case COMP_INCOMPATIBLE_DEVICE_ERROR: 4141 dev_warn(&udev->dev, 4142 "ERROR: Incompatible device for setup %s command\n", act); 4143 ret = -ENODEV; 4144 break; 4145 case COMP_SUCCESS: 4146 xhci_dbg_trace(xhci, trace_xhci_dbg_address, 4147 "Successful setup %s command", act); 4148 break; 4149 default: 4150 xhci_err(xhci, 4151 "ERROR: unexpected setup %s command completion code 0x%x.\n", 4152 act, command->status); 4153 trace_xhci_address_ctx(xhci, virt_dev->out_ctx, 1); 4154 ret = -EINVAL; 4155 break; 4156 } 4157 if (ret) 4158 goto out; 4159 temp_64 = xhci_read_64(xhci, &xhci->op_regs->dcbaa_ptr); 4160 xhci_dbg_trace(xhci, trace_xhci_dbg_address, 4161 "Op regs DCBAA ptr = %#016llx", temp_64); 4162 xhci_dbg_trace(xhci, trace_xhci_dbg_address, 4163 "Slot ID %d dcbaa entry @%p = %#016llx", 4164 udev->slot_id, 4165 &xhci->dcbaa->dev_context_ptrs[udev->slot_id], 4166 (unsigned long long) 4167 le64_to_cpu(xhci->dcbaa->dev_context_ptrs[udev->slot_id])); 4168 xhci_dbg_trace(xhci, trace_xhci_dbg_address, 4169 "Output Context DMA address = %#08llx", 4170 (unsigned long long)virt_dev->out_ctx->dma); 4171 trace_xhci_address_ctx(xhci, virt_dev->in_ctx, 4172 le32_to_cpu(slot_ctx->dev_info) >> 27); 4173 /* 4174 * USB core uses address 1 for the roothubs, so we add one to the 4175 * address given back to us by the HC. 4176 */ 4177 trace_xhci_address_ctx(xhci, virt_dev->out_ctx, 4178 le32_to_cpu(slot_ctx->dev_info) >> 27); 4179 /* Zero the input context control for later use */ 4180 ctrl_ctx->add_flags = 0; 4181 ctrl_ctx->drop_flags = 0; 4182 slot_ctx = xhci_get_slot_ctx(xhci, virt_dev->out_ctx); 4183 udev->devaddr = (u8)(le32_to_cpu(slot_ctx->dev_state) & DEV_ADDR_MASK); 4184 4185 xhci_dbg_trace(xhci, trace_xhci_dbg_address, 4186 "Internal device address = %d", 4187 le32_to_cpu(slot_ctx->dev_state) & DEV_ADDR_MASK); 4188 out: 4189 mutex_unlock(&xhci->mutex); 4190 if (command) { 4191 kfree(command->completion); 4192 kfree(command); 4193 } 4194 return ret; 4195 } 4196 -- 0-DAY CI Kernel Test Service https://github.com/intel/lkp-tests/wiki