public inbox for linux-kernel@vger.kernel.org
 help / color / mirror / Atom feed
* Handling devices that don't have a bus
@ 2006-03-30 20:45 Alan Stern
  2006-03-30 21:28 ` David Brownell
                   ` (2 more replies)
  0 siblings, 3 replies; 9+ messages in thread
From: Alan Stern @ 2006-03-30 20:45 UTC (permalink / raw)
  To: Greg KH; +Cc: David Brownell, Russell King, Kernel development list

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:

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.

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?

Alan Stern


^ permalink raw reply	[flat|nested] 9+ messages in thread

end of thread, other threads:[~2006-04-01 20:14 UTC | newest]

Thread overview: 9+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2006-03-30 20:45 Handling devices that don't have a bus Alan Stern
2006-03-30 21:28 ` David Brownell
2006-03-30 22:26 ` Greg KH
2006-04-01  9:38   ` Russell King
2006-04-01  9:47 ` Russell King
2006-04-01 16:46   ` Alan Stern
2006-04-01 17:12     ` Russell King
2006-04-01 17:32     ` David Brownell
2006-04-01 20:14       ` Alan Stern

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox