fix spinlock recursion in hvc_console
authorChristian Borntraeger <borntraeger@de.ibm.com>
Thu, 7 Aug 2008 07:18:34 +0000 (09:18 +0200)
committerRusty Russell <rusty@rustcorp.com.au>
Tue, 12 Aug 2008 07:52:55 +0000 (17:52 +1000)
commitb1b135c8d619cb2c7045d6ee4e48375882518bb5
tree7c48ccd12e2d01e548351f34bde77fb13f5dc513
parented6d68763b8b589c0ae9d231cbd72bd01f6685c5
fix spinlock recursion in hvc_console

commit 611e097d7707741a336a0677d9d69bec40f29f3d
Author: Christian Borntraeger <borntraeger@de.ibm.com>
hvc_console: rework setup to replace irq functions with callbacks
introduced a spinlock recursion problem.

request_irq tries to call the handler if the IRQ is shared.
The irq handler of hvc_console calls hvc_poll and hvc_kill
which might take the hvc_struct spinlock. Therefore, we have
to call request_irq outside the spinlock.

We can move the notifier_add safely outside the spinlock as ->data must
not be changed by the backend. Otherwise, tty_hangup would fail anyway.

Signed-off-by: Christian Borntraeger <borntraeger@de.ibm.com>
Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
drivers/char/hvc_console.c