diff options
| author | Linus Torvalds <torvalds@linux-foundation.org> | 2012-07-24 15:01:20 -0400 |
|---|---|---|
| committer | Linus Torvalds <torvalds@linux-foundation.org> | 2012-07-24 15:01:20 -0400 |
| commit | 5fecc9d8f59e765c2a48379dd7c6f5cf88c7d75a (patch) | |
| tree | d1fc25d9650d3ac24591bba6f5e2e7a1afc54796 /arch/powerpc/kvm/booke_interrupts.S | |
| parent | 3c4cfadef6a1665d9cd02a543782d03d3e6740c6 (diff) | |
| parent | 1a577b72475d161b6677c05abe57301362023bb2 (diff) | |
Merge tag 'kvm-3.6-1' of git://git.kernel.org/pub/scm/virt/kvm/kvm
Pull KVM updates from Avi Kivity:
"Highlights include
- full big real mode emulation on pre-Westmere Intel hosts (can be
disabled with emulate_invalid_guest_state=0)
- relatively small ppc and s390 updates
- PCID/INVPCID support in guests
- EOI avoidance; 3.6 guests should perform better on 3.6 hosts on
interrupt intensive workloads)
- Lockless write faults during live migration
- EPT accessed/dirty bits support for new Intel processors"
Fix up conflicts in:
- Documentation/virtual/kvm/api.txt:
Stupid subchapter numbering, added next to each other.
- arch/powerpc/kvm/booke_interrupts.S:
PPC asm changes clashing with the KVM fixes
- arch/s390/include/asm/sigp.h, arch/s390/kvm/sigp.c:
Duplicated commits through the kvm tree and the s390 tree, with
subsequent edits in the KVM tree.
* tag 'kvm-3.6-1' of git://git.kernel.org/pub/scm/virt/kvm/kvm: (93 commits)
KVM: fix race with level interrupts
x86, hyper: fix build with !CONFIG_KVM_GUEST
Revert "apic: fix kvm build on UP without IOAPIC"
KVM guest: switch to apic_set_eoi_write, apic_write
apic: add apic_set_eoi_write for PV use
KVM: VMX: Implement PCID/INVPCID for guests with EPT
KVM: Add x86_hyper_kvm to complete detect_hypervisor_platform check
KVM: PPC: Critical interrupt emulation support
KVM: PPC: e500mc: Fix tlbilx emulation for 64-bit guests
KVM: PPC64: booke: Set interrupt computation mode for 64-bit host
KVM: PPC: bookehv: Add ESR flag to Data Storage Interrupt
KVM: PPC: bookehv64: Add support for std/ld emulation.
booke: Added crit/mc exception handler for e500v2
booke/bookehv: Add host crit-watchdog exception support
KVM: MMU: document mmu-lock and fast page fault
KVM: MMU: fix kvm_mmu_pagetable_walk tracepoint
KVM: MMU: trace fast page fault
KVM: MMU: fast path of handling guest page fault
KVM: MMU: introduce SPTE_MMU_WRITEABLE bit
KVM: MMU: fold tlb flush judgement into mmu_spte_update
...
Diffstat (limited to 'arch/powerpc/kvm/booke_interrupts.S')
| -rw-r--r-- | arch/powerpc/kvm/booke_interrupts.S | 55 |
1 files changed, 27 insertions, 28 deletions
diff --git a/arch/powerpc/kvm/booke_interrupts.S b/arch/powerpc/kvm/booke_interrupts.S index 8fd4b2a0911b..bb46b32f9813 100644 --- a/arch/powerpc/kvm/booke_interrupts.S +++ b/arch/powerpc/kvm/booke_interrupts.S | |||
| @@ -52,16 +52,21 @@ | |||
| 52 | (1<<BOOKE_INTERRUPT_PROGRAM) | \ | 52 | (1<<BOOKE_INTERRUPT_PROGRAM) | \ |
| 53 | (1<<BOOKE_INTERRUPT_DTLB_MISS)) | 53 | (1<<BOOKE_INTERRUPT_DTLB_MISS)) |
| 54 | 54 | ||
| 55 | .macro KVM_HANDLER ivor_nr | 55 | .macro KVM_HANDLER ivor_nr scratch srr0 |
| 56 | _GLOBAL(kvmppc_handler_\ivor_nr) | 56 | _GLOBAL(kvmppc_handler_\ivor_nr) |
| 57 | /* Get pointer to vcpu and record exit number. */ | 57 | /* Get pointer to vcpu and record exit number. */ |
| 58 | mtspr SPRN_SPRG_WSCRATCH0, r4 | 58 | mtspr \scratch , r4 |
| 59 | mfspr r4, SPRN_SPRG_RVCPU | 59 | mfspr r4, SPRN_SPRG_RVCPU |
| 60 | stw r3, VCPU_GPR(R3)(r4) | ||
| 60 | stw r5, VCPU_GPR(R5)(r4) | 61 | stw r5, VCPU_GPR(R5)(r4) |
| 61 | stw r6, VCPU_GPR(R6)(r4) | 62 | stw r6, VCPU_GPR(R6)(r4) |
| 63 | mfspr r3, \scratch | ||
| 62 | mfctr r5 | 64 | mfctr r5 |
| 63 | lis r6, kvmppc_resume_host@h | 65 | stw r3, VCPU_GPR(R4)(r4) |
| 64 | stw r5, VCPU_CTR(r4) | 66 | stw r5, VCPU_CTR(r4) |
| 67 | mfspr r3, \srr0 | ||
| 68 | lis r6, kvmppc_resume_host@h | ||
| 69 | stw r3, VCPU_PC(r4) | ||
| 65 | li r5, \ivor_nr | 70 | li r5, \ivor_nr |
| 66 | ori r6, r6, kvmppc_resume_host@l | 71 | ori r6, r6, kvmppc_resume_host@l |
| 67 | mtctr r6 | 72 | mtctr r6 |
| @@ -69,37 +74,35 @@ _GLOBAL(kvmppc_handler_\ivor_nr) | |||
| 69 | .endm | 74 | .endm |
| 70 | 75 | ||
| 71 | _GLOBAL(kvmppc_handlers_start) | 76 | _GLOBAL(kvmppc_handlers_start) |
| 72 | KVM_HANDLER BOOKE_INTERRUPT_CRITICAL | 77 | KVM_HANDLER BOOKE_INTERRUPT_CRITICAL SPRN_SPRG_RSCRATCH_CRIT SPRN_CSRR0 |
| 73 | KVM_HANDLER BOOKE_INTERRUPT_MACHINE_CHECK | 78 | KVM_HANDLER BOOKE_INTERRUPT_MACHINE_CHECK SPRN_SPRG_RSCRATCH_MC SPRN_MCSRR0 |
| 74 | KVM_HANDLER BOOKE_INTERRUPT_DATA_STORAGE | 79 | KVM_HANDLER BOOKE_INTERRUPT_DATA_STORAGE SPRN_SPRG_RSCRATCH0 SPRN_SRR0 |
| 75 | KVM_HANDLER BOOKE_INTERRUPT_INST_STORAGE | 80 | KVM_HANDLER BOOKE_INTERRUPT_INST_STORAGE SPRN_SPRG_RSCRATCH0 SPRN_SRR0 |
| 76 | KVM_HANDLER BOOKE_INTERRUPT_EXTERNAL | 81 | KVM_HANDLER BOOKE_INTERRUPT_EXTERNAL SPRN_SPRG_RSCRATCH0 SPRN_SRR0 |
| 77 | KVM_HANDLER BOOKE_INTERRUPT_ALIGNMENT | 82 | KVM_HANDLER BOOKE_INTERRUPT_ALIGNMENT SPRN_SPRG_RSCRATCH0 SPRN_SRR0 |
| 78 | KVM_HANDLER BOOKE_INTERRUPT_PROGRAM | 83 | KVM_HANDLER BOOKE_INTERRUPT_PROGRAM SPRN_SPRG_RSCRATCH0 SPRN_SRR0 |
| 79 | KVM_HANDLER BOOKE_INTERRUPT_FP_UNAVAIL | 84 | KVM_HANDLER BOOKE_INTERRUPT_FP_UNAVAIL SPRN_SPRG_RSCRATCH0 SPRN_SRR0 |
| 80 | KVM_HANDLER BOOKE_INTERRUPT_SYSCALL | 85 | KVM_HANDLER BOOKE_INTERRUPT_SYSCALL SPRN_SPRG_RSCRATCH0 SPRN_SRR0 |
| 81 | KVM_HANDLER BOOKE_INTERRUPT_AP_UNAVAIL | 86 | KVM_HANDLER BOOKE_INTERRUPT_AP_UNAVAIL SPRN_SPRG_RSCRATCH0 SPRN_SRR0 |
| 82 | KVM_HANDLER BOOKE_INTERRUPT_DECREMENTER | 87 | KVM_HANDLER BOOKE_INTERRUPT_DECREMENTER SPRN_SPRG_RSCRATCH0 SPRN_SRR0 |
| 83 | KVM_HANDLER BOOKE_INTERRUPT_FIT | 88 | KVM_HANDLER BOOKE_INTERRUPT_FIT SPRN_SPRG_RSCRATCH0 SPRN_SRR0 |
| 84 | KVM_HANDLER BOOKE_INTERRUPT_WATCHDOG | 89 | KVM_HANDLER BOOKE_INTERRUPT_WATCHDOG SPRN_SPRG_RSCRATCH_CRIT SPRN_CSRR0 |
| 85 | KVM_HANDLER BOOKE_INTERRUPT_DTLB_MISS | 90 | KVM_HANDLER BOOKE_INTERRUPT_DTLB_MISS SPRN_SPRG_RSCRATCH0 SPRN_SRR0 |
| 86 | KVM_HANDLER BOOKE_INTERRUPT_ITLB_MISS | 91 | KVM_HANDLER BOOKE_INTERRUPT_ITLB_MISS SPRN_SPRG_RSCRATCH0 SPRN_SRR0 |
| 87 | KVM_HANDLER BOOKE_INTERRUPT_DEBUG | 92 | KVM_HANDLER BOOKE_INTERRUPT_DEBUG SPRN_SPRG_RSCRATCH_CRIT SPRN_CSRR0 |
| 88 | KVM_HANDLER BOOKE_INTERRUPT_SPE_UNAVAIL | 93 | KVM_HANDLER BOOKE_INTERRUPT_SPE_UNAVAIL SPRN_SPRG_RSCRATCH0 SPRN_SRR0 |
| 89 | KVM_HANDLER BOOKE_INTERRUPT_SPE_FP_DATA | 94 | KVM_HANDLER BOOKE_INTERRUPT_SPE_FP_DATA SPRN_SPRG_RSCRATCH0 SPRN_SRR0 |
| 90 | KVM_HANDLER BOOKE_INTERRUPT_SPE_FP_ROUND | 95 | KVM_HANDLER BOOKE_INTERRUPT_SPE_FP_ROUND SPRN_SPRG_RSCRATCH0 SPRN_SRR0 |
| 91 | 96 | ||
| 92 | _GLOBAL(kvmppc_handler_len) | 97 | _GLOBAL(kvmppc_handler_len) |
| 93 | .long kvmppc_handler_1 - kvmppc_handler_0 | 98 | .long kvmppc_handler_1 - kvmppc_handler_0 |
| 94 | 99 | ||
| 95 | |||
| 96 | /* Registers: | 100 | /* Registers: |
| 97 | * SPRG_SCRATCH0: guest r4 | 101 | * SPRG_SCRATCH0: guest r4 |
| 98 | * r4: vcpu pointer | 102 | * r4: vcpu pointer |
| 99 | * r5: KVM exit number | 103 | * r5: KVM exit number |
| 100 | */ | 104 | */ |
| 101 | _GLOBAL(kvmppc_resume_host) | 105 | _GLOBAL(kvmppc_resume_host) |
| 102 | stw r3, VCPU_GPR(R3)(r4) | ||
| 103 | mfcr r3 | 106 | mfcr r3 |
| 104 | stw r3, VCPU_CR(r4) | 107 | stw r3, VCPU_CR(r4) |
| 105 | stw r7, VCPU_GPR(R7)(r4) | 108 | stw r7, VCPU_GPR(R7)(r4) |
| @@ -180,10 +183,6 @@ _GLOBAL(kvmppc_resume_host) | |||
| 180 | stw r3, VCPU_LR(r4) | 183 | stw r3, VCPU_LR(r4) |
| 181 | mfxer r3 | 184 | mfxer r3 |
| 182 | stw r3, VCPU_XER(r4) | 185 | stw r3, VCPU_XER(r4) |
| 183 | mfspr r3, SPRN_SPRG_RSCRATCH0 | ||
| 184 | stw r3, VCPU_GPR(R4)(r4) | ||
| 185 | mfspr r3, SPRN_SRR0 | ||
| 186 | stw r3, VCPU_PC(r4) | ||
| 187 | 186 | ||
| 188 | /* Restore host stack pointer and PID before IVPR, since the host | 187 | /* Restore host stack pointer and PID before IVPR, since the host |
| 189 | * exception handlers use them. */ | 188 | * exception handlers use them. */ |
