From: Wolfgang Mauerer <wolfgang.mauerer@domain.hid>
To: adeos-main <adeos-main@gna.org>
Cc: "Kiszka, Jan" <jan.kiszka@domain.hid>,
Philippe Gerum <rpm@xenomai.org>,
"Hillier, Gernot" <gernot.hillier@domain.hid>
Subject: [Adeos-main] Fasteoi unmasking issue
Date: Mon, 28 Nov 2011 14:05:24 +0100 [thread overview]
Message-ID: <4ED38714.2000207@domain.hid> (raw)
Dear all,
we are facing some difficulties with GSI interrupt storms
originating from a PCI card that seem to be caused by
ipipe: The card is passed through to qemu-kvm (the setup
is based on the patches sent by Jan some time ago). Once
the card becomes active, we are hit by a tremendous amount
of interrupts (> 100000/s) that keep ipipe fully occupied.
The observed pattern is (excerpt from the ipipe tracer)
:| common_interrupt+0x20 (__ipipe_spin_unlock_irqrestore+0x62)
:| __ipipe_handle_irq+0x11 (common_interrupt+0x27)
(...)
: handle_irq+0x9 (do_IRQ+0x66)
: irq_to_desc+0x4 (handle_irq+0x15)
: handle_fasteoi_irq+0x14 (handle_irq+0x22)
(...)
: unmask_ioapic_irq+0x4 (handle_fasteoi_irq+0x94)
: unmask_ioapic+0xd (unmask_ioapic_irq+0x14)
: __ipipe_spin_lock_irqsave+0x7 (unmask_ioapic+0x23)
:| __ipipe_spin_lock_irqsave+0x93 (unmask_ioapic+0x23)
:| __io_apic_modify_irq+0x4 (unmask_ioapic+0x41)
:| __ipipe_unlock_irq+0x11 (unmask_ioapic+0x66)
:| __ipipe_spin_unlock_irqrestore+0x9 (unmask_ioapic+0x75)
:| __ipipe_spin_unlock_irqrestore+0x60 (unmask_ioapic+0x75)
:| common_interrupt+0x20 (__ipipe_spin_unlock_irqrestore+0x62)
That is, as soon as the IRQ in question is unmasked, the
next one is immediately received, and the interrupt handler
in non-RT context never gets a chance to actually service
the interrupt.
The problem seems to be caused by unmasking the IRQ in
handle_fasteoi_irq(), and with a hack along the lines of
--- a/kernel/irq/chip.c
+++ b/kernel/irq/chip.c
@@ -586,7 +586,8 @@ handle_fasteoi_irq(unsigned int irq, struct irq_desc
*desc)
raw_spin_lock(&desc->lock);
desc->status &= ~IRQ_INPROGRESS;
#ifdef CONFIG_IPIPE
- desc->irq_data.chip->irq_unmask(&desc->irq_data);
+ if (irq != WHICHEVER_IRQ_CAUSES_THE_STORM)
+ desc->irq_data.chip->irq_unmask(&desc->irq_data);
out:
#else
out:
the issue is solved.
So the question is: Why is it okay to unconditionally unmask
all interrupts in the fasteoi handler? All cards that re-send
interrupts at high frequencies unless they are properly handled
by their device driver should cause the same problem.
I take the early unmasking is an optimisation, or are there any
further reasons for the unconditional unmasking in
handle_fasteoi_irq()?
Thanks & best regards, Wolfgang
--
Siemens AG, Open Source Platforms,
Corporate Competence Centre Embedded Linux
next reply other threads:[~2011-11-28 13:05 UTC|newest]
Thread overview: 5+ messages / expand[flat|nested] mbox.gz Atom feed top
2011-11-28 13:05 Wolfgang Mauerer [this message]
2011-11-29 14:13 ` [Adeos-main] Fasteoi unmasking issue Philippe Gerum
2011-11-29 22:25 ` Wolfgang Mauerer
2011-11-30 11:31 ` Wolfgang Mauerer
-- strict thread matches above, loose matches on Subject: below --
2011-11-29 13:09 Jan Kiszka
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=4ED38714.2000207@domain.hid \
--to=wolfgang.mauerer@domain.hid \
--cc=adeos-main@gna.org \
--cc=gernot.hillier@domain.hid \
--cc=jan.kiszka@domain.hid \
--cc=rpm@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.