qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Qemu-devel] Unable to enable +x2apic for the guest cpus...


From: Chegu Vinod
Subject: Re: [Qemu-devel] Unable to enable +x2apic for the guest cpus...
Date: Sat, 13 Oct 2012 05:22:40 -0700
User-agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:16.0) Gecko/20121010 Thunderbird/16.0.1

On 10/13/2012 12:32 AM, Gleb Natapov wrote:
On Fri, Oct 12, 2012 at 07:38:42PM -0700, Chegu Vinod wrote:
Hello,

I am using a very recent upstream version of qemu.git along with
kvm.git kernels (in the host and guest).
  [Guest kernel had been compiled with CONFIG_X86_X2APIC and
CONFIG_IRQ_REMAP both set]

When I attempt to start a guest with +x2apic flag (pl. see the qemu
cmd line below) I end up with a hang of the qemu and
a kernel BUG at /arch/x86/kvm/lapic.c:159 !    Pl. see the attached
screen shot of the console for additional info.

I am able to boot the same guest without the +x2apic flag in the
qemu cmd line.

Not sure if this an issue (or) if I have something incorrectly
specified in the qemu cmd line ? If its the latter...pl. advise the
correct usage
for enabling x2apic for the guest cpus.. for the upstream bits.

This is the bug in how ldr in x2apic mode is calculated.

Try the following patch:

diff --git a/arch/x86/kvm/lapic.c b/arch/x86/kvm/lapic.c
index c6e6b72..43e9fad 100644
--- a/arch/x86/kvm/lapic.c
+++ b/arch/x86/kvm/lapic.c
@@ -1311,7 +1311,7 @@ void kvm_lapic_set_base(struct kvm_vcpu *vcpu, u64 value)
        vcpu->arch.apic_base = value;
        if (apic_x2apic_mode(apic)) {
                u32 id = kvm_apic_id(apic);
-               u32 ldr = ((id & ~0xf) << 16) | (1 << (id & 0xf));
+               u32 ldr = ((id >> 4) << 16) | (1 << (id & 0xf));
                kvm_apic_set_ldr(apic, ldr);
        }
        apic->base_address = apic->vcpu->arch.apic_base &
--
                        Gleb.
.



Retried with the above patch and the guest is booting fine. (x2apic flag shows up in the guest's /proc/cpuinfo).

Was this a recent regression?

Thanks!
Vinod



reply via email to

[Prev in Thread] Current Thread [Next in Thread]