Thread (20 messages) 20 messages, 5 authors, 2014-08-20

[PATCH v4] irqchip: gic: Allow gic_arch_extn hooks to call into scheduler

From: Russell King - ARM Linux <hidden>
Date: 2014-08-13 15:05:53
Also in: linux-arm-msm, lkml

On Wed, Aug 13, 2014 at 07:55:26AM -0700, Stephen Boyd wrote:
On 08/13, Russell King - ARM Linux wrote:
quoted
On Wed, Aug 13, 2014 at 06:57:18AM -0700, Stephen Boyd wrote:
quoted
Commit 1a6b69b6548c (ARM: gic: add CPU migration support,
2012-04-12) introduced an acquisition of the irq_controller_lock
in gic_raise_softirq() which can lead to a spinlock recursion if
the gic_arch_extn hooks call into the scheduler (via complete()
or wake_up(), etc.). This happens because gic_arch_extn hooks are
normally called with the irq_controller_lock held and calling
into the scheduler may cause us to call smp_send_reschedule()
which will grab the irq_controller_lock again. Here's an example
from a vendor kernel (note that the gic_arch_extn hook code here
isn't actually in mainline):
Here's a question: why would you want to call into the scheduler from
the gic_arch_extn code?
In this case we want to send a message to another processor when
an interrupt is enabled that's only a wakeup interrupt in certain
low power states. It's done sort of indirectly, but basically we
block that low power state from being entered so we can ensure
that the interrupt wakes us up from a lighter version of suspend.
No, that's not the correct answer for the question I asked.  I did not
ask "why would you want to call into the IRQ code from the scheduler".
I asked "why would you want to call into the scheduler from the
gic_arch_extn code?"

That's a completely different question.  Let me rephrase to try and get
an answer to my question: Why are you calling complete() or wake_up()
from the gic_arch_extn code?
quoted
static int __disable_irq_nosync(unsigned int irq)
{
        unsigned long flags;
        struct irq_desc *desc = irq_get_desc_buslock(irq, &flags, IRQ_GET_DESC_CHECK_GLOBAL);
We got the lock here.
Yes, Daniel pointed that out, which makes this fine of course.

-- 
FTTC broadband for 0.8mile line: currently at 9.5Mbps down 400kbps up
according to speedtest.net.
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help