From mboxrd@z Thu Jan 1 00:00:00 1970 From: Alexander Graf Date: Thu, 19 May 2011 10:05:57 +0000 Subject: Re: [PATCH 03/13] KVM: PPC: booke: use shadow_msr Message-Id: <4DD4EB85.1020203@suse.de> List-Id: References: <20110517234026.GA3580@schlenkerla.am.freescale.net> In-Reply-To: <20110517234026.GA3580@schlenkerla.am.freescale.net> MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit To: kvm-ppc@vger.kernel.org On 05/18/2011 01:40 AM, Scott Wood wrote: > BKeep the guest MSR and the guest-mode true MSR separate, rather than Bkeep? > modifying the guest MSR on each guest entry to produce a true MSR. > > Any bits which should be modified based on guest MSR must be explicitly > propagated from vcpu->arch.shared->msr to vcpu->arch.shadow_msr in > kvmppc_set_msr(). > > While we're modifying the guest entry code, reorder a few instructions > to bury some load latencies. > > Signed-off-by: Scott Wood > --- > This is a resending of http://www.spinics.net/lists/kvm-ppc/msg02681.html > > arch/powerpc/include/asm/kvm_host.h | 2 +- > arch/powerpc/kernel/asm-offsets.c | 2 +- > arch/powerpc/kvm/booke.c | 2 ++ > arch/powerpc/kvm/booke_interrupts.S | 17 ++++++----------- > 4 files changed, 10 insertions(+), 13 deletions(-) > > diff --git a/arch/powerpc/include/asm/kvm_host.h b/arch/powerpc/include/asm/kvm_host.h > index 186f150..12cb180 100644 > --- a/arch/powerpc/include/asm/kvm_host.h > +++ b/arch/powerpc/include/asm/kvm_host.h > @@ -219,12 +219,12 @@ struct kvm_vcpu_arch { > #endif > > #ifdef CONFIG_PPC_BOOK3S > - ulong shadow_msr; > ulong hflags; > ulong guest_owned_ext; > #endif > u32 vrsave; /* also USPRG0 */ > u32 mmucr; > + ulong shadow_msr; > ulong sprg4; > ulong sprg5; > ulong sprg6; > diff --git a/arch/powerpc/kernel/asm-offsets.c b/arch/powerpc/kernel/asm-offsets.c > index cf0d822..431406c 100644 > --- a/arch/powerpc/kernel/asm-offsets.c > +++ b/arch/powerpc/kernel/asm-offsets.c > @@ -403,12 +403,12 @@ int main(void) > DEFINE(VCPU_SHADOW_PID, offsetof(struct kvm_vcpu, arch.shadow_pid)); > DEFINE(VCPU_SHARED, offsetof(struct kvm_vcpu, arch.shared)); > DEFINE(VCPU_SHARED_MSR, offsetof(struct kvm_vcpu_arch_shared, msr)); > + DEFINE(VCPU_SHADOW_MSR, offsetof(struct kvm_vcpu, arch.shadow_msr)); > > /* book3s */ > #ifdef CONFIG_PPC_BOOK3S > DEFINE(VCPU_HOST_RETIP, offsetof(struct kvm_vcpu, arch.host_retip)); > DEFINE(VCPU_HOST_MSR, offsetof(struct kvm_vcpu, arch.host_msr)); > - DEFINE(VCPU_SHADOW_MSR, offsetof(struct kvm_vcpu, arch.shadow_msr)); > DEFINE(VCPU_TRAMPOLINE_LOWMEM, offsetof(struct kvm_vcpu, arch.trampoline_lowmem)); > DEFINE(VCPU_TRAMPOLINE_ENTER, offsetof(struct kvm_vcpu, arch.trampoline_enter)); > DEFINE(VCPU_HIGHMEM_HANDLER, offsetof(struct kvm_vcpu, arch.highmem_handler)); > diff --git a/arch/powerpc/kvm/booke.c b/arch/powerpc/kvm/booke.c > index 8462b3a..9810010 100644 > --- a/arch/powerpc/kvm/booke.c > +++ b/arch/powerpc/kvm/booke.c > @@ -514,6 +514,8 @@ int kvm_arch_vcpu_setup(struct kvm_vcpu *vcpu) > > vcpu->arch.pc = 0; > vcpu->arch.shared->msr = 0; > + vcpu->arch.shadow_msr = MSR_CE | MSR_EE | MSR_PR | MSR_DE | > + MSR_ME | MSR_IS | MSR_DS; Is there no define for this? Book3S has MSR_USER for it. Alex