diff mbox

[2/2] Present kvm with corret apic phys id.

Message ID 1241037101-24842-3-git-send-email-glommer@redhat.com (mailing list archive)
State New, archived
Headers show

Commit Message

Glauber Costa April 29, 2009, 8:31 p.m. UTC
KVM will 24-shift bits in addr 0x20 (APIC_ID) before actually
using it. We currently load phys_id as "s->id". After shifted
by 24 bits, it will result in a meaningless value. We should really
be doing "s->id << 24", which, after shifted, will lead to the correct
value.

This is for the load function. save has the invert problem.

Signed-off-by: Glauber Costa <glommer@redhat.com>
---
 qemu/hw/apic.c |    4 ++--
 1 files changed, 2 insertions(+), 2 deletions(-)

Comments

Avi Kivity May 4, 2009, 8:32 a.m. UTC | #1
Glauber Costa wrote:
> KVM will 24-shift bits in addr 0x20 (APIC_ID) before actually
> using it. We currently load phys_id as "s->id". After shifted
> by 24 bits, it will result in a meaningless value. We should really
> be doing "s->id << 24", which, after shifted, will lead to the correct
> value.
>
> This is for the load function. save has the invert problem.
>   

Applied, thanks.
diff mbox

Patch

diff --git a/qemu/hw/apic.c b/qemu/hw/apic.c
index b926508..0ace5cc 100644
--- a/qemu/hw/apic.c
+++ b/qemu/hw/apic.c
@@ -830,7 +830,7 @@  static void kvm_kernel_lapic_save_to_user(APICState *s)
 
     kvm_get_lapic(kvm_context, s->cpu_env->cpu_index, kapic);
 
-    s->id = kapic_reg(kapic, 0x2);
+    s->id = kapic_reg(kapic, 0x2) >> 24;
     s->tpr = kapic_reg(kapic, 0x8);
     s->arb_id = kapic_reg(kapic, 0x9);
     s->log_dest = kapic_reg(kapic, 0xd) >> 24;
@@ -863,7 +863,7 @@  static void kvm_kernel_lapic_load_from_user(APICState *s)
     int i;
 
     memset(klapic, 0, sizeof apic);
-    kapic_set_reg(klapic, 0x2, s->id);
+    kapic_set_reg(klapic, 0x2, s->id << 24);
     kapic_set_reg(klapic, 0x8, s->tpr);
     kapic_set_reg(klapic, 0xd, s->log_dest << 24);
     kapic_set_reg(klapic, 0xe, s->dest_mode << 28 | 0x0fffffff);