From: Jan Kiszka <jan.kiszka@siemens.com>
To: Avi Kivity <avi@redhat.com>
Cc: Liu Ping Fan <pingfank@linux.vnet.ibm.com>,
kvm <kvm@vger.kernel.org>, Marcelo Tosatti <mtosatti@redhat.com>,
qemu-devel <qemu-devel@nongnu.org>,
Alexander Graf <agraf@suse.de>,
Anthony Liguori <anthony@codemonkey.ws>
Subject: Re: [Qemu-devel] [PATCH] kvm: First step to push iothread lock out of inner run loop
Date: Fri, 06 Jul 2012 19:16:14 +0200 [thread overview]
Message-ID: <4FF71D5E.4060409@siemens.com> (raw)
In-Reply-To: <4FE71F44.9020800@web.de>
On 2012-06-24 16:08, Jan Kiszka wrote:
> On 2012-06-24 10:49, Avi Kivity wrote:
>> On 06/23/2012 02:45 PM, Jan Kiszka wrote:
>>>
>>> Hmm, we may need the iothread lock around cpu_set_apic_tpr for
>>> !kvm_irqchip_in_kernel(). And as we are at it, apic_base manipulation
>>> can be but there as well.
>>>
>>> With in-kernel irqchip, there is no such need. Also, no one accesses
>>> eflags outside of the vcpu thread, independent of the irqchip mode.
>>
>> In fact !kvm_irqchip_in_kernel() is broken wrt the tpr. Interrupt
>> injection needs to be done atomically, but currently we check the tpr
>> from the injecting thread, which means the cpu thread can race with it.
>> We need to move the check to the vcpu thread so that the guest vcpu is
>> halted.
>
> So apic_set_irq basically needs to be deferred to vcpu context, right?
> Will have a look.
Tried to wrap my head around this, but only found different issues
(patches under construction).
First of all, a simple run_on_cpu doesn't work as it may drops the BQL
at unexpected points inside device models.
Then I thought about what could actually race here: The testing of the
userspace TPR value under BQL vs. some modification by the CPU while in
KVM mode. So we may either inject while the CPU is trying to prevent
this - harmless as it happens on real hw as well - or not inject while
the CPU is enabling this. But the latter is quickly resolved because all
such TPR changes in userspace APIC mode are trapped and then processed
under BQL. At that point we will also reevaluate the pending interrupts
and inject what was deferred before (kvm_arch_post_run ->
cpu_set_apic_tpr -> apic_set_tpr -> apic_update_irq, or via
apic_mem_writel).
So where is a race?
Jan
--
Siemens AG, Corporate Technology, CT RTC ITP SDP-DE
Corporate Competence Center Embedded Linux
next prev parent reply other threads:[~2012-07-06 17:16 UTC|newest]
Thread overview: 23+ messages / expand[flat|nested] mbox.gz Atom feed top
2012-06-22 22:45 [Qemu-devel] [PATCH] kvm: First step to push iothread lock out of inner run loop Jan Kiszka
2012-06-22 22:55 ` Jan Kiszka
2012-06-23 0:22 ` Marcelo Tosatti
2012-06-23 9:06 ` Marcelo Tosatti
2012-06-23 11:45 ` Jan Kiszka
2012-06-24 8:49 ` Avi Kivity
2012-06-24 14:08 ` Jan Kiszka
2012-06-24 14:31 ` Avi Kivity
2012-07-06 17:16 ` Jan Kiszka [this message]
2012-07-06 18:06 ` Jan Kiszka
2012-07-08 7:49 ` Avi Kivity
2012-06-24 13:34 ` liu ping fan
2012-06-24 14:08 ` Jan Kiszka
2012-06-24 14:35 ` Avi Kivity
2012-06-24 14:40 ` Jan Kiszka
2012-06-24 14:46 ` Avi Kivity
2012-06-24 14:51 ` Jan Kiszka
2012-06-24 14:56 ` Avi Kivity
2012-06-24 14:58 ` Jan Kiszka
2012-06-24 14:59 ` Avi Kivity
2012-06-23 9:22 ` Jan Kiszka
2012-06-22 22:59 ` Anthony Liguori
2012-06-23 9:11 ` 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=4FF71D5E.4060409@siemens.com \
--to=jan.kiszka@siemens.com \
--cc=agraf@suse.de \
--cc=anthony@codemonkey.ws \
--cc=avi@redhat.com \
--cc=kvm@vger.kernel.org \
--cc=mtosatti@redhat.com \
--cc=pingfank@linux.vnet.ibm.com \
--cc=qemu-devel@nongnu.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).