linux-stable/arch/powerpc/kernel
Paul Mackerras 697d3899dc KVM: PPC: Implement MMIO emulation support for Book3S HV guests
This provides the low-level support for MMIO emulation in Book3S HV
guests.  When the guest tries to map a page which is not covered by
any memslot, that page is taken to be an MMIO emulation page.  Instead
of inserting a valid HPTE, we insert an HPTE that has the valid bit
clear but another hypervisor software-use bit set, which we call
HPTE_V_ABSENT, to indicate that this is an absent page.  An
absent page is treated much like a valid page as far as guest hcalls
(H_ENTER, H_REMOVE, H_READ etc.) are concerned, except of course that
an absent HPTE doesn't need to be invalidated with tlbie since it
was never valid as far as the hardware is concerned.

When the guest accesses a page for which there is an absent HPTE, it
will take a hypervisor data storage interrupt (HDSI) since we now set
the VPM1 bit in the LPCR.  Our HDSI handler for HPTE-not-present faults
looks up the hash table and if it finds an absent HPTE mapping the
requested virtual address, will switch to kernel mode and handle the
fault in kvmppc_book3s_hv_page_fault(), which at present just calls
kvmppc_hv_emulate_mmio() to set up the MMIO emulation.

This is based on an earlier patch by Benjamin Herrenschmidt, but since
heavily reworked.

