From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1755723AbXLBLV0 (ORCPT ); Sun, 2 Dec 2007 06:21:26 -0500 Received: (majordomo@vger.kernel.org) by vger.kernel.org id S1753788AbXLBLST (ORCPT ); Sun, 2 Dec 2007 06:18:19 -0500 Received: from il.qumranet.com ([82.166.9.18]:41443 "EHLO il.qumranet.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752668AbXLBLSL (ORCPT ); Sun, 2 Dec 2007 06:18:11 -0500 From: Avi Kivity To: stable@kernel.org Cc: linux-kernel@vger.kernel.org, kvm-devel@lists.sourceforge.net, Eddie Dong , Qing He , Avi Kivity Subject: [PATCH 10/10] KVM: VMX: Reset mmu context when entering real mode Date: Sun, 2 Dec 2007 13:18:47 +0200 Message-Id: <11965943271835-git-send-email-avi@qumranet.com> X-Mailer: git-send-email 1.5.3 In-Reply-To: <1196594327338-git-send-email-avi@qumranet.com> References: <1196594327338-git-send-email-avi@qumranet.com> Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Eddie Dong Resetting an SMP guest will force AP enter real mode (RESET) with paging enabled in protected mode. While current enter_rmode() can only handle mode switch from nonpaging mode to real mode which leads to SMP reboot failure. Fix by reloading the mmu context on entering real mode. Signed-off-by: Yaozu (Eddie) Dong Signed-off-by: Qing He Signed-off-by: Avi Kivity --- drivers/kvm/mmu.c | 1 + drivers/kvm/vmx.c | 1 + 2 files changed, 2 insertions(+), 0 deletions(-) diff --git a/drivers/kvm/mmu.c b/drivers/kvm/mmu.c index 23965aa..56ab369 100644 --- a/drivers/kvm/mmu.c +++ b/drivers/kvm/mmu.c @@ -1066,6 +1066,7 @@ int kvm_mmu_reset_context(struct kvm_vcpu *vcpu) destroy_kvm_mmu(vcpu); return init_kvm_mmu(vcpu); } +EXPORT_SYMBOL_GPL(kvm_mmu_reset_context); int kvm_mmu_load(struct kvm_vcpu *vcpu) { diff --git a/drivers/kvm/vmx.c b/drivers/kvm/vmx.c index c158a2d..916da29 100644 --- a/drivers/kvm/vmx.c +++ b/drivers/kvm/vmx.c @@ -957,6 +957,7 @@ static void enter_rmode(struct kvm_vcpu *vcpu) fix_rmode_seg(VCPU_SREG_GS, &vcpu->rmode.gs); fix_rmode_seg(VCPU_SREG_FS, &vcpu->rmode.fs); + kvm_mmu_reset_context(vcpu); init_rmode_tss(vcpu->kvm); } -- 1.5.3