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. thanks, greg k-h
