diff options
-rw-r--r-- | arch/powerpc/include/asm/kvm_host.h | 2 | ||||
-rw-r--r-- | arch/powerpc/kernel/asm-offsets.c | 2 | ||||
-rw-r--r-- | arch/powerpc/kvm/booke.c | 1 | ||||
-rw-r--r-- | arch/powerpc/kvm/booke_interrupts.S | 17 |
4 files changed, 9 insertions, 13 deletions
diff --git a/arch/powerpc/include/asm/kvm_host.h b/arch/powerpc/include/asm/kvm_host.h index 186f150b9b89..12cb1807e8d7 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 { | |||
219 | #endif | 219 | #endif |
220 | 220 | ||
221 | #ifdef CONFIG_PPC_BOOK3S | 221 | #ifdef CONFIG_PPC_BOOK3S |
222 | ulong shadow_msr; | ||
223 | ulong hflags; | 222 | ulong hflags; |
224 | ulong guest_owned_ext; | 223 | ulong guest_owned_ext; |
225 | #endif | 224 | #endif |
226 | u32 vrsave; /* also USPRG0 */ | 225 | u32 vrsave; /* also USPRG0 */ |
227 | u32 mmucr; | 226 | u32 mmucr; |
227 | ulong shadow_msr; | ||
228 | ulong sprg4; | 228 | ulong sprg4; |
229 | ulong sprg5; | 229 | ulong sprg5; |
230 | ulong sprg6; | 230 | ulong sprg6; |
diff --git a/arch/powerpc/kernel/asm-offsets.c b/arch/powerpc/kernel/asm-offsets.c index 36e1c8a29be8..25de8e4808a4 100644 --- a/arch/powerpc/kernel/asm-offsets.c +++ b/arch/powerpc/kernel/asm-offsets.c | |||
@@ -404,12 +404,12 @@ int main(void) | |||
404 | DEFINE(VCPU_SHADOW_PID, offsetof(struct kvm_vcpu, arch.shadow_pid)); | 404 | DEFINE(VCPU_SHADOW_PID, offsetof(struct kvm_vcpu, arch.shadow_pid)); |
405 | DEFINE(VCPU_SHARED, offsetof(struct kvm_vcpu, arch.shared)); | 405 | DEFINE(VCPU_SHARED, offsetof(struct kvm_vcpu, arch.shared)); |
406 | DEFINE(VCPU_SHARED_MSR, offsetof(struct kvm_vcpu_arch_shared, msr)); | 406 | DEFINE(VCPU_SHARED_MSR, offsetof(struct kvm_vcpu_arch_shared, msr)); |
407 | DEFINE(VCPU_SHADOW_MSR, offsetof(struct kvm_vcpu, arch.shadow_msr)); | ||
407 | 408 | ||
408 | /* book3s */ | 409 | /* book3s */ |
409 | #ifdef CONFIG_PPC_BOOK3S | 410 | #ifdef CONFIG_PPC_BOOK3S |
410 | DEFINE(VCPU_HOST_RETIP, offsetof(struct kvm_vcpu, arch.host_retip)); | 411 | DEFINE(VCPU_HOST_RETIP, offsetof(struct kvm_vcpu, arch.host_retip)); |
411 | DEFINE(VCPU_HOST_MSR, offsetof(struct kvm_vcpu, arch.host_msr)); | 412 | DEFINE(VCPU_HOST_MSR, offsetof(struct kvm_vcpu, arch.host_msr)); |
412 | DEFINE(VCPU_SHADOW_MSR, offsetof(struct kvm_vcpu, arch.shadow_msr)); | ||
413 | DEFINE(VCPU_TRAMPOLINE_LOWMEM, offsetof(struct kvm_vcpu, arch.trampoline_lowmem)); | 413 | DEFINE(VCPU_TRAMPOLINE_LOWMEM, offsetof(struct kvm_vcpu, arch.trampoline_lowmem)); |
414 | DEFINE(VCPU_TRAMPOLINE_ENTER, offsetof(struct kvm_vcpu, arch.trampoline_enter)); | 414 | DEFINE(VCPU_TRAMPOLINE_ENTER, offsetof(struct kvm_vcpu, arch.trampoline_enter)); |
415 | DEFINE(VCPU_HIGHMEM_HANDLER, offsetof(struct kvm_vcpu, arch.highmem_handler)); | 415 | 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 8462b3a1c1c7..05cedb5f8210 100644 --- a/arch/powerpc/kvm/booke.c +++ b/arch/powerpc/kvm/booke.c | |||
@@ -514,6 +514,7 @@ int kvm_arch_vcpu_setup(struct kvm_vcpu *vcpu) | |||
514 | 514 | ||
515 | vcpu->arch.pc = 0; | 515 | vcpu->arch.pc = 0; |
516 | vcpu->arch.shared->msr = 0; | 516 | vcpu->arch.shared->msr = 0; |
517 | vcpu->arch.shadow_msr = MSR_USER | MSR_DE | MSR_IS | MSR_DS; | ||
517 | kvmppc_set_gpr(vcpu, 1, (16<<20) - 8); /* -8 for the callee-save LR slot */ | 518 | kvmppc_set_gpr(vcpu, 1, (16<<20) - 8); /* -8 for the callee-save LR slot */ |
518 | 519 | ||
519 | vcpu->arch.shadow_pid = 1; | 520 | vcpu->arch.shadow_pid = 1; |
diff --git a/arch/powerpc/kvm/booke_interrupts.S b/arch/powerpc/kvm/booke_interrupts.S index b58ccae95904..55410cc45ad7 100644 --- a/arch/powerpc/kvm/booke_interrupts.S +++ b/arch/powerpc/kvm/booke_interrupts.S | |||
@@ -24,8 +24,6 @@ | |||
24 | #include <asm/page.h> | 24 | #include <asm/page.h> |
25 | #include <asm/asm-offsets.h> | 25 | #include <asm/asm-offsets.h> |
26 | 26 | ||
27 | #define KVMPPC_MSR_MASK (MSR_CE|MSR_EE|MSR_PR|MSR_DE|MSR_ME|MSR_IS|MSR_DS) | ||
28 | |||
29 | #define VCPU_GPR(n) (VCPU_GPRS + (n * 4)) | 27 | #define VCPU_GPR(n) (VCPU_GPRS + (n * 4)) |
30 | 28 | ||
31 | /* The host stack layout: */ | 29 | /* The host stack layout: */ |
@@ -405,20 +403,17 @@ lightweight_exit: | |||
405 | 403 | ||
406 | /* Finish loading guest volatiles and jump to guest. */ | 404 | /* Finish loading guest volatiles and jump to guest. */ |
407 | lwz r3, VCPU_CTR(r4) | 405 | lwz r3, VCPU_CTR(r4) |
406 | lwz r5, VCPU_CR(r4) | ||
407 | lwz r6, VCPU_PC(r4) | ||
408 | lwz r7, VCPU_SHADOW_MSR(r4) | ||
408 | mtctr r3 | 409 | mtctr r3 |
409 | lwz r3, VCPU_CR(r4) | 410 | mtcr r5 |
410 | mtcr r3 | 411 | mtsrr0 r6 |
412 | mtsrr1 r7 | ||
411 | lwz r5, VCPU_GPR(r5)(r4) | 413 | lwz r5, VCPU_GPR(r5)(r4) |
412 | lwz r6, VCPU_GPR(r6)(r4) | 414 | lwz r6, VCPU_GPR(r6)(r4) |
413 | lwz r7, VCPU_GPR(r7)(r4) | 415 | lwz r7, VCPU_GPR(r7)(r4) |
414 | lwz r8, VCPU_GPR(r8)(r4) | 416 | lwz r8, VCPU_GPR(r8)(r4) |
415 | lwz r3, VCPU_PC(r4) | ||
416 | mtsrr0 r3 | ||
417 | lwz r3, VCPU_SHARED(r4) | ||
418 | lwz r3, (VCPU_SHARED_MSR + 4)(r3) | ||
419 | oris r3, r3, KVMPPC_MSR_MASK@h | ||
420 | ori r3, r3, KVMPPC_MSR_MASK@l | ||
421 | mtsrr1 r3 | ||
422 | 417 | ||
423 | /* Clear any debug events which occurred since we disabled MSR[DE]. | 418 | /* Clear any debug events which occurred since we disabled MSR[DE]. |
424 | * XXX This gives us a 3-instruction window in which a breakpoint | 419 | * XXX This gives us a 3-instruction window in which a breakpoint |