From: Gilles Chanteperdrix <gilles.chanteperdrix@xenomai.org>
To: Jan Kiszka <jan.kiszka@siemens.com>
Cc: Xenomai <xenomai@xenomai.org>
Subject: Re: [Xenomai] one-shot fasteoi irqs
Date: Tue, 02 Apr 2013 23:44:52 +0200 [thread overview]
Message-ID: <515B5154.2000802@xenomai.org> (raw)
In-Reply-To: <5152F489.1000106@siemens.com>
On 03/27/2013 02:30 PM, Jan Kiszka wrote:
> I'm wondering now why we need this differently for the I-pipe case.
>
> Let's revisit what happens with a fasteoi normally:
>
> - it's masked only if it's a oneshot IRQ before calling the flow handler
> - it's unmasked after the flow handling if the thread was not woken up
>
> With I-pipe we already enter handle_fasteoi_irq with the IRQ masked. The
> conditions and spots to unmask are:
> - from handle_fasteoi_irq if the thread wasn't woken up or we have
> non-threaded or non-oneshot handling
> - otherwise on end_irq from the handler thread
>
> Do you think this is correct? If so, I do not think it matches this
> patch yet.
Hi,
here is a much simpler patch:
diff --git a/kernel/irq/chip.c b/kernel/irq/chip.c
index 11e75d1..a1c9918 100644
--- a/kernel/irq/chip.c
+++ b/kernel/irq/chip.c
@@ -421,6 +421,13 @@ static inline void preflow_handler(struct irq_desc *desc)
static inline void preflow_handler(struct irq_desc *desc) { }
#endif
+static void cond_release_fasteoi_irq(struct irq_desc *desc)
+{
+ if (desc->irq_data.chip->irq_release &&
+ !irqd_irq_disabled(&desc->irq_data) && !desc->threads_oneshot)
+ desc->irq_data.chip->irq_release(&desc->irq_data);
+}
+
/**
* handle_fasteoi_irq - irq handler for transparent controllers
* @irq: the interrupt number
@@ -463,8 +470,7 @@ handle_fasteoi_irq(unsigned int irq, struct irq_desc *desc)
#ifdef CONFIG_IPIPE
/* XXX: IRQCHIP_EOI_IF_HANDLED is ignored. */
- if (desc->irq_data.chip->irq_release)
- desc->irq_data.chip->irq_release(&desc->irq_data);
+ cond_release_fasteoi_irq(desc);
out_eoi:
#else /* !CONFIG_IPIPE */
if (desc->istate & IRQS_ONESHOT)
diff --git a/kernel/irq/manage.c b/kernel/irq/manage.c
index e49a288..e7ae8bd 100644
--- a/kernel/irq/manage.c
+++ b/kernel/irq/manage.c
@@ -715,9 +715,14 @@ again:
desc->threads_oneshot &= ~action->thread_mask;
+#ifndef CONFIG_IPIPE
if (!desc->threads_oneshot && !irqd_irq_disabled(&desc->irq_data) &&
irqd_irq_masked(&desc->irq_data))
unmask_irq(desc);
+#else /* CONFIG_IPIPE */
+ if (!desc->threads_oneshot && !irqd_irq_disabled(&desc->irq_data))
+ desc->ipipe_end(desc->irq_data.irq, desc);
+#endif /* CONFIG_IPIPE */
out_unlock:
raw_spin_unlock_irq(&desc->lock);
--
Gilles.
next prev parent reply other threads:[~2013-04-02 21:44 UTC|newest]
Thread overview: 14+ messages / expand[flat|nested] mbox.gz Atom feed top
2013-03-26 23:05 [Xenomai] one-shot fasteoi irqs Gilles Chanteperdrix
2013-03-27 6:50 ` Jan Kiszka
2013-03-27 9:23 ` Gilles Chanteperdrix
2013-03-27 9:30 ` Jan Kiszka
2013-03-27 12:55 ` Gilles Chanteperdrix
2013-03-27 13:30 ` Jan Kiszka
2013-03-27 20:50 ` Gilles Chanteperdrix
2013-04-02 21:44 ` Gilles Chanteperdrix [this message]
2013-04-06 9:43 ` Jan Kiszka
2013-04-08 21:09 ` Gilles Chanteperdrix
2013-04-10 9:32 ` Philippe Gerum
2013-04-10 10:36 ` Jan Kiszka
2013-04-10 19:36 ` Gilles Chanteperdrix
2013-04-11 7:35 ` Philippe Gerum
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=515B5154.2000802@xenomai.org \
--to=gilles.chanteperdrix@xenomai.org \
--cc=jan.kiszka@siemens.com \
--cc=xenomai@xenomai.org \
/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.