From: kernel test robot <lkp@intel.com>
To: Hardik Gajjar <hgajjar@de.adit-jv.com>,
mathias.nyman@intel.com, gregkh@linuxfoundation.org,
stern@rowland.harvard.edu
Cc: oe-kbuild-all@lists.linux.dev, yangyingliang@huawei.com,
jinpu.wang@ionos.com, linux-usb@vger.kernel.org,
linux-kernel@vger.kernel.org, erosca@de.adit-jv.com,
hgajjar@de.adit-jv.com
Subject: Re: [PATCH v3] usb: core: hub: Add quirks for reducing device address timeout
Date: Wed, 11 Oct 2023 18:50:41 +0800 [thread overview]
Message-ID: <202310111851.fB7Flvj5-lkp@intel.com> (raw)
In-Reply-To: <20231011085011.89198-1-hgajjar@de.adit-jv.com>
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@intel.com/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@intel.com/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@intel.com>
| Closes: https://lore.kernel.org/oe-kbuild-all/202310111851.fB7Flvj5-lkp@intel.com/
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
next prev parent reply other threads:[~2023-10-11 10:51 UTC|newest]
Thread overview: 34+ messages / expand[flat|nested] mbox.gz Atom feed top
[not found] <--in-reply-to=20231006153808.9758-1-hgajjar@de.adit-jv.com>
2023-10-09 16:14 ` [PATCH v2] usb: core: hub: Add quirks for reducing device address timeout Hardik Gajjar
2023-10-09 17:43 ` Greg KH
2023-10-10 10:31 ` Hardik Gajjar
2023-10-10 11:25 ` Greg KH
2023-10-09 19:16 ` Alan Stern
2023-10-10 10:50 ` Hardik Gajjar
2023-10-10 13:40 ` Mathias Nyman
2023-10-11 8:50 ` [PATCH v3] " Hardik Gajjar
2023-10-11 9:02 ` Greg KH
2023-10-11 12:05 ` Hardik Gajjar
2023-10-11 15:23 ` Greg KH
2023-10-11 16:45 ` [PATCH v4] " Hardik Gajjar
2023-10-16 17:58 ` Greg KH
2023-10-17 16:10 ` Hardik Gajjar
2023-10-17 16:53 ` Greg KH
2023-10-17 18:59 ` Alan Stern
2023-10-21 10:15 ` Greg KH
2023-10-23 16:13 ` Hardik Gajjar
2023-10-24 15:44 ` Alan Stern
2023-10-25 14:11 ` [PATCH v5] usb: Reduce 'set_address' command timeout with a new quirk Hardik Gajjar
2023-10-25 14:13 ` Hardik Gajjar
2023-10-25 14:44 ` Alan Stern
2023-10-25 16:00 ` Sergey Shtylyov
2023-10-25 16:16 ` Sergey Shtylyov
2023-10-25 16:16 ` Sergey Shtylyov
2023-10-25 16:40 ` Hardik Gajjar
2023-10-26 10:15 ` [PATCH v6] usb: Reduce the 'SET_ADDRESS' request " Hardik Gajjar
2023-10-26 13:08 ` Mathias Nyman
2023-10-26 16:00 ` Sergey Shtylyov
2023-10-26 18:34 ` Alan Stern
2023-10-27 9:57 ` Hardik Gajjar
2023-10-27 14:45 ` Alan Stern
2023-10-11 10:50 ` kernel test robot [this message]
2023-10-11 14:15 ` [PATCH v3] usb: core: hub: Add quirks for reducing device address timeout Alan Stern
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=202310111851.fB7Flvj5-lkp@intel.com \
--to=lkp@intel.com \
--cc=erosca@de.adit-jv.com \
--cc=gregkh@linuxfoundation.org \
--cc=hgajjar@de.adit-jv.com \
--cc=jinpu.wang@ionos.com \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-usb@vger.kernel.org \
--cc=mathias.nyman@intel.com \
--cc=oe-kbuild-all@lists.linux.dev \
--cc=stern@rowland.harvard.edu \
--cc=yangyingliang@huawei.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox