2005-02-06 14:29:18

by Robert Schwebel

[permalink] [raw]
Subject: recursively unregistering platform devices

Hi,

I have a locking problem with platform devices in a little bit unusual
scenario; we have an FPGA which has a device information memory block
for the several "parts" in the FPGA. So we have written a base driver
which registers the device information block with the driver model, then
looks what is in the FPGA, registers the according "devices" with the
driver model and issues hotplug events to load the related drivers.

The registration works fine, although we call platform_add_devices()
from the base driver for all the "sub devices"; but when we try to
unload the drivers there is a deadlock. On driver exit we call
platform_device_unregister() for the base driver which seems to be run
under a lock which is also being aquired when unregistering the devices
"inside" the FPGA.

Before I investigate deeper - did anyone see this behaviour before?

Robert
--
Dipl.-Ing. Robert Schwebel | http://www.pengutronix.de
Pengutronix - Linux Solutions for Science and Industry
Handelsregister: Amtsgericht Hildesheim, HRA 2686
Hannoversche Str. 2, 31134 Hildesheim, Germany
Phone: +49-5121-206917-0 | Fax: +49-5121-206917-9


2005-02-17 00:32:54

by Greg KH

[permalink] [raw]
Subject: Re: recursively unregistering platform devices

On Sun, Feb 06, 2005 at 03:29:12PM +0100, Robert Schwebel wrote:
> Hi,
>
> I have a locking problem with platform devices in a little bit unusual
> scenario; we have an FPGA which has a device information memory block
> for the several "parts" in the FPGA. So we have written a base driver
> which registers the device information block with the driver model, then
> looks what is in the FPGA, registers the according "devices" with the
> driver model and issues hotplug events to load the related drivers.
>
> The registration works fine, although we call platform_add_devices()
> from the base driver for all the "sub devices"; but when we try to
> unload the drivers there is a deadlock. On driver exit we call
> platform_device_unregister() for the base driver which seems to be run
> under a lock which is also being aquired when unregistering the devices
> "inside" the FPGA.
>
> Before I investigate deeper - did anyone see this behaviour before?

Known issue, you can't recursivly register or unregister with the driver
core right now. I'm working on fixing this issue.

thanks,

greg k-h

2005-02-17 06:51:30

by Robert Schwebel

[permalink] [raw]
Subject: Re: recursively unregistering platform devices

On Wed, Feb 16, 2005 at 03:56:50PM -0800, Greg KH wrote:
> Known issue, you can't recursivly register or unregister with the
> driver core right now. I'm working on fixing this issue.

Ok, great! Tell me if you have something we can test.

Robert
--
Dipl.-Ing. Robert Schwebel | http://www.pengutronix.de
Pengutronix - Linux Solutions for Science and Industry
Handelsregister: Amtsgericht Hildesheim, HRA 2686
Hannoversche Str. 2, 31134 Hildesheim, Germany
Phone: +49-5121-206917-0 | Fax: +49-5121-206917-9