aboutsummaryrefslogtreecommitdiffstats
path: root/arch/powerpc/kvm/book3s.c
diff options
context:
space:
mode:
Diffstat (limited to 'arch/powerpc/kvm/book3s.c')
-rw-r--r--arch/powerpc/kvm/book3s.c14
1 files changed, 7 insertions, 7 deletions
diff --git a/arch/powerpc/kvm/book3s.c b/arch/powerpc/kvm/book3s.c
index eb401b6d4d8c..4d46f8b13cc6 100644
--- a/arch/powerpc/kvm/book3s.c
+++ b/arch/powerpc/kvm/book3s.c
@@ -594,14 +594,14 @@ int kvmppc_handle_pagefault(struct kvm_run *run, struct kvm_vcpu *vcpu,
594 594
595 if (page_found == -ENOENT) { 595 if (page_found == -ENOENT) {
596 /* Page not found in guest PTE entries */ 596 /* Page not found in guest PTE entries */
597 vcpu->arch.dear = kvmppc_get_fault_dar(vcpu); 597 vcpu->arch.shared->dar = kvmppc_get_fault_dar(vcpu);
598 vcpu->arch.shared->dsisr = to_svcpu(vcpu)->fault_dsisr; 598 vcpu->arch.shared->dsisr = to_svcpu(vcpu)->fault_dsisr;
599 vcpu->arch.shared->msr |= 599 vcpu->arch.shared->msr |=
600 (to_svcpu(vcpu)->shadow_srr1 & 0x00000000f8000000ULL); 600 (to_svcpu(vcpu)->shadow_srr1 & 0x00000000f8000000ULL);
601 kvmppc_book3s_queue_irqprio(vcpu, vec); 601 kvmppc_book3s_queue_irqprio(vcpu, vec);
602 } else if (page_found == -EPERM) { 602 } else if (page_found == -EPERM) {
603 /* Storage protection */ 603 /* Storage protection */
604 vcpu->arch.dear = kvmppc_get_fault_dar(vcpu); 604 vcpu->arch.shared->dar = kvmppc_get_fault_dar(vcpu);
605 vcpu->arch.shared->dsisr = 605 vcpu->arch.shared->dsisr =
606 to_svcpu(vcpu)->fault_dsisr & ~DSISR_NOHPTE; 606 to_svcpu(vcpu)->fault_dsisr & ~DSISR_NOHPTE;
607 vcpu->arch.shared->dsisr |= DSISR_PROTFAULT; 607 vcpu->arch.shared->dsisr |= DSISR_PROTFAULT;
@@ -610,7 +610,7 @@ int kvmppc_handle_pagefault(struct kvm_run *run, struct kvm_vcpu *vcpu,
610 kvmppc_book3s_queue_irqprio(vcpu, vec); 610 kvmppc_book3s_queue_irqprio(vcpu, vec);
611 } else if (page_found == -EINVAL) { 611 } else if (page_found == -EINVAL) {
612 /* Page not found in guest SLB */ 612 /* Page not found in guest SLB */
613 vcpu->arch.dear = kvmppc_get_fault_dar(vcpu); 613 vcpu->arch.shared->dar = kvmppc_get_fault_dar(vcpu);
614 kvmppc_book3s_queue_irqprio(vcpu, vec + 0x80); 614 kvmppc_book3s_queue_irqprio(vcpu, vec + 0x80);
615 } else if (!is_mmio && 615 } else if (!is_mmio &&
616 kvmppc_visible_gfn(vcpu, pte.raddr >> PAGE_SHIFT)) { 616 kvmppc_visible_gfn(vcpu, pte.raddr >> PAGE_SHIFT)) {
@@ -867,17 +867,17 @@ int kvmppc_handle_exit(struct kvm_run *run, struct kvm_vcpu *vcpu,
867 if (to_svcpu(vcpu)->fault_dsisr & DSISR_NOHPTE) { 867 if (to_svcpu(vcpu)->fault_dsisr & DSISR_NOHPTE) {
868 r = kvmppc_handle_pagefault(run, vcpu, dar, exit_nr); 868 r = kvmppc_handle_pagefault(run, vcpu, dar, exit_nr);
869 } else { 869 } else {
870 vcpu->arch.dear = dar; 870 vcpu->arch.shared->dar = dar;
871 vcpu->arch.shared->dsisr = to_svcpu(vcpu)->fault_dsisr; 871 vcpu->arch.shared->dsisr = to_svcpu(vcpu)->fault_dsisr;
872 kvmppc_book3s_queue_irqprio(vcpu, exit_nr); 872 kvmppc_book3s_queue_irqprio(vcpu, exit_nr);
873 kvmppc_mmu_pte_flush(vcpu, vcpu->arch.dear, ~0xFFFUL); 873 kvmppc_mmu_pte_flush(vcpu, dar, ~0xFFFUL);
874 r = RESUME_GUEST; 874 r = RESUME_GUEST;
875 } 875 }
876 break; 876 break;
877 } 877 }
878 case BOOK3S_INTERRUPT_DATA_SEGMENT: 878 case BOOK3S_INTERRUPT_DATA_SEGMENT:
879 if (kvmppc_mmu_map_segment(vcpu, kvmppc_get_fault_dar(vcpu)) < 0) { 879 if (kvmppc_mmu_map_segment(vcpu, kvmppc_get_fault_dar(vcpu)) < 0) {
880 vcpu->arch.dear = kvmppc_get_fault_dar(vcpu); 880 vcpu->arch.shared->dar = kvmppc_get_fault_dar(vcpu);
881 kvmppc_book3s_queue_irqprio(vcpu, 881 kvmppc_book3s_queue_irqprio(vcpu,
882 BOOK3S_INTERRUPT_DATA_SEGMENT); 882 BOOK3S_INTERRUPT_DATA_SEGMENT);
883 } 883 }
@@ -997,7 +997,7 @@ program_interrupt:
997 if (kvmppc_read_inst(vcpu) == EMULATE_DONE) { 997 if (kvmppc_read_inst(vcpu) == EMULATE_DONE) {
998 vcpu->arch.shared->dsisr = kvmppc_alignment_dsisr(vcpu, 998 vcpu->arch.shared->dsisr = kvmppc_alignment_dsisr(vcpu,
999 kvmppc_get_last_inst(vcpu)); 999 kvmppc_get_last_inst(vcpu));
1000 vcpu->arch.dear = kvmppc_alignment_dar(vcpu, 1000 vcpu->arch.shared->dar = kvmppc_alignment_dar(vcpu,
1001 kvmppc_get_last_inst(vcpu)); 1001 kvmppc_get_last_inst(vcpu));
1002 kvmppc_book3s_queue_irqprio(vcpu, exit_nr); 1002 kvmppc_book3s_queue_irqprio(vcpu, exit_nr);
1003 } 1003 }