From: Jan Kiszka <jan.kiszka@siemens.com>
To: Gilles Chanteperdrix <gilles.chanteperdrix@xenomai.org>
Cc: Xenomai <xenomai@xenomai.org>
Subject: Re: [Xenomai] one-shot fasteoi irqs
Date: Wed, 27 Mar 2013 14:30:49 +0100 [thread overview]
Message-ID: <5152F489.1000106@siemens.com> (raw)
In-Reply-To: <5152EC25.7060004@xenomai.org>
On 2013-03-27 13:55, Gilles Chanteperdrix wrote:
> Ok, how about this one:
>
> iff --git a/kernel/irq/chip.c b/kernel/irq/chip.c
> index 11e75d1..47d1d27 100644
> --- a/kernel/irq/chip.c
> +++ b/kernel/irq/chip.c
> @@ -256,13 +256,19 @@ void mask_irq(struct irq_desc *desc)
> void unmask_irq(struct irq_desc *desc)
> {
> unsigned long flags;
> -
> +
> + flags = hard_cond_local_irq_save();
> +#ifdef CONFIG_IPIPE
> + if (desc->irq_data.chip->irq_release) {
> + desc->irq_data.chip->irq_release(&desc->irq_data);
> + irq_state_clr_masked(desc);
Are you sure that every call to unmask_irq implies (under I-pipe) that
the IRQ was held before so that release_irq is appropriate here? Or did
you rather want to patch cond_unmask_irq this way? But that has
unfortunately also more users than our fast_eoi path.
> + } else
> +#endif /* CONFIG_IPIPE */
> if (desc->irq_data.chip->irq_unmask) {
> - flags = hard_cond_local_irq_save();
> desc->irq_data.chip->irq_unmask(&desc->irq_data);
> irq_state_clr_masked(desc);
> - hard_cond_local_irq_restore(flags);
> }
> + hard_cond_local_irq_restore(flags);
> }
>
> /*
> @@ -463,8 +469,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_unmask_irq(desc);
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.
Jan
> out_eoi:
> #else /* !CONFIG_IPIPE */
> if (desc->istate & IRQS_ONESHOT)
> @@ -682,12 +687,15 @@ void __ipipe_end_level_irq(unsigned irq, struct irq_desc *desc)
> void __ipipe_ack_fasteoi_irq(unsigned irq, struct irq_desc *desc)
> {
> desc->irq_data.chip->irq_hold(&desc->irq_data);
> + irq_state_set_masked(desc);
> }
>
> void __ipipe_end_fasteoi_irq(unsigned irq, struct irq_desc *desc)
> {
> - if (desc->irq_data.chip->irq_release)
> + if (desc->irq_data.chip->irq_release) {
> + irq_state_clr_masked(desc);
> desc->irq_data.chip->irq_release(&desc->irq_data);
> + }
> }
>
> void __ipipe_ack_edge_irq(unsigned irq, struct irq_desc *desc)
>
>
>
--
Siemens AG, Corporate Technology, CT RTC ITP SDP-DE
Corporate Competence Center Embedded Linux
next prev parent reply other threads:[~2013-03-27 13:30 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 [this message]
2013-03-27 20:50 ` Gilles Chanteperdrix
2013-04-02 21:44 ` Gilles Chanteperdrix
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=5152F489.1000106@siemens.com \
--to=jan.kiszka@siemens.com \
--cc=gilles.chanteperdrix@xenomai.org \
--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.