From: Stefan Bader <stefan.bader@canonical.com>
To: Ian Campbell <Ian.Campbell@citrix.com>
Cc: Andrew Cooper <Andrew.Cooper3@citrix.com>,
"xen-devel@lists.xen.org" <xen-devel@lists.xen.org>
Subject: Re: Strange PVM spinlock case revisited
Date: Wed, 13 Feb 2013 12:31:15 +0100 [thread overview]
Message-ID: <511B7983.7000907@canonical.com> (raw)
In-Reply-To: <1360603744.20449.74.camel@zakaz.uk.xensource.com>
[-- Attachment #1.1: Type: text/plain, Size: 1937 bytes --]
On 11.02.2013 18:29, Ian Campbell wrote:
> An interesting hack^Wexperiment might be to make xen_poll_irq use a
> timeout and see if that unwedges things -- this would help confirm that
> the issue is on nested wakeup.
>
So I did go forward and replaced xen_poll_irq by xen_poll_irq_timeout and it did
get rid of the hang. Though I think there is a big taint there. There was
only one other user of poll_irq_timeout in the kernel code. And that uses
"jiffies + <timeout>*HZ". But when I look at the Xen side in do_poll, that looks
like it is using timeout in a absolute "ns since boot" (of hv/dom0) way. Not
sure how that ever can work. The ns since boot in the guest clearly is always
behind the host (and jiffies isn't ns either).
Effectively I likely got rid of any wait time in the hypervisor and back to
mostly spinning. Which matches the experience that the test run never gets stuck
waiting for a timeout. That maybe proves the stacking is an issue but also is
likely a bit too aggressive in not having any... :/
I will try to think of some better way. Not sure the thinking is realistic but
maybe that could happen:
xen_spin_lock_slow(a)
...
enables irq and upcalls are pending
upcall processing wants lock b
xen_spin_lock_slow(b)
--- just before replacing lock_spinners ---
xen_spin_unlock_slow(a)
finds other vcpu, triggers
IRQ
lock b is top spinner
going into poll_irq
poll_irq returns
lock a gets restored
so maybe no spinners on b
dropping out to xen_spin_lock
unlock of b not finding any
spinners
lock b acquired
That way the irq for lock a maybe get lost...
[-- Attachment #1.2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 899 bytes --]
[-- Attachment #2: Type: text/plain, Size: 126 bytes --]
_______________________________________________
Xen-devel mailing list
Xen-devel@lists.xen.org
http://lists.xen.org/xen-devel
next prev parent reply other threads:[~2013-02-13 11:31 UTC|newest]
Thread overview: 13+ messages / expand[flat|nested] mbox.gz Atom feed top
2013-02-08 15:33 Strange PVM spinlock case revisited Stefan Bader
2013-02-11 17:29 ` Ian Campbell
2013-02-12 13:42 ` Stefan Bader
2013-02-12 14:07 ` Ian Campbell
2013-02-12 14:50 ` Stefan Bader
2013-02-12 15:07 ` Ian Campbell
2013-02-12 15:53 ` Stefan Bader
2013-02-13 11:31 ` Stefan Bader [this message]
2013-02-13 12:16 ` Stefan Bader
2013-02-14 11:04 ` Strange PVM spinlock case revisited (nailed down) Stefan Bader
2013-02-14 11:43 ` Jan Beulich
2013-02-14 14:21 ` Stefan Bader
2013-02-14 14:48 ` 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=511B7983.7000907@canonical.com \
--to=stefan.bader@canonical.com \
--cc=Andrew.Cooper3@citrix.com \
--cc=Ian.Campbell@citrix.com \
--cc=xen-devel@lists.xen.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.