On Wed, Sep 29, 2021 at 03:48:22PM -0700, Rajat Jain wrote: > Currently all usb root hubs are always marked as DEVICE_REMOVABLE_UNKNOWN > unconditionally. Let us try to help the users to identify the removable > root hubs, by checking the device on which the root hub sits. If the base > (parent) device on which the root hub sits, is removable (e.g. on > thunderbolt docks), then the roothub is also marked as removable. > > Signed-off-by: Rajat Jain <rajatja@xxxxxxxxxx> > --- > drivers/usb/core/hub.c | 10 +++++++++- > 1 file changed, 9 insertions(+), 1 deletion(-) > > diff --git a/drivers/usb/core/hub.c b/drivers/usb/core/hub.c > index 86658a81d284..45d1c81b121d 100644 > --- a/drivers/usb/core/hub.c > +++ b/drivers/usb/core/hub.c > @@ -2440,8 +2440,16 @@ static void set_usb_port_removable(struct usb_device *udev) > > dev_set_removable(&udev->dev, DEVICE_REMOVABLE_UNKNOWN); > > - if (!hdev) > + if (!hdev) { > + /* > + * If the root hub sits on a removable device, mark the root hub > + * removable as well. This helps with the USB root hubs sitting > + * on the thunderbolt docks. > + */ > + if (udev->dev.parent && dev_is_removable(udev->dev.parent)) > + dev_set_removable(&udev->dev, DEVICE_REMOVABLE); > return; > + } How far "up the chain" are you going to go here? What if the thunderbolt device is on a PCI device that can be removed? What if that PCI device is on a PCI bus that can be removed? Is a USB controller on a docking device really "removable"? The goal here is to say if this device itself is removable in the sense of "I can yank this out", and a roothub is not that type of device. What problem are you trying to solve with this series? thanks, greg k-h