Re: [PATCH 03/13] KVM: PPC: booke: use shadow_msr

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



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<scottwood@xxxxxxxxxxxxx>
---
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

--
To unsubscribe from this list: send the line "unsubscribe kvm-ppc" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[Index of Archives]     [KVM Development]     [KVM ARM]     [KVM ia64]     [Linux Virtualization]     [Linux USB Devel]     [Linux Video]     [Linux Audio Users]     [Linux Kernel]     [Linux SCSI]     [Big List of Linux Books]

  Powered by Linux