recursive call to platform_device_register deadlocks

From: Jamey Hicks
Date: Sat Jun 18 2005 - 09:39:28 EST



We wrote soc_device to handle ASICs that were structured as a number of subcomponents, some of which are reused from ASIC to ASIC. This enables the drivers for the subcomponents to be in separate files, loaded as modules, and enhances code reuse. We submitted soc_device, but it was pointed out that platform_device probably does what we want.

We've started working on replacing uses of soc_device in handhelds drivers by platform_device. One of the things we ran into is that the platform_device driver for an ASIC was calling soc_device_register inside its probe function. If this is converted to platform_device_register, then the process deadlocks because bus_add_device locks platform_bus_type.

We could restructure the toplevel driver so that it does not call platform_device inside its probe function. An alternative would be to add a pointer to a vector of subdevices to platform_device and have it register the subdevices after it has probed the toplevel device. Do you have any recommendations?

Thanks,
Jamey Hicks

-
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/