Re: Handling devices that don't have a bus

From: Greg KH
Date: Fri Mar 31 2006 - 00:42:29 EST


On Thu, Mar 30, 2006 at 03:45:50PM -0500, Alan Stern wrote:
> Greg et al.:
>
> I recently tried running the dummy_hcd driver for the first time in a
> while, and it crashed when the gadget driver was unloaded. It turns out
> this was because the gadget's embedded struct device is registered without
> a bus, which triggers an oops when the device's driver is unbound. The
> oops could be fixed by doing this:

Why not make the dummy gadget a platform device? That should keep this
from happening, right?

> Index: usb-2.6/drivers/base/dd.c
> ===================================================================
> --- usb-2.6.orig/drivers/base/dd.c
> +++ usb-2.6/drivers/base/dd.c
> @@ -209,7 +209,7 @@ static void __device_release_driver(stru
> sysfs_remove_link(&dev->kobj, "driver");
> klist_remove(&dev->knode_driver);
>
> - if (dev->bus->remove)
> + if (dev->bus && dev->bus->remove)
> dev->bus->remove(dev);
> else if (drv->remove)
> drv->remove(dev);
>
> but I'm not so sure this is the right approach. (Russell wrote the line
> that this would change; that's why I have CC'ed him.) Is the current
> policy that every device is supposed to belong to a bus?
>
> If gadgets were registered on a bus, you would expect it to be the bus of
> their parent USB device controllers. As it happens, most of the UDC
> drivers don't register their gadgets in sysfs at all. dummy_hcd and
> net2280 are exceptions. Presumably this same oops would affect net2280
> but I haven't tried it.
>
> Part of the problem here is that most of the USB controllers are platform
> devices and so belong on the platform bus. That's true of dummy_hcd.
> But struct usb_gadget contains an embedded struct device, not an embedded
> struct platform_device... so the gadget _can't_ be registered on its
> parent's bus.

ah, ick :(

> I suppose David could change things so that usb_gadget does contain a
> platform_device. But then what about the net2280, which is a PCI device
> rather than a platform device? Would it want to register its child on the
> platform bus?
>
> What's the right thing to do here?

I think your patch is the right thing. Care to resend it with a proper
Signed-off-by: line so I can apply it?

thanks,

greg k-h
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/