On 4.1.2025 17.51, WangYuli wrote:
When inserting a USB device, examining hcd->rsrc_start can be helpful in identifying which hcd is mounted, as the physical address represented here is typically unique. The following code snippet demonstrates this: struct usb_hcd *hcd = bus_to_hcd(udev->bus); unsigned long long usb_hcd_addr = (unsigned long long)hcd->rsrc_start; However, this approach has limitations now. For USB hosts with an MMIO interface, the effectiveness of this method is restricted to USB 2.0. Becase commit 3429e91a661e ("usb: host: xhci: add platform driver support") assigned res->start to hcd->rsrc_start. But shared_hcd->rsrc_start remains unassigned, which is also necessary in certain scenarios.
Could you expand on those scenarios? Is it possible those could be solved with something like: unsigned long long usb_hcd_addr; struct usb_hcd *hcd = bus_to_hcd(udev->bus); if (!usb_hcd_is_primary_hcd(hcd)) hcd = hcd->primary_hcd; usb_hcd_addr = (unsigned long long)hcd->rsrc_start; That should work for all hcds. Thanks Mathias