From patchwork Mon Jul 4 14:12:38 2011 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Alexander Graf X-Patchwork-Id: 942102 Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by demeter2.kernel.org (8.14.4/8.14.4) with ESMTP id p64Ef62k021630 for ; Mon, 4 Jul 2011 14:41:07 GMT Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1757499Ab1GDOM7 (ORCPT ); Mon, 4 Jul 2011 10:12:59 -0400 Received: from cantor2.suse.de ([195.135.220.15]:58022 "EHLO mx2.suse.de" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1755749Ab1GDOM4 (ORCPT ); Mon, 4 Jul 2011 10:12:56 -0400 Received: from relay2.suse.de (charybdis-ext.suse.de [195.135.221.2]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (No client certificate requested) by mx2.suse.de (Postfix) with ESMTP id 2FB6D87567; Mon, 4 Jul 2011 16:12:55 +0200 (CEST) From: Alexander Graf To: "kvm@vger.kernel.org list" Cc: Avi Kivity , kvm-ppc@vger.kernel.org, Paul Mackerras Subject: [PATCH 01/17] KVM: PPC: Fix machine checks on 32-bit Book3S Date: Mon, 4 Jul 2011 16:12:38 +0200 Message-Id: <1309788774-13644-2-git-send-email-agraf@suse.de> X-Mailer: git-send-email 1.7.3.4 In-Reply-To: <1309788774-13644-1-git-send-email-agraf@suse.de> References: <1309788774-13644-1-git-send-email-agraf@suse.de> Sender: kvm-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: kvm@vger.kernel.org X-Greylist: IP, sender and recipient auto-whitelisted, not delayed by milter-greylist-4.2.6 (demeter2.kernel.org [140.211.167.43]); Mon, 04 Jul 2011 14:41:07 +0000 (UTC) From: Paul Mackerras Commit 69acc0d3ba ("KVM: PPC: Resolve real-mode handlers through function exports") resulted in vcpu->arch.trampoline_lowmem and vcpu->arch.trampoline_enter ending up with kernel virtual addresses rather than physical addresses. This is OK on 64-bit Book3S machines, which ignore the top 4 bits of the effective address in real mode, but on 32-bit Book3S machines, accessing these addresses in real mode causes machine check interrupts, as the hardware uses the whole effective address as the physical address in real mode. This fixes the problem by using __pa() to convert these addresses to physical addresses. Signed-off-by: Paul Mackerras Signed-off-by: Alexander Graf --- arch/powerpc/kvm/book3s.c | 5 +++-- 1 files changed, 3 insertions(+), 2 deletions(-) diff --git a/arch/powerpc/kvm/book3s.c b/arch/powerpc/kvm/book3s.c index 73fdab8..83500fb 100644 --- a/arch/powerpc/kvm/book3s.c +++ b/arch/powerpc/kvm/book3s.c @@ -28,6 +28,7 @@ #include #include #include +#include #include #include #include @@ -1342,8 +1343,8 @@ struct kvm_vcpu *kvmppc_core_vcpu_create(struct kvm *kvm, unsigned int id) vcpu_book3s->slb_nr = 64; /* remember where some real-mode handlers are */ - vcpu->arch.trampoline_lowmem = (ulong)kvmppc_handler_lowmem_trampoline; - vcpu->arch.trampoline_enter = (ulong)kvmppc_handler_trampoline_enter; + vcpu->arch.trampoline_lowmem = __pa(kvmppc_handler_lowmem_trampoline); + vcpu->arch.trampoline_enter = __pa(kvmppc_handler_trampoline_enter); vcpu->arch.highmem_handler = (ulong)kvmppc_handler_highmem; #ifdef CONFIG_PPC_BOOK3S_64 vcpu->arch.rmcall = *(ulong*)kvmppc_rmcall;