From: Grygorii Strashko <grygorii.strashko@ti.com>
To: Thomas Gleixner <tglx@linutronix.de>
Cc: <bigeasy@linutronix.de>, <linux-rt-users@vger.kernel.org>,
<linux-kernel@vger.kernel.org>, Sekhar Nori <nsekhar@ti.com>
Subject: Re: [v4.1.10-rt10][PATCH 1/2] genirq: introduce new generic_handle_irq_rt_wa() api
Date: Tue, 3 Nov 2015 21:11:01 +0200 [thread overview]
Message-ID: <563906C5.8030801@ti.com> (raw)
In-Reply-To: <alpine.DEB.2.11.1511022036500.4032@nanos>
On 11/02/2015 09:38 PM, Thomas Gleixner wrote:
> On Mon, 2 Nov 2015, Grygorii Strashko wrote:
>> Now in kernel below code pattern is used by many drivers:
>> static irqreturn_t driver_xx_hw_irq_handler(int irq, void *arg)
>> {
>> <read IRQ status register>
>> <perform HW specific operations>
>>
>> for (<each set bit in IRQ status register>) {
>> <get Linux IRQ number>
>> generic_handle_irq(<Linux IRQ number>);
>> |- handle_simple_irq()
>> |-or- handle_level_irq()
>> |-or- handle_edge_irq()
>> |-handle_irq_event()
>> |-handle_irq_event_percpu()
>> ===
>> "WARNING: CPU: 1 PID: 82 at kernel/irq/handle.c:150 handle_irq_event_percpu+0x14c/0x174()
>> irq 460 handler irq_default_primary_handler+0x0/0x14 enabled interrupts"
>> ===
>> }
>> }
>>
>> On -RT above code will generate warnings, because driver_xx_hw_irq_handler()
>> will be forced threaded (by default) and, as result, generic_handle_irq()
>> will be called with IRQs enabled. To W/A this issue generic_handle_irq() can
>> be surrounded by raw_spin_lock_irqsave/irqrestore(wa_lock).
>>
>> Instead of spreading this W/A directly in many drivers this patch
>> introduces -RT specific version of generic_handle_irq() API -
>> generic_handle_irq_rt_wa(). This new generic_handle_irq_rt_wa() just calls
>> generic_handle_irq() surrounded by raw_spin_lock_irqsave/irqrestore().
>> If -RT is disabled It will fallback to generic_handle_irq().
>
> Why aren't you simply marking these demultiplex handlers with IRQ_NO_THREAD?
>
In general, it's possible. But, in this case, worst scenario will look like:
dra7xx_pcie_msi_irq_handler()
-> dw_handle_msi_irq()
[code simplified]
-> for (i = 0; i < MAX_MSI_IRQS; i++) {
...
generic_handle_irq(Y(i));
...
}
where MAX_MSI_IRQS = 32 now, but potentially can be increased up to 256.
Thanks.
--
regards,
-grygorii
next prev parent reply other threads:[~2015-11-03 19:11 UTC|newest]
Thread overview: 11+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-11-02 19:30 [v4.1.10-rt10][PATCH 0/2] PCI: dra7xx/dwc: fix "WARNING: CPU: 1 PID: 82 at kernel/irq/handle.c:150 handle_irq_event_percpu" Grygorii Strashko
2015-11-02 19:30 ` [v4.1.10-rt10][PATCH 1/2] genirq: introduce new generic_handle_irq_rt_wa() api Grygorii Strashko
2015-11-02 19:38 ` Thomas Gleixner
2015-11-03 19:11 ` Grygorii Strashko [this message]
2015-11-03 19:51 ` Thomas Gleixner
2015-11-03 20:18 ` Sebastian Andrzej Siewior
2015-11-05 16:44 ` Grygorii Strashko
2015-11-02 19:30 ` [v4.1.10-rt10] [PATCH 2/2] PCI: dra7xx: fix "WARNING: CPU: 1 PID: 82 at kernel/irq/handle.c:150 handle_irq_event_percpu" Grygorii Strashko
2015-11-03 13:46 ` [v4.1.10-rt10][PATCH 0/2] PCI: dra7xx/dwc: " Sebastian Andrzej Siewior
2015-11-03 19:11 ` Grygorii Strashko
2015-11-03 20:01 ` Thomas Gleixner
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=563906C5.8030801@ti.com \
--to=grygorii.strashko@ti.com \
--cc=bigeasy@linutronix.de \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-rt-users@vger.kernel.org \
--cc=nsekhar@ti.com \
--cc=tglx@linutronix.de \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.