All of lore.kernel.org
 help / color / mirror / Atom feed
From: "Dr. David Alan Gilbert (git)" <dgilbert@redhat.com>
To: kvm@vger.kernel.org
Cc: pbonzini@redhat.com
Subject: [PATCH 2/2] KVM: lapic: Fixup LDR on load in x2apic
Date: Fri, 17 Nov 2017 11:52:50 +0000	[thread overview]
Message-ID: <20171117115250.7564-3-dgilbert@redhat.com> (raw)
In-Reply-To: <20171117115250.7564-1-dgilbert@redhat.com>

From: "Dr. David Alan Gilbert" <dgilbert@redhat.com>

In x2apic mode the LDR is fixed based on the ID rather
than separately loadable like it was before x2.
When kvm_apic_set_state is called, the base is set, and if
it has the X2APIC_ENABLE flag set then the LDR is calculated;
however that value gets overwritten by the memcpy a few lines
below overwriting it with the value that came from userland.

The symptom is a lack of EOI after loading the state
(e.g. after a QEMU migration) and is due to the EOI bitmap
being wrong due to the incorrect LDR.  This was seen with
a Win2016 guest under Qemu with irqchip=split whose USB mouse
didn't work after a VM migration.

This corresponds to RH bug:
  https://bugzilla.redhat.com/show_bug.cgi?id=1502591

Reported-by: Yiqian Wei <yiwei@redhat.com>
Signed-off-by: Dr. David Alan Gilbert <dgilbert@redhat.com>
---
 arch/x86/kvm/lapic.c | 5 +++++
 1 file changed, 5 insertions(+)

diff --git a/arch/x86/kvm/lapic.c b/arch/x86/kvm/lapic.c
index 4991e9e51611..cff55beb0263 100644
--- a/arch/x86/kvm/lapic.c
+++ b/arch/x86/kvm/lapic.c
@@ -2201,7 +2201,12 @@ static int kvm_apic_state_fixup(struct kvm_vcpu *vcpu,
 {
 	if (apic_x2apic_mode(vcpu->arch.apic)) {
 		u32 *id = (u32 *)(s->regs + APIC_ID);
+		u32 *ldr = (u32 *)(s->regs + APIC_LDR);
 
+		if (set) {
+			/* In x2 the LDR is fixed based on the id */
+			*ldr = kvm_apic_calc_x2apic_ldr(*id);
+		}
 		if (vcpu->kvm->arch.x2apic_format) {
 			if (*id != vcpu->vcpu_id)
 				return -EINVAL;
-- 
2.14.3

  parent reply	other threads:[~2017-11-17 11:52 UTC|newest]

Thread overview: 13+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2017-11-17 11:52 [PATCH 0/2] Lapic LDR fixup Dr. David Alan Gilbert (git)
2017-11-17 11:52 ` [PATCH 1/2] KVM: lapic: Split out x2apic ldr calculation Dr. David Alan Gilbert (git)
2017-11-23 15:31   ` David Hildenbrand
2017-11-17 11:52 ` Dr. David Alan Gilbert (git) [this message]
2017-11-17 21:01   ` [PATCH 2/2] KVM: lapic: Fixup LDR on load in x2apic Liran Alon
2017-11-17 21:03     ` Liran Alon
2017-11-20  0:53       ` Wanpeng Li
2017-11-20  1:04         ` Liran Alon
2017-11-20 20:48           ` Paolo Bonzini
2017-11-20 10:48       ` Dr. David Alan Gilbert
2017-11-17 12:29 ` [PATCH 0/2] Lapic LDR fixup Paolo Bonzini
2017-11-17 19:37   ` Dr. David Alan Gilbert
2017-11-17 20:27     ` Paolo Bonzini

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=20171117115250.7564-3-dgilbert@redhat.com \
    --to=dgilbert@redhat.com \
    --cc=kvm@vger.kernel.org \
    --cc=pbonzini@redhat.com \
    /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.