linux/arch/powerpc/kvm
Paul Mackerras bc1bc4e392 KVM: PPC: Book3S PR: Fix invalidation of SLB entry 0 on guest entry
On entering a PR KVM guest, we invalidate the whole SLB before loading
up the guest entries.  We do this using an slbia instruction, which
invalidates all entries except entry 0, followed by an slbie to
invalidate entry 0.  However, the slbie turns out to be ineffective
in some circumstances (specifically when the host linear mapping uses
64k pages) because of errors in computing the parameter to the slbie.
The result is that the guest kernel hangs very early in boot because
it takes a DSI the first time it tries to access kernel data using
a linear mapping address in real mode.

Currently we construct bits 36 - 43 (big-endian numbering) of the slbie
parameter by taking bits 56 - 63 of the SLB VSID doubleword.  These bits
for the tlbie are C (class, 1 bit), B (segment size, 2 bits) and 5
reserved bits.  For the SLB VSID doubleword these are C (class, 1 bit),
reserved (1 bit), LP (large page size, 2 bits), and 4 reserved bits.
Thus we are not setting the B field correctly, and when LP = 01 as
it is for 64k pages, we are setting a reserved bit.

Rather than add more instructions to calculate the slbie parameter
correctly, this takes a simpler approach, which is to set entry 0 to
zeroes explicitly.  Normally slbmte should not be used to invalidate
an entry, since it doesn't invalidate the ERATs, but it is OK to use
it to invalidate an entry if it is immediately followed by slbia,
which does invalidate the ERATs.  (This has been confirmed with the
Power architects.)  This approach takes fewer instructions and will
work whatever the contents of entry 0.