Signed-off-by: Paul Mackerras <paulus@samba.org>
Signed-off-by: Alexander Graf <agraf@suse.de>
Signed-off-by: Avi Kivity <avi@redhat.com>
2012-03-05 14:52:37 +02:00
..
vdso32 Fix common misspellings 2011-03-31 11:26:23 -03:00
vdso64 Fix common misspellings 2011-03-31 11:26:23 -03:00
.gitignore
align.c powerpc: Remove fpscr use from [kvm_]cvt_{fd,df} 2010-09-02 14:07:32 +10:00
asm-offsets.c KVM: PPC: Implement MMIO emulation support for Book3S HV guests 2012-03-05 14:52:37 +02:00
audit.c
btext.c powerpc: various straight conversions from module.h --> export.h 2011-10-31 19:30:44 -04:00
cacheinfo.c cpu: convert 'cpu' and 'machinecheck' sysdev_class to a regular subsystem 2011-12-21 14:29:42 -08:00
cacheinfo.h
clock.c powerpc: various straight conversions from module.h --> export.h 2011-10-31 19:30:44 -04:00
compat_audit.c
cpu_setup_6xx.S powerpc: Fix some 6xx/7xxx CPU setup functions 2011-02-07 12:57:11 +11:00
cpu_setup_44x.S powerpc/44x: Add support for the AMCC APM821xx SoC 2010-10-13 08:47:09 -04:00
cpu_setup_a2.S powerpc/book3e: Add ICSWX/ACOP support to Book3e cores like A2 2011-11-25 14:11:28 +11:00
cpu_setup_fsl_booke.S powerpc/e5500: set non-base IVORs 2011-05-19 00:36:43 -05:00
cpu_setup_pa6t.S
cpu_setup_power7.S powerpc, KVM: Split HVMODE_206 cpu feature bit into separate HV and architecture bits 2011-07-12 13:16:58 +03:00
cpu_setup_ppc970.S powerpc, KVM: Split HVMODE_206 cpu feature bit into separate HV and architecture bits 2011-07-12 13:16:58 +03:00
cputable.c powerpc/476fpe: Add 476fpe SoC code 2011-12-09 07:51:02 -05:00
crash.c powerpc/crash: Fix build error without SMP 2012-01-25 09:47:45 +11:00
crash_dump.c powerpc: Rename mapping based RELOCATABLE to DYNAMIC_MEMSTART for BookE 2011-12-20 10:20:19 -05:00
dbell.c powerpc: Consolidate ipi message mux and demux 2011-05-19 15:31:03 +10:00
dma-iommu.c Merge branch 'modsplit-Oct31_2011' of git://git.kernel.org/pub/scm/linux/kernel/git/paulg/linux 2011-11-06 19:44:47 -08:00
dma-swiotlb.c powerpc: Use the newly added get_required_mask dma_map_ops hook 2011-09-20 09:19:35 +10:00
dma.c Merge branch 'modsplit-Oct31_2011' of git://git.kernel.org/pub/scm/linux/kernel/git/paulg/linux 2011-11-06 19:44:47 -08:00
e500-pmu.c perf, arch: Add generic NODE cache events 2011-07-01 11:06:38 +02:00
entry_32.S powerpc: Fix various issues with return to userspace 2012-02-22 16:48:53 +11:00
entry_64.S powerpc: Fix various issues with return to userspace 2012-02-22 16:48:53 +11:00
exceptions-64e.S powerpc/book3e-64: Reraise doorbell when masked by soft-irq-disable 2011-06-29 16:40:59 +10:00
exceptions-64s.S KVM: PPC: Implement MMIO emulation support for Book3S HV guests 2012-03-05 14:52:37 +02:00
firmware.c powerpc: fix implicit use of cache.h in kernel/firmware.c 2011-10-31 19:30:41 -04:00
fpu.S powerpc: Remove second definition of STACK_FRAME_OVERHEAD 2010-11-29 15:48:23 +11:00
fsl_booke_entry_mapping.S powerpc/fsl-booke: Fix address issue when using relocatable kernels 2010-07-11 11:04:08 -05:00
ftrace.c powerpc/ftrace: Implement raw syscall tracepoints on PowerPC 2011-05-26 13:38:57 +10:00
head_8xx.S powerpc/32: Pass device tree address as u64 to machine_init 2011-09-20 09:19:47 +10:00
head_32.S powerpc/32: Pass device tree address as u64 to machine_init 2011-09-20 09:19:47 +10:00
head_40x.S powerpc/32: Pass device tree address as u64 to machine_init 2011-09-20 09:19:47 +10:00
head_44x.S powerpc/44x: Enable CONFIG_RELOCATABLE for PPC44x 2011-12-20 10:21:57 -05:00
head_64.S powerpc/powernv: Support for OPAL console 2011-09-20 16:09:54 +10:00
head_booke.h powerpc/85xx: Save scratch registers to thread info instead of using SPRGs. 2011-06-22 21:44:55 -05:00
head_fsl_booke.S powerpc: Rename mapping based RELOCATABLE to DYNAMIC_MEMSTART for BookE 2011-12-20 10:20:19 -05:00
hw_breakpoint.c powerpc: remove non-required uses of include <linux/module.h> 2011-10-31 19:30:44 -04:00
ibmebus.c Merge branch 'modsplit-Oct31_2011' of git://git.kernel.org/pub/scm/linux/kernel/git/paulg/linux 2011-11-06 19:44:47 -08:00
idle.c powerpc: Fix RCU idle and hcall tracing 2012-01-11 11:54:20 +11:00
idle_6xx.S
idle_book3e.S powerpc/book3e: Add generic 64-bit idle powersave support 2010-07-14 14:13:18 +10:00
idle_e500.S powerpc: e500mc: Fix: use CONFIG_PPC_E500MC in idle_e500.S 2011-10-11 23:23:24 -05:00
idle_power4.S powerpc/pmac/smp: Properly NAP offlined CPU on G5 2011-04-01 15:37:25 +11:00
idle_power7.S powerpc: Provide a way for KVM to indicate that NV GPR values are lost 2011-12-08 14:22:53 +11:00
init_task.c powerpc: various straight conversions from module.h --> export.h 2011-10-31 19:30:44 -04:00
io-workarounds.c powerpc: io-workarounds.c was implicitly getting init_mm 2011-10-31 19:30:37 -04:00
io.c powerpc: various straight conversions from module.h --> export.h 2011-10-31 19:30:44 -04:00
iomap.c powerpc: switch to GENERIC_PCI_IOMAP 2011-11-28 21:13:18 +02:00
iommu.c powerpc: Reserve iommu page 0 2011-09-23 10:27:03 +10:00
irq.c powerpc: Fix WARN_ON in decrementer_check_overflow 2012-02-14 15:01:38 +11:00
isa-bridge.c powerpc: add export.h to files making use of EXPORT_SYMBOL 2011-10-31 19:30:37 -04:00
jump_label.c powerpc: Fix build breakage in jump_label.c 2011-11-16 14:25:19 +11:00
kgdb.c Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/jikos/trivial 2011-05-23 09:12:26 -07:00
kprobes.c powerpc/kprobes: Remove resume_execution() in kprobes 2010-06-02 17:50:37 +10:00
kvm.c KVM: PPC: Avoid patching paravirt template code 2012-03-05 14:52:34 +02:00
kvm_emul.S KVM: PPC: Avoid patching paravirt template code 2012-03-05 14:52:34 +02:00
l2cr_6xx.S Fix common misspellings 2011-03-31 11:26:23 -03:00
legacy_serial.c powerpc: Fix build on some non-freescale platforms 2012-01-25 13:33:22 +11:00
lparcfg.c switch procfs to umode_t use 2012-01-03 22:54:56 -05:00
machine_kexec.c Merge branch 'next' of git://git.kernel.org/pub/scm/linux/kernel/git/benh/powerpc 2012-01-06 17:58:22 -08:00
machine_kexec_32.c treewide: convert uses of ATTRIB_NORETURN to __noreturn 2012-01-12 20:13:03 -08:00
machine_kexec_64.c treewide: convert uses of ATTRIB_NORETURN to __noreturn 2012-01-12 20:13:03 -08:00
Makefile powerpc: Process dynamic relocations for kernel 2011-12-20 10:21:08 -05:00
misc.S powerpc: Remove unneeded cpu_setup/restore from POWER7 cputable entry 2010-11-29 15:48:22 +11:00
misc_32.S powerpc/4xx: Fix typos in kexec config dependencies 2011-11-16 14:47:54 +11:00
misc_64.S powerpc/maple: Enable scom access functions on Maple 2011-06-29 17:48:20 +10:00
module.c powerpc: remove non-required uses of include <linux/module.h> 2011-10-31 19:30:44 -04:00
module_32.c modules: make arch's use default loader hooks 2011-07-24 22:06:04 +09:30
module_64.c modules: make arch's use default loader hooks 2011-07-24 22:06:04 +09:30
mpc7450-pmu.c Merge branch 'next' of git://git.kernel.org/pub/scm/linux/kernel/git/benh/powerpc 2011-07-25 22:59:39 -07:00
msi.c
nvram_64.c powerpc/nvram: Generalize code for OS partitions in NVRAM 2011-03-04 18:19:04 +11:00
of_platform.c powerpc: various straight conversions from module.h --> export.h 2011-10-31 19:30:44 -04:00
paca.c powerpc: various straight conversions from module.h --> export.h 2011-10-31 19:30:44 -04:00
pci-common.c Merge branch 'linux-next' of git://git.kernel.org/pub/scm/linux/kernel/git/jbarnes/pci 2012-01-11 18:50:26 -08:00
pci_32.c powerpc: include export.h for files using EXPORT_SYMBOL/THIS_MODULE 2011-10-31 19:30:38 -04:00
pci_64.c powerpc/PCI: split PHB part out of pcibios_map_io_space() 2012-01-06 12:11:08 -08:00
pci_dn.c powerpc/powernv: PCI support for p7IOC under OPAL v2 2011-11-25 14:53:15 +11:00
pci_of_scan.c powerpc: add export.h to files making use of EXPORT_SYMBOL 2011-10-31 19:30:37 -04:00
perf_callchain.c powerpc/perf: Disable pagefaults during callchain stack read 2011-08-05 14:47:56 +10:00
perf_event.c powerpc/perf: power_pmu_start restores incorrect values, breaking frequency events 2012-02-16 16:24:35 +11:00
perf_event_fsl_emb.c perf: Remove the nmi parameter from the swevent and overflow interface 2011-07-01 11:06:35 +02:00
pmc.c powerpc: various straight conversions from module.h --> export.h 2011-10-31 19:30:44 -04:00
power4-pmu.c Merge branch 'next' of git://git.kernel.org/pub/scm/linux/kernel/git/benh/powerpc 2011-07-25 22:59:39 -07:00
power5+-pmu.c Merge branch 'next' of git://git.kernel.org/pub/scm/linux/kernel/git/benh/powerpc 2011-07-25 22:59:39 -07:00
power5-pmu.c Merge branch 'next' of git://git.kernel.org/pub/scm/linux/kernel/git/benh/powerpc 2011-07-25 22:59:39 -07:00
power6-pmu.c powerpc/perf_event: Fix Power6 L1 cache read & write event codes] 2011-09-29 17:04:59 +10:00
power7-pmu.c perf events, powerpc: Add POWER7 stalled-cycles-frontend/backend events 2011-09-20 16:12:56 +10:00
ppc32.h
ppc970-pmu.c Merge branch 'next' of git://git.kernel.org/pub/scm/linux/kernel/git/benh/powerpc 2011-07-25 22:59:39 -07:00
ppc_ksyms.c powerpc: various straight conversions from module.h --> export.h 2011-10-31 19:30:44 -04:00
ppc_save_regs.S Fix common misspellings 2011-03-31 11:26:23 -03:00
proc_powerpc.c
process.c powerpc: Fix kernel log of oops/panic instruction dump 2012-02-16 16:11:23 +11:00
prom.c memblock: s/memblock_analyze()/memblock_allow_resize()/ and update users 2011-12-08 10:22:08 -08:00
prom_init.c powerpc: Rename mapping based RELOCATABLE to DYNAMIC_MEMSTART for BookE 2011-12-20 10:20:19 -05:00
prom_init_check.sh powerpc/powernv: Get kernel command line accross OPAL takeover 2011-09-20 16:09:48 +10:00
prom_parse.c powerpc: remove non-required uses of include <linux/module.h> 2011-10-31 19:30:44 -04:00
ptrace.c audit: inline audit_syscall_entry to reduce burden on archs 2012-01-17 16:16:56 -05:00
ptrace32.c powerpc: Update compat_arch_ptrace 2010-12-09 15:35:32 +11:00
reloc_32.S powerpc: Process dynamic relocations for kernel 2011-12-20 10:21:08 -05:00
reloc_64.S
rtas-proc.c
rtas-rtc.c powerpc/rtas-rtc: remove sideeffects of printk_ratelimit 2011-06-29 15:30:43 +10:00
rtas.c powerpc/pseries: Fix partition migration hang in stop_topology_update 2012-02-14 15:01:39 +11:00
rtas_flash.c powerpc/pseries: Cancel RTAS event scan before firmware flash 2011-11-25 14:11:29 +11:00
rtas_pci.c powerpc: rename ppc_pci_*_flags to pci_*_flags 2011-07-12 09:28:04 -05:00
rtasd.c powerpc/pseries: Cancel RTAS event scan before firmware flash 2011-11-25 14:11:29 +11:00
setup-common.c powerpc: various straight conversions from module.h --> export.h 2011-10-31 19:30:44 -04:00
setup.h
setup_32.c powerpc: Copy down exception vectors after feature fixups 2011-11-16 14:47:54 +11:00
setup_64.c powerpc: Add gpages reservation code for 64-bit FSL BOOKE 2011-12-07 16:26:23 +11:00
signal.c powerpc: Fix various issues with return to userspace 2012-02-22 16:48:53 +11:00
signal.h powerpc: Fix various issues with return to userspace 2012-02-22 16:48:53 +11:00
signal_32.c powerpc/signal32: Fix sigset_t conversion when copying to user 2011-11-17 16:41:10 +11:00
signal_64.c powerpc: remove non-required uses of include <linux/module.h> 2011-10-31 19:30:44 -04:00
smp-tbsync.c atomic: use <linux/atomic.h> 2011-07-26 16:49:47 -07:00
smp.c Merge branch 'driver-core-next' of git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/driver-core 2012-01-07 12:03:30 -08:00
softemu8xx.c
stacktrace.c powerpc: various straight conversions from module.h --> export.h 2011-10-31 19:30:44 -04:00
suspend.c update email address 2010-07-19 10:56:54 +02:00
swsusp.c powerpc/mm: Fix the call trace when resumed from hibernation 2011-09-20 09:19:58 +10:00
swsusp_32.S Fix common misspellings 2011-03-31 11:26:23 -03:00
swsusp_64.c powerpc: Fix up implicit sched.h users 2011-10-31 19:30:40 -04:00
swsusp_asm64.S
swsusp_booke.S powerpc/fsl-booke: Add hibernation support for FSL BookE processors 2010-05-21 07:41:53 -05:00
sys_ppc32.c BKL: remove extraneous #include <smp_lock.h> 2010-11-17 08:59:32 -08:00
syscalls.c
sysfs.c Merge branch 'driver-core-next' of git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/driver-core 2012-01-07 12:03:30 -08:00
systbl.S
systbl_chk.c
systbl_chk.sh
tau_6xx.c
time.c powerpc: Fix wrong divisor in usecs_to_cputime 2011-12-19 14:41:20 +11:00
traps.c powerpc: Rework die() 2011-12-08 14:02:23 +11:00
udbg.c Merge branch 'next' of git://git.kernel.org/pub/scm/linux/kernel/git/benh/powerpc 2011-11-06 17:12:03 -08:00
udbg_16550.c powerpc: Add early debug for WSP platforms 2011-05-06 13:32:41 +10:00
vdso.c powerpc: remove non-required uses of include <linux/module.h> 2011-10-31 19:30:44 -04:00
vecemu.c
vector.S powerpc: Remove static branch hint in giveup_altivec 2011-05-19 14:30:42 +10:00
vio.c PM: Drop generic_subsys_pm_ops 2011-12-21 22:03:32 +01:00
vmlinux.lds.S powerpc: Process dynamic relocations for kernel 2011-12-20 10:21:08 -05:00