From: "Jan Beulich" <JBeulich@novell.com>
To: Jeremy Fitzhardinge <jeremy@goop.org>
Cc: "Xen-devel@lists.xensource.com" <Xen-devel@lists.xensource.com>,
Tom Kopec <tek@acm.org>,
Daniel Stodden <daniel.stodden@citrix.com>
Subject: Re: [GIT PULL] Fix lost interrupt race in Xen event channels
Date: Thu, 26 Aug 2010 07:46:09 +0100 [thread overview]
Message-ID: <4C7629D10200007800012387@vpn.id2.novell.com> (raw)
In-Reply-To: <4C7558E0.1060806@goop.org>
>>> On 25.08.10 at 19:54, Jeremy Fitzhardinge <jeremy@goop.org> wrote:
> Note that this patch is specifically for upstream Xen, which doesn't
> have any pirq support in it at present.
I understand that, but saw that you had paralleling changes to the
pirq handling in your Dom0 tree.
> However, I did consider using fasteoi, but I couldn't see how to make
> it work. The problem is that it only does a single call into the
> irq_chip for EOI after calling the interrupt handler, but there is no
> call beforehand to ack the interrupt (which means clear the event flag
> in our case). This leads to a race where an event can be lost after the
> interrupt handler has returned, but before the event flag has been
> cleared (because Xen won't set pending or call the upcall function if
> the event is already set). I guess I could pre-clear the event in the
> upcall function, but I'm not sure that's any better.
That's precisely what we're doing.
> In the dom0 kernels, I followed the example of the IOAPIC irq_chip
> implementation, which does the hardware EOI in the ack call at the start
> of handle_edge_irq, can did the EOI hypercall (when necessary) there. I
> welcome a reviewer's eye on this though.
This I didn't actually notice so far.
That doesn't look right, at least in combination with ->mask() being
wired to disable_pirq(), which is empty (and btw., if the latter was
right, you should also wire ->mask_ack() to disable_pirq() to avoid
a pointless indirect call).
But even with ->mask() actually masking the IRQ I'm not certain
this is right. At the very least it'll make Xen see a potential
second instance of the same IRQ much earlier than you will
really be able to handle it. This is particularly bad for level
triggered ones, as Xen will see them right again after you
passed it the EOI notification - as a result there'll be twice as
many interrupts seen by Xen on the respective lines.
The native I/O APIC can validly do this as ->ack() only gets
called for edge triggered interrupts (which is why ->eoi() is
wired to ack_apic_level()).
> I was thinking specifically of the timer, debug and console virqs. The
> last is the only one which could conceivably be non-percpu, but in
> practice I think it would be a bad idea to put it on anything other than
> cpu0. What other global virqs are there? Nothing that's high-frequency
> enough to be worth migrating?
Once supported in your tree, oprofile could have high interrupt
rates, and the trace buffer ones might too. Admittedly both are
debugging aids, but I don't think it'd be nice for them to influence
performance more than necessary.
Jan
next prev parent reply other threads:[~2010-08-26 6:46 UTC|newest]
Thread overview: 25+ messages / expand[flat|nested] mbox.gz Atom feed top
2010-08-24 21:35 [GIT PULL] Fix lost interrupt race in Xen event channels Jeremy Fitzhardinge
2010-08-25 7:52 ` [Xen-devel] " Jan Beulich
2010-08-25 10:04 ` Daniel Stodden
2010-08-25 11:24 ` Jan Beulich
2010-08-25 17:54 ` Jeremy Fitzhardinge
2010-08-26 6:46 ` Jan Beulich [this message]
2010-08-26 16:32 ` Jeremy Fitzhardinge
2010-08-27 8:56 ` Jan Beulich
2010-08-27 20:43 ` Daniel Stodden
2010-08-27 21:49 ` Daniel Stodden
2010-08-27 23:43 ` Jeremy Fitzhardinge
2010-08-30 8:03 ` Jan Beulich
2010-08-30 8:43 ` Jan Beulich
2010-08-30 8:48 ` Keir Fraser
2010-08-30 9:06 ` Jan Beulich
2010-08-30 9:15 ` Keir Fraser
2010-08-30 9:22 ` Jan Beulich
2010-08-30 16:36 ` Jeremy Fitzhardinge
2010-08-31 6:38 ` Jan Beulich
2010-09-03 18:46 ` Using handle_fasteoi_irq for pirqs Jeremy Fitzhardinge
2010-09-06 7:58 ` Jan Beulich
2010-09-07 1:53 ` Jeremy Fitzhardinge
2010-09-07 6:58 ` Jan Beulich
2010-09-07 8:02 ` Jeremy Fitzhardinge
2010-09-07 8:58 ` Jan Beulich
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=4C7629D10200007800012387@vpn.id2.novell.com \
--to=jbeulich@novell.com \
--cc=Xen-devel@lists.xensource.com \
--cc=daniel.stodden@citrix.com \
--cc=jeremy@goop.org \
--cc=tek@acm.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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).