Signed-off-by: Paul Mackerras <paulus@samba.org>
Signed-off-by: Alexander Graf <agraf@suse.de>
2013-06-30 03:33:21 +02:00
..
44x_emulate.c KVM: PPC: 44x: fix DCR read/write 2012-10-30 10:54:50 +01:00
44x_tlb.c KVM: do not release the error page 2012-08-06 16:04:58 +03:00
44x_tlb.h KVM: ppc: rename 44x MMU functions used in booke.c 2009-03-24 11:02:56 +02:00
44x.c KVM: PPC: Book3E: Refactor ONE_REG ioctl implementation 2013-04-26 20:27:05 +02:00
book3s_32_mmu_host.c KVM: do not treat noslot pfn as a error pfn 2012-10-29 20:31:04 -02:00
book3s_32_mmu.c KVM: PPC: Put segment registers in shared page 2010-10-24 10:52:11 +02:00
book3s_32_sr.S KVM: PPC: book3s_pr: Simplify transitions between virtual and real mode 2011-09-25 19:52:29 +03:00
book3s_64_mmu_host.c KVM: PPC: Book3S PR: Fix proto-VSID calculations 2013-06-30 03:33:21 +02:00
book3s_64_mmu_hv.c Merge tag 'kvm-3.10-1' of git://git.kernel.org/pub/scm/virt/kvm/kvm 2013-05-05 14:47:31 -07:00
book3s_64_mmu.c KVM: PPC: Interpret SDR1 as HVA in PAPR mode 2011-09-25 19:52:21 +03:00
book3s_64_slb.S KVM: PPC: Book3S PR: Fix invalidation of SLB entry 0 on guest entry 2013-06-30 03:33:21 +02:00
book3s_64_vio_hv.c kvm/book3s: Make kernel emulated H_PUT_TCE available for "PR" KVM 2012-05-06 16:19:11 +02:00
book3s_64_vio.c constify a bunch of struct file_operations instances 2013-04-09 14:16:20 -04:00
book3s_emulate.c KVM: extend EMULATE_EXIT_USER to support different exit reasons 2013-04-26 20:27:03 +02:00
book3s_exports.c KVM: PPC: Book3S PR: Fix VSX handling 2012-12-06 01:34:02 +01:00
book3s_hv_builtin.c KVM: PPC: Quieten message about allocating linear regions 2012-10-05 23:38:40 +02:00
book3s_hv_interrupts.S powerpc: Fix build errors with UP configs in HV-style KVM 2013-04-18 13:03:57 +10:00
book3s_hv_ras.c KVM: PPC: Book3S HV: Fix compilation without CONFIG_PPC_POWERNV 2013-01-06 14:02:00 +01:00
book3s_hv_rm_mmu.c KVM: PPC: Book3S HV: Make HPT reading code notice R/C bit changes 2013-04-26 20:27:12 +02:00
book3s_hv_rm_xics.c KVM: PPC: Book3S HV: Add support for real mode ICP in XICS emulation 2013-04-26 20:27:32 +02:00
book3s_hv_rmhandlers.S KVM: PPC: Book3S HV: Improve real-mode handling of external interrupts 2013-04-26 20:27:32 +02:00
book3s_hv.c Merge tag 'kvm-3.10-1' of git://git.kernel.org/pub/scm/virt/kvm/kvm 2013-05-05 14:47:31 -07:00
book3s_interrupts.S powerpc: Merge VCPU_GPR 2012-07-10 19:18:06 +10:00
book3s_mmu_hpte.c hlist: drop the node parameter from iterators 2013-02-27 19:10:24 -08:00
book3s_paired_singles.c powerpc/kvm: Fallout from system.h disintegration 2012-04-02 14:00:04 +10:00
book3s_pr_papr.c KVM: PPC: Book3S: Add kernel emulation for the XICS interrupt controller 2013-04-26 20:27:30 +02:00
book3s_pr.c Merge tag 'kvm-3.10-1' of git://git.kernel.org/pub/scm/virt/kvm/kvm 2013-05-05 14:47:31 -07:00
book3s_rmhandlers.S KVM: PPC: Book3S PR: Fix VSX handling 2012-12-06 01:34:02 +01:00
book3s_rtas.c KVM: PPC: Book3S: Add support for ibm,int-on/off RTAS calls 2013-04-26 20:27:33 +02:00
book3s_segment.S powerpc: Move and fix MTMSR_EERI definition 2012-07-10 19:18:08 +10:00
book3s_xics.c KVM: PPC: Book3S: Add API for in-kernel XICS emulation 2013-05-02 15:28:36 +02:00
book3s_xics.h KVM: PPC: Book3S: Add API for in-kernel XICS emulation 2013-05-02 15:28:36 +02:00
book3s.c KVM: PPC: Book3S: Facilities to save/restore XICS presentation ctrler state 2013-04-26 20:27:34 +02:00
booke_emulate.c KVM: PPC: BookE: Emulate mfspr on EPR 2013-01-10 13:42:30 +01:00
booke_interrupts.S KVM: PPC: booke: Added debug handler 2013-03-22 01:21:09 +01:00
booke.c KVM: PPC: Guard doorbell exception with CONFIG_PPC_DOORBELL 2013-06-30 03:33:21 +02:00
booke.h KVM: PPC: booke: Allow multiple exception types 2013-02-13 12:56:40 +01:00
bookehv_interrupts.S KVM: PPC: bookehv64: Add support for interrupt handling 2012-12-06 01:34:11 +01:00
e500_emulate.c KVM: PPC: e500: Add support for EPTCFG register 2013-04-26 20:27:08 +02:00
e500_mmu_host.c kvm/ppc/e500: eliminate tlb_refs 2013-04-11 15:53:43 +02:00
e500_mmu_host.h KVM: PPC: E500: Make clear_tlb_refs and clear_tlb1_bitmap static 2013-01-24 19:23:33 +01:00
e500_mmu.c KVM: PPC: e500: Remove E.PT and E.HV.LRAT categories from VCPUs 2013-04-26 20:27:09 +02:00
e500.c KVM: PPC: e500: Expose MMU registers via ONE_REG 2013-04-26 20:27:06 +02:00
e500.h KVM: PPC: e500: Add support for TLBnPS registers 2013-04-26 20:27:07 +02:00
e500mc.c Merge tag 'kvm-3.10-1' of git://git.kernel.org/pub/scm/virt/kvm/kvm 2013-05-05 14:47:31 -07:00
emulate.c KVM: PPC: emulate dcbst 2013-04-17 15:21:15 +02:00
fpu.S powerpc: Remove fpscr use from [kvm_]cvt_{fd,df} 2010-09-02 14:07:32 +10:00
irq.h KVM: PPC: Book3S: Add API for in-kernel XICS emulation 2013-05-02 15:28:36 +02:00
Kconfig KVM: PPC: Book3S: Add kernel emulation for the XICS interrupt controller 2013-04-26 20:27:30 +02:00
Makefile KVM: get rid of $(addprefix ../../../virt/kvm/, ...) in Makefiles 2013-05-19 15:14:00 +03:00
mpic.c kvm/ppc/mpic: fix missing unlock in set_base_addr() 2013-05-02 15:28:35 +02:00
powerpc.c KVM: PPC: Book3S: Add API for in-kernel XICS emulation 2013-05-02 15:28:36 +02:00
timing.c KVM: PPC: fix partial application of "exit timing in ticks" 2011-07-12 13:16:28 +03:00
timing.h KVM: PPC: booke: category E.HV (GS-mode) support 2012-04-08 12:51:19 +03:00
trace.h Merge remote-tracking branch 'master' into queue 2012-10-29 19:15:32 -02:00