On 9/25/2026 7:18 AM, Greg Kroah-Hartman wrote:
> On Thu, Sep 24, 2026 at 06:09:01PM +0200, Igor Skalkin wrote:
>> From: Aiswarya Cyriac <[email protected]>
>>
>> Add the common virtqueue handling code (command, event and data
>> queues) shared by every role, and the virtio-usb host controller
>> (HCD) implementation, wiring it up as the host role of the dual-role
>> driver on top of that common code.
>>
>> Each host-role virtual port gets its own HS+SS usb_hcd pair and its
>> own root hub (struct virtio_usb_hc_vp), with a fixed
>> VIRTIO_USB_VP_MAX_PORTS (8) leaf slots pre-allocated at VP init time
>> and reused across connect/disconnect - never dynamically alloc'd or
>> freed. This lets the backend forward more than one physical socket -
>> and, for host ports behind a physical hub, more than one leaf device
>> per socket - as independent virtual ports from the start, instead of
>> collapsing everything onto a single shared root hub and having to
>> revisit that decision once more than one host-role port needs to
>> exist at the same time.
>>
>> virtio_usb_add_hcd() derives each VP's HCD bus_name from the parent
>> virtio_device with devm_kasprintf() rather than a stack buffer, since
>> usb_create_hcd()/usb_create_shared_hcd() store that pointer as-is in
>> hcd->self.bus_name without copying it - it must outlive the HCD
>> itself.
>>
>> Every port is host-role for now, since no other role exists yet;
>> vports[].role is populated unconditionally until later commits add
>> device role and OTG-based role resolution.
>>
>> Signed-off-by: Aiswarya Cyriac <[email protected]>
>> Co-developed-by: Anton Yakovlev <[email protected]>
>> Signed-off-by: Anton Yakovlev <[email protected]>
>> Signed-off-by: Vasilii Ianikeev <[email protected]>
>> Co-developed-by: Igor Skalkin <[email protected]>
>> Signed-off-by: Igor Skalkin <[email protected]>
>> ---
>>  drivers/usb/virtio_usb/Makefile     |    4 
>>  drivers/usb/virtio_usb/controller.c |  105 ++
>>  drivers/usb/virtio_usb/controller.h |   35 
>>  drivers/usb/virtio_usb/host.c       | 1335 
>> ++++++++++++++++++++++++++++++++++++
>>  drivers/usb/virtio_usb/host.h       |  203 +++++
>>  drivers/usb/virtio_usb/vq_common.c  |  740 +++++++++++++++++++
>>  drivers/usb/virtio_usb/vq_common.h  |  163 ++++
>>  include/uapi/linux/virtio_usb.h     |   16 
>>  8 files changed, 2585 insertions(+), 16 deletions(-)
>>  create mode 100644 drivers/usb/virtio_usb/host.c
>>  create mode 100644 drivers/usb/virtio_usb/host.h
>>  create mode 100644 drivers/usb/virtio_usb/vq_common.c
>>  create mode 100644 drivers/usb/virtio_usb/vq_common.h
>>
>> diff --git a/drivers/usb/virtio_usb/controller.c 
>> b/drivers/usb/virtio_usb/controller.c
>> index 2fc6f50..216edfc 100644
>> --- a/drivers/usb/virtio_usb/controller.c
>> +++ b/drivers/usb/virtio_usb/controller.c
>> @@ -6,9 +6,16 @@
>>   */
>>  
>>  #include <linux/module.h>
>> +#include <linux/moduleparam.h>
>>  #include <uapi/linux/virtio_ids.h>
>>  
>>  #include "controller.h"
>> +#include "host.h"
>> +#include "vq_common.h"
>> +
>> +u32 virtio_usb_cmd_timeout_ms = MSEC_PER_SEC;
>> +module_param_named(cmd_timeout_ms, virtio_usb_cmd_timeout_ms, uint, 0644);
>> +MODULE_PARM_DESC(cmd_timeout_ms, "Command completion timeout in 
>> milliseconds");
> 
> This is not the 1990's, please do not add new module parameters.  Just
> make it work without manual configuration at module load time.
> 
> If you really need a configuration option, make it per-device and use
> the correct, modern, apis for it.
> 
Agreed, will remove it.

> thanks,
> 
> greg k-h


Reply via email to