diff options
-rw-r--r-- | arch/powerpc/kvm/book3s_hv_rmhandlers.S | 20 |
1 files changed, 12 insertions, 8 deletions
diff --git a/arch/powerpc/kvm/book3s_hv_rmhandlers.S b/arch/powerpc/kvm/book3s_hv_rmhandlers.S index b1dab8d1d885..3c6badcd53ef 100644 --- a/arch/powerpc/kvm/book3s_hv_rmhandlers.S +++ b/arch/powerpc/kvm/book3s_hv_rmhandlers.S | |||
@@ -1749,7 +1749,8 @@ kvmppc_hdsi: | |||
1749 | beq 3f | 1749 | beq 3f |
1750 | clrrdi r0, r4, 28 | 1750 | clrrdi r0, r4, 28 |
1751 | PPC_SLBFEE_DOT(R5, R0) /* if so, look up SLB */ | 1751 | PPC_SLBFEE_DOT(R5, R0) /* if so, look up SLB */ |
1752 | bne 1f /* if no SLB entry found */ | 1752 | li r0, BOOK3S_INTERRUPT_DATA_SEGMENT |
1753 | bne 7f /* if no SLB entry found */ | ||
1753 | 4: std r4, VCPU_FAULT_DAR(r9) | 1754 | 4: std r4, VCPU_FAULT_DAR(r9) |
1754 | stw r6, VCPU_FAULT_DSISR(r9) | 1755 | stw r6, VCPU_FAULT_DSISR(r9) |
1755 | 1756 | ||
@@ -1768,14 +1769,15 @@ kvmppc_hdsi: | |||
1768 | cmpdi r3, -2 /* MMIO emulation; need instr word */ | 1769 | cmpdi r3, -2 /* MMIO emulation; need instr word */ |
1769 | beq 2f | 1770 | beq 2f |
1770 | 1771 | ||
1771 | /* Synthesize a DSI for the guest */ | 1772 | /* Synthesize a DSI (or DSegI) for the guest */ |
1772 | ld r4, VCPU_FAULT_DAR(r9) | 1773 | ld r4, VCPU_FAULT_DAR(r9) |
1773 | mr r6, r3 | 1774 | mr r6, r3 |
1774 | 1: mtspr SPRN_DAR, r4 | 1775 | 1: li r0, BOOK3S_INTERRUPT_DATA_STORAGE |
1775 | mtspr SPRN_DSISR, r6 | 1776 | mtspr SPRN_DSISR, r6 |
1777 | 7: mtspr SPRN_DAR, r4 | ||
1776 | mtspr SPRN_SRR0, r10 | 1778 | mtspr SPRN_SRR0, r10 |
1777 | mtspr SPRN_SRR1, r11 | 1779 | mtspr SPRN_SRR1, r11 |
1778 | li r10, BOOK3S_INTERRUPT_DATA_STORAGE | 1780 | mr r10, r0 |
1779 | bl kvmppc_msr_interrupt | 1781 | bl kvmppc_msr_interrupt |
1780 | fast_interrupt_c_return: | 1782 | fast_interrupt_c_return: |
1781 | 6: ld r7, VCPU_CTR(r9) | 1783 | 6: ld r7, VCPU_CTR(r9) |
@@ -1823,7 +1825,8 @@ kvmppc_hisi: | |||
1823 | beq 3f | 1825 | beq 3f |
1824 | clrrdi r0, r10, 28 | 1826 | clrrdi r0, r10, 28 |
1825 | PPC_SLBFEE_DOT(R5, R0) /* if so, look up SLB */ | 1827 | PPC_SLBFEE_DOT(R5, R0) /* if so, look up SLB */ |
1826 | bne 1f /* if no SLB entry found */ | 1828 | li r0, BOOK3S_INTERRUPT_INST_SEGMENT |
1829 | bne 7f /* if no SLB entry found */ | ||
1827 | 4: | 1830 | 4: |
1828 | /* Search the hash table. */ | 1831 | /* Search the hash table. */ |
1829 | mr r3, r9 /* vcpu pointer */ | 1832 | mr r3, r9 /* vcpu pointer */ |
@@ -1840,11 +1843,12 @@ kvmppc_hisi: | |||
1840 | cmpdi r3, -1 /* handle in kernel mode */ | 1843 | cmpdi r3, -1 /* handle in kernel mode */ |
1841 | beq guest_exit_cont | 1844 | beq guest_exit_cont |
1842 | 1845 | ||
1843 | /* Synthesize an ISI for the guest */ | 1846 | /* Synthesize an ISI (or ISegI) for the guest */ |
1844 | mr r11, r3 | 1847 | mr r11, r3 |
1845 | 1: mtspr SPRN_SRR0, r10 | 1848 | 1: li r0, BOOK3S_INTERRUPT_INST_STORAGE |
1849 | 7: mtspr SPRN_SRR0, r10 | ||
1846 | mtspr SPRN_SRR1, r11 | 1850 | mtspr SPRN_SRR1, r11 |
1847 | li r10, BOOK3S_INTERRUPT_INST_STORAGE | 1851 | mr r10, r0 |
1848 | bl kvmppc_msr_interrupt | 1852 | bl kvmppc_msr_interrupt |
1849 | b fast_interrupt_c_return | 1853 | b fast_interrupt_c_return |
1850 | 1854 | ||