Re: Behaviour of device_register



On Wed, March 5, 2008 11:46 pm, Greg KH wrote:
On Wed, Mar 05, 2008 at 11:25:48PM +0000, Adrian McMenamin wrote:
The observed behaviour for me is that it appears to be blocking the
vblank interrupt on my box (or more accurately stopping the workqueue
that the interrupt handler calls from running). And without the vblank
my bus won't process dma and so therefore the attempt to register the
device in question fails.

But I can see no reason from a glance over the code why that (vblanks
being blocked) would be the case - have I missed something and the
vblanks will be blocked, or should I be looking elsewhere for the root
cause of this problem?

device_register(), on it's own, does not touch any hardware, nor prevent
anything else in the kernel from happening.

So I think you need to look elsewhere, like into the bus that is doing
the device_register() call :)



It turns out this is a lock contention issue.

The code blocks waiting for a lock that will never be freed.

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



Relevant Pages

  • Re: Behaviour of device_register
    ... vblank interrupt on my box (or more accurately stopping the workqueue ... And without the vblank ... So I think you need to look elsewhere, like into the bus that is doing ... The code blocks waiting for a lock that will never be freed. ...
    (Linux-Kernel)
  • Re: Behaviour of device_register
    ... vblank interrupt on my box (or more accurately stopping the workqueue ... And without the vblank ... my bus won't process dma and so therefore the attempt to register the ... So I think you need to look elsewhere, like into the bus that is doing ...
    (Linux-Kernel)
  • Behaviour of device_register
    ... The observed behaviour for me is that it appears to be blocking the ... vblank interrupt on my box (or more accurately stopping the workqueue ... And without the vblank ...
    (Linux-Kernel)