linux/arch/powerpc/kvm
Paul Mackerras d78bca7296 KVM: PPC: Book3S PR: Use mmu_notifier_retry() in kvmppc_mmu_map_page()
When the MM code is invalidating a range of pages, it calls the KVM
kvm_mmu_notifier_invalidate_range_start() notifier function, which calls
kvm_unmap_hva_range(), which arranges to flush all the existing host
HPTEs for guest pages.  However, the Linux PTEs for the range being
flushed are still valid at that point.  We are not supposed to establish
any new references to pages in the range until the ...range_end()
notifier gets called.  The PPC-specific KVM code doesn't get any
explicit notification of that; instead, we are supposed to use
mmu_notifier_retry() to test whether we are or have been inside a
range flush notifier pair while we have been getting a page and
instantiating a host HPTE for the page.

This therefore adds a call to mmu_notifier_retry inside
kvmppc_mmu_map_page().  This call is inside a region locked with
kvm->mmu_lock, which is the same lock that is called by the KVM
MMU notifier functions, thus ensuring that no new notification can
proceed while we are in the locked region.  Inside this region we
also create the host HPTE and link the corresponding hpte_cache
structure into the lists used to find it later.  We cannot allocate
the hpte_cache structure inside this locked region because that can
lead to deadlock, so we allocate it outside the region and free it
if we end up not using it.

This also moves the updates of vcpu3s->hpte_cache_count inside the
regions locked with vcpu3s->mmu_lock, and does the increment in
kvmppc_mmu_hpte_cache_map() when the pte is added to the cache
rather than when it is allocated, in order that the hpte_cache_count
is accurate.

Signed-off-by: Paul Mackerras <paulus@samba.org>
Signed-off-by: Alexander Graf <agraf@suse.de>
2013-10-17 14:49:35 +02:00
..
44x_emulate.c KVM: PPC: 44x: fix DCR read/write 2012-10-30 10:54:50 +01:00
44x_tlb.c kvm/ppc/booke: Hold srcu lock when calling gfn functions 2013-06-11 11:10:59 +03:00
44x_tlb.h
44x.c KVM: PPC: Book3E: Refactor ONE_REG ioctl implementation 2013-04-26 20:27:05 +02:00
book3s_32_mmu_host.c KVM: PPC: Book3S PR: Better handling of host-side read-only pages 2013-10-17 14:49:35 +02:00
book3s_32_mmu.c KVM: PPC: Book3S PR: Better handling of host-side read-only pages 2013-10-17 14:49:35 +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: Use mmu_notifier_retry() in kvmppc_mmu_map_page() 2013-10-17 14:49:35 +02:00
book3s_64_mmu_hv.c KVM: PPC: Book3S PR: Better handling of host-side read-only pages 2013-10-17 14:49:35 +02:00
book3s_64_mmu.c KVM: PPC: Book3S PR: Better handling of host-side read-only pages 2013-10-17 14:49:35 +02:00
book3s_64_slb.S powerpc: Fix little endian lppaca, slb_shadow and dtl_entry 2013-08-14 15:33:35 +10: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 ppc: kvm: use anon_inode_getfd() with O_CLOEXEC flag 2013-08-26 13:19:56 +03:00
book3s_emulate.c KVM: PPC: Book3S PR: Keep volatile reg values in vcpu rather than shadow_vcpu 2013-10-17 14:45: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 powerpc/kvm: Contiguous memory allocator based RMA allocation 2013-07-08 16:20:20 +02:00
book3s_hv_cma.c powerpc/kvm: Use 256K chunk to track both RMA and hash page table allocation. 2013-07-08 16:21:13 +02:00
book3s_hv_cma.h powerpc/kvm: Use 256K chunk to track both RMA and hash page table allocation. 2013-07-08 16:21:13 +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 Merge branch 'next' of git://git.kernel.org/pub/scm/linux/kernel/git/benh/powerpc 2013-09-06 10:49:42 -07: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: Move skip-interrupt handlers to common code 2013-10-17 14:49:35 +02:00
book3s_hv.c KVM: PPC: Book3S HV: Don't crash host on unknown guest interrupt 2013-10-17 14:45:02 +02:00
book3s_interrupts.S KVM: PPC: Book3S PR: Keep volatile reg values in vcpu rather than shadow_vcpu 2013-10-17 14:45:03 +02:00
book3s_mmu_hpte.c KVM: PPC: Book3S PR: Use mmu_notifier_retry() in kvmppc_mmu_map_page() 2013-10-17 14:49:35 +02: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 PR: Make HPT accesses and updates SMP-safe 2013-10-17 14:45:04 +02:00
book3s_pr.c KVM: PPC: Book3S PR: Better handling of host-side read-only pages 2013-10-17 14:49:35 +02:00
book3s_rmhandlers.S KVM: PPC: Book3S: Move skip-interrupt handlers to common code 2013-10-17 14:49:35 +02: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: Fix compile error in XICS emulation 2013-08-28 16:28:47 +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 PR: Better handling of host-side read-only pages 2013-10-17 14:49:35 +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: BookE: Add GET/SET_ONE_REG interface for VRSAVE 2013-10-17 14:45:01 +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/booke: Hold srcu lock when calling gfn functions 2013-06-11 11:10:59 +03: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 kvm/ppc/booke64: Disable e6500 support 2013-06-11 11:10:56 +03:00
emulate.c powerpc: Move opcode definitions from kvm/emulate.c to asm/ppc-opcode.h 2013-07-30 15:50:07 -05:00
fpu.S
irq.h KVM: PPC: Book3S: Add API for in-kernel XICS emulation 2013-05-02 15:28:36 +02:00
Kconfig powerpc/kvm: Contiguous memory allocator based hash page table allocation 2013-07-08 16:19:58 +02:00
Makefile powerpc/kvm: Contiguous memory allocator based hash page table allocation 2013-07-08 16:19:58 +02:00
mpic.c kvm/ppc/mpic: fix missing unlock in set_base_addr() 2013-05-02 15:28:35 +02:00
powerpc.c Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/viro/vfs 2013-09-05 08:50:26 -07: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 KVM: PPC: Book3S PR: Keep volatile reg values in vcpu rather than shadow_vcpu 2013-10-17 14:45:03 +02:00