On Wed, Nov 28, 2012 at 12:39:14PM -0500, Alan Stern wrote: > On Sat, 17 Nov 2012, Lan Tianyu wrote: > > --- a/drivers/usb/core/hub.c > > +++ b/drivers/usb/core/hub.c > > @@ -1546,6 +1546,25 @@ static int hub_configure(struct usb_hub *hub, > > dev_err(hub->intfdev, > > "couldn't create port%d device.\n", i + 1); > > > > + if (!hub_is_superspeed(hdev)) { > > + for (i = 1; i <= hdev->maxchild; i++) > > + if (hub->ports[i - 1]->connect_type > > + == USB_PORT_CONNECT_TYPE_HARD_WIRED) > > + hub->descriptor->u.hs.DeviceRemovable[i/8] > > + |= 1 << (i%8); > > + } else { > > + u16 port_removable = > > + le16_to_cpu(hub->descriptor->u.ss.DeviceRemovable); > > + > > + for (i = 1; i <= hdev->maxchild; i++) > > + if (hub->ports[i - 1]->connect_type > > + == USB_PORT_CONNECT_TYPE_HARD_WIRED) > > + port_removable |= 1 << i; > > + > > + hub->descriptor->u.ss.DeviceRemovable = > > + cpu_to_le16(port_removable); > > + } > > + > > You've got all this code here, and you added copies of the same thing > to ehci-hcd and xhci-hcd. That's wasteful, and it also ignores the > other HCDs. > > Instead, how about sticking the new code into a separate function: > > void hub_adjust_DeviceRemovable(struct usb_device *hdev, > struct usb_hub_descriptor *desc); > > Call this new function here and at the appropriate place in > hcd.c:rh_call_control(). Then no modifications would be needed in > ehci-hcd or xhci-hcd. So you would basically let EHCI and xHCI set the DeviceRemovable bits in their hub descriptors and then have the USB core overwrite them? If a userspace program like lsusb asks for the hub descriptors, would they see the updated version, or the original version? The shared code to overwrite the bits should probably print a warning if the host and ACPI bits differ. Sarah Sharp -- To unsubscribe from this list: send the line "unsubscribe linux-usb" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html