From mboxrd@z Thu Jan 1 00:00:00 1970 From: Glauber Costa Subject: [PATCH 2/2] Present kvm with corret apic phys id. Date: Wed, 29 Apr 2009 16:31:41 -0400 Message-ID: <1241037101-24842-3-git-send-email-glommer@redhat.com> References: <1241037101-24842-1-git-send-email-glommer@redhat.com> <1241037101-24842-2-git-send-email-glommer@redhat.com> Cc: avi@redhat.com, ehabkost@redhat.com To: kvm@vger.kernel.org Return-path: Received: from mx2.redhat.com ([66.187.237.31]:35615 "EHLO mx2.redhat.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1753341AbZD2Ubp (ORCPT ); Wed, 29 Apr 2009 16:31:45 -0400 Received: from int-mx2.corp.redhat.com (int-mx2.corp.redhat.com [172.16.27.26]) by mx2.redhat.com (8.13.8/8.13.8) with ESMTP id n3TKVh4I026982 for ; Wed, 29 Apr 2009 16:31:43 -0400 In-Reply-To: <1241037101-24842-2-git-send-email-glommer@redhat.com> Sender: kvm-owner@vger.kernel.org List-ID: 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 --- qemu/hw/apic.c | 4 ++-- 1 files changed, 2 insertions(+), 2 deletions(-) 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); -- 1.5.6.6