diff options
-rw-r--r-- | arch/powerpc/include/asm/kvm_host.h | 1 | ||||
-rw-r--r-- | arch/powerpc/include/asm/kvm_para.h | 1 | ||||
-rw-r--r-- | arch/powerpc/kvm/book3s.c | 14 | ||||
-rw-r--r-- | arch/powerpc/kvm/book3s_emulate.c | 6 | ||||
-rw-r--r-- | arch/powerpc/kvm/book3s_paired_singles.c | 2 | ||||
-rw-r--r-- | arch/powerpc/kvm/booke.c | 2 | ||||
-rw-r--r-- | arch/powerpc/kvm/booke_emulate.c | 4 |
7 files changed, 15 insertions, 15 deletions
diff --git a/arch/powerpc/include/asm/kvm_host.h b/arch/powerpc/include/asm/kvm_host.h index ba20f90655f3..c852408eac38 100644 --- a/arch/powerpc/include/asm/kvm_host.h +++ b/arch/powerpc/include/asm/kvm_host.h | |||
@@ -231,7 +231,6 @@ struct kvm_vcpu_arch { | |||
231 | ulong csrr1; | 231 | ulong csrr1; |
232 | ulong dsrr0; | 232 | ulong dsrr0; |
233 | ulong dsrr1; | 233 | ulong dsrr1; |
234 | ulong dear; | ||
235 | ulong esr; | 234 | ulong esr; |
236 | u32 dec; | 235 | u32 dec; |
237 | u32 decar; | 236 | u32 decar; |
diff --git a/arch/powerpc/include/asm/kvm_para.h b/arch/powerpc/include/asm/kvm_para.h index 9f7565b1de65..ec72a1c8c045 100644 --- a/arch/powerpc/include/asm/kvm_para.h +++ b/arch/powerpc/include/asm/kvm_para.h | |||
@@ -23,6 +23,7 @@ | |||
23 | #include <linux/types.h> | 23 | #include <linux/types.h> |
24 | 24 | ||
25 | struct kvm_vcpu_arch_shared { | 25 | struct kvm_vcpu_arch_shared { |
26 | __u64 dar; | ||
26 | __u64 msr; | 27 | __u64 msr; |
27 | __u32 dsisr; | 28 | __u32 dsisr; |
28 | }; | 29 | }; |
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 | } |
diff --git a/arch/powerpc/kvm/book3s_emulate.c b/arch/powerpc/kvm/book3s_emulate.c index 9982ff163af0..c1478642f856 100644 --- a/arch/powerpc/kvm/book3s_emulate.c +++ b/arch/powerpc/kvm/book3s_emulate.c | |||
@@ -212,7 +212,7 @@ int kvmppc_core_emulate_op(struct kvm_run *run, struct kvm_vcpu *vcpu, | |||
212 | r = kvmppc_st(vcpu, &addr, 32, zeros, true); | 212 | r = kvmppc_st(vcpu, &addr, 32, zeros, true); |
213 | if ((r == -ENOENT) || (r == -EPERM)) { | 213 | if ((r == -ENOENT) || (r == -EPERM)) { |
214 | *advance = 0; | 214 | *advance = 0; |
215 | vcpu->arch.dear = vaddr; | 215 | vcpu->arch.shared->dar = vaddr; |
216 | to_svcpu(vcpu)->fault_dar = vaddr; | 216 | to_svcpu(vcpu)->fault_dar = vaddr; |
217 | 217 | ||
218 | dsisr = DSISR_ISSTORE; | 218 | dsisr = DSISR_ISSTORE; |
@@ -330,7 +330,7 @@ int kvmppc_core_emulate_mtspr(struct kvm_vcpu *vcpu, int sprn, int rs) | |||
330 | vcpu->arch.shared->dsisr = spr_val; | 330 | vcpu->arch.shared->dsisr = spr_val; |
331 | break; | 331 | break; |
332 | case SPRN_DAR: | 332 | case SPRN_DAR: |
333 | vcpu->arch.dear = spr_val; | 333 | vcpu->arch.shared->dar = spr_val; |
334 | break; | 334 | break; |
335 | case SPRN_HIOR: | 335 | case SPRN_HIOR: |
336 | to_book3s(vcpu)->hior = spr_val; | 336 | to_book3s(vcpu)->hior = spr_val; |
@@ -443,7 +443,7 @@ int kvmppc_core_emulate_mfspr(struct kvm_vcpu *vcpu, int sprn, int rt) | |||
443 | kvmppc_set_gpr(vcpu, rt, vcpu->arch.shared->dsisr); | 443 | kvmppc_set_gpr(vcpu, rt, vcpu->arch.shared->dsisr); |
444 | break; | 444 | break; |
445 | case SPRN_DAR: | 445 | case SPRN_DAR: |
446 | kvmppc_set_gpr(vcpu, rt, vcpu->arch.dear); | 446 | kvmppc_set_gpr(vcpu, rt, vcpu->arch.shared->dar); |
447 | break; | 447 | break; |
448 | case SPRN_HIOR: | 448 | case SPRN_HIOR: |
449 | kvmppc_set_gpr(vcpu, rt, to_book3s(vcpu)->hior); | 449 | kvmppc_set_gpr(vcpu, rt, to_book3s(vcpu)->hior); |
diff --git a/arch/powerpc/kvm/book3s_paired_singles.c b/arch/powerpc/kvm/book3s_paired_singles.c index 749dfbd04738..807576f148ce 100644 --- a/arch/powerpc/kvm/book3s_paired_singles.c +++ b/arch/powerpc/kvm/book3s_paired_singles.c | |||
@@ -169,7 +169,7 @@ static void kvmppc_inject_pf(struct kvm_vcpu *vcpu, ulong eaddr, bool is_store) | |||
169 | 169 | ||
170 | shared->msr = kvmppc_set_field(shared->msr, 33, 36, 0); | 170 | shared->msr = kvmppc_set_field(shared->msr, 33, 36, 0); |
171 | shared->msr = kvmppc_set_field(shared->msr, 42, 47, 0); | 171 | shared->msr = kvmppc_set_field(shared->msr, 42, 47, 0); |
172 | vcpu->arch.dear = eaddr; | 172 | shared->dar = eaddr; |
173 | /* Page Fault */ | 173 | /* Page Fault */ |
174 | dsisr = kvmppc_set_field(0, 33, 33, 1); | 174 | dsisr = kvmppc_set_field(0, 33, 33, 1); |
175 | if (is_store) | 175 | if (is_store) |
diff --git a/arch/powerpc/kvm/booke.c b/arch/powerpc/kvm/booke.c index 4ec9d49a1cb9..4aab6d2ce133 100644 --- a/arch/powerpc/kvm/booke.c +++ b/arch/powerpc/kvm/booke.c | |||
@@ -195,7 +195,7 @@ static int kvmppc_booke_irqprio_deliver(struct kvm_vcpu *vcpu, | |||
195 | if (update_esr == true) | 195 | if (update_esr == true) |
196 | vcpu->arch.esr = vcpu->arch.queued_esr; | 196 | vcpu->arch.esr = vcpu->arch.queued_esr; |
197 | if (update_dear == true) | 197 | if (update_dear == true) |
198 | vcpu->arch.dear = vcpu->arch.queued_dear; | 198 | vcpu->arch.shared->dar = vcpu->arch.queued_dear; |
199 | kvmppc_set_msr(vcpu, vcpu->arch.shared->msr & msr_mask); | 199 | kvmppc_set_msr(vcpu, vcpu->arch.shared->msr & msr_mask); |
200 | 200 | ||
201 | clear_bit(priority, &vcpu->arch.pending_exceptions); | 201 | clear_bit(priority, &vcpu->arch.pending_exceptions); |
diff --git a/arch/powerpc/kvm/booke_emulate.c b/arch/powerpc/kvm/booke_emulate.c index b115203ac118..51ef4539ed51 100644 --- a/arch/powerpc/kvm/booke_emulate.c +++ b/arch/powerpc/kvm/booke_emulate.c | |||
@@ -105,7 +105,7 @@ int kvmppc_booke_emulate_mtspr(struct kvm_vcpu *vcpu, int sprn, int rs) | |||
105 | 105 | ||
106 | switch (sprn) { | 106 | switch (sprn) { |
107 | case SPRN_DEAR: | 107 | case SPRN_DEAR: |
108 | vcpu->arch.dear = spr_val; break; | 108 | vcpu->arch.shared->dar = spr_val; break; |
109 | case SPRN_ESR: | 109 | case SPRN_ESR: |
110 | vcpu->arch.esr = spr_val; break; | 110 | vcpu->arch.esr = spr_val; break; |
111 | case SPRN_DBCR0: | 111 | case SPRN_DBCR0: |
@@ -200,7 +200,7 @@ int kvmppc_booke_emulate_mfspr(struct kvm_vcpu *vcpu, int sprn, int rt) | |||
200 | case SPRN_IVPR: | 200 | case SPRN_IVPR: |
201 | kvmppc_set_gpr(vcpu, rt, vcpu->arch.ivpr); break; | 201 | kvmppc_set_gpr(vcpu, rt, vcpu->arch.ivpr); break; |
202 | case SPRN_DEAR: | 202 | case SPRN_DEAR: |
203 | kvmppc_set_gpr(vcpu, rt, vcpu->arch.dear); break; | 203 | kvmppc_set_gpr(vcpu, rt, vcpu->arch.shared->dar); break; |
204 | case SPRN_ESR: | 204 | case SPRN_ESR: |
205 | kvmppc_set_gpr(vcpu, rt, vcpu->arch.esr); break; | 205 | kvmppc_set_gpr(vcpu, rt, vcpu->arch.esr); break; |
206 | case SPRN_DBCR0: | 206 | case SPRN_DBCR0: |