diff options
Diffstat (limited to 'arch/powerpc/kvm/book3s.c')
-rw-r--r-- | arch/powerpc/kvm/book3s.c | 14 |
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 | } |