alistair23-linux/arch/powerpc/include/asm
Paul Mackerras de56a948b9 KVM: PPC: Add support for Book3S processors in hypervisor mode
This adds support for KVM running on 64-bit Book 3S processors,
specifically POWER7, in hypervisor mode.  Using hypervisor mode means
that the guest can use the processor's supervisor mode.  That means
that the guest can execute privileged instructions and access privileged
registers itself without trapping to the host.  This gives excellent
performance, but does mean that KVM cannot emulate a processor
architecture other than the one that the hardware implements.

This code assumes that the guest is running paravirtualized using the
PAPR (Power Architecture Platform Requirements) interface, which is the
interface that IBM's PowerVM hypervisor uses.  That means that existing
Linux distributions that run on IBM pSeries machines will also run
under KVM without modification.  In order to communicate the PAPR
hypercalls to qemu, this adds a new KVM_EXIT_PAPR_HCALL exit code
to include/linux/kvm.h.

Currently the choice between book3s_hv support and book3s_pr support
(i.e. the existing code, which runs the guest in user mode) has to be
made at kernel configuration time, so a given kernel binary can only
do one or the other.

This new book3s_hv code doesn't support MMIO emulation at present.
Since we are running paravirtualized guests, this isn't a serious
restriction.

With the guest running in supervisor mode, most exceptions go straight
to the guest.  We will never get data or instruction storage or segment
interrupts, alignment interrupts, decrementer interrupts, program
interrupts, single-step interrupts, etc., coming to the hypervisor from
the guest.  Therefore this introduces a new KVMTEST_NONHV macro for the
exception entry path so that we don't have to do the KVM test on entry
to those exception handlers.

We do however get hypervisor decrementer, hypervisor data storage,
hypervisor instruction storage, and hypervisor emulation assist
interrupts, so we have to handle those.

In hypervisor mode, real-mode accesses can access all of RAM, not just
a limited amount.  Therefore we put all the guest state in the vcpu.arch
and use the shadow_vcpu in the PACA only for temporary scratch space.
We allocate the vcpu with kzalloc rather than vzalloc, and we don't use
anything in the kvmppc_vcpu_book3s struct, so we don't allocate it.
We don't have a shared page with the guest, but we still need a
kvm_vcpu_arch_shared struct to store the values of various registers,
so we include one in the vcpu_arch struct.

The POWER7 processor has a restriction that all threads in a core have
to be in the same partition.  MMU-on kernel code counts as a partition
(partition 0), so we have to do a partition switch on every entry to and
exit from the guest.  At present we require the host and guest to run
in single-thread mode because of this hardware restriction.

This code allocates a hashed page table for the guest and initializes
it with HPTEs for the guest's Virtual Real Memory Area (VRMA).  We
require that the guest memory is allocated using 16MB huge pages, in
order to simplify the low-level memory management.  This also means that
we can get away without tracking paging activity in the host for now,
since huge pages can't be paged or swapped.

This also adds a few new exports needed by the book3s_hv code.

Signed-off-by: Paul Mackerras <paulus@samba.org>
Signed-off-by: Alexander Graf <agraf@suse.de>
2011-07-12 13:16:54 +03:00
..
iseries
8xx_immap.h powerpc: Fix multicast problem in fs_enet driver 2011-04-21 16:59:30 -07:00
8253pit.h
abs_addr.h Merge commit 'gcl/next' into next 2010-08-04 10:26:03 +10:00
agp.h
asm-compat.h powerpc: Emulate most Book I instructions in emulate_step() 2010-06-22 19:40:29 +10:00
asm-offsets.h
async_tx.h
atomic.h powerpc: Rename LWSYNC_ON_SMP to PPC_RELEASE_BARRIER, ISYNC_ON_SMP to PPC_ACQUIRE_BARRIER 2010-02-17 14:03:15 +11:00
auxvec.h
backlight.h
bitops.h Fix common misspellings 2011-03-31 11:26:23 -03:00
bitsperlong.h
bootx.h
btext.h
bug.h panic: Allow warnings to set different taint flags 2010-05-19 08:36:48 +01:00
bugs.h
byteorder.h
cache.h Merge branch 'for-35' of git://repo.or.cz/linux-kbuild 2010-06-01 08:55:52 -07:00
cacheflush.h
cell-pmu.h
cell-regs.h
checksum.h powerpc: Add 64bit csum_and_copy_to_user 2010-09-02 14:07:30 +10:00
clk_interface.h
code-patching.h
compat.h Fix common misspellings 2011-03-31 11:26:23 -03:00
cpm.h Fix common misspellings 2011-03-31 11:26:23 -03:00
cpm1.h Fix common misspellings 2011-03-31 11:26:23 -03:00
cpm2.h
cputable.h powerpc/fsl-booke64: Add support for Debug Level exception handler 2011-05-19 00:36:42 -05:00
cputhreads.h powerpc: Convert old cpumask API into new one 2011-05-04 15:22:59 +10:00
cputime.h taskstats: use real microsecond granularity for CPU times 2010-10-27 18:03:17 -07:00
current.h
dbdma.h
dbell.h powerpc: Consolidate ipi message mux and demux 2011-05-19 15:31:03 +10:00
dcr-generic.h
dcr-mmio.h
dcr-native.h
dcr-regs.h
dcr.h
delay.h
device.h powerpc/macio: Ensure all dma routines get copied over 2010-11-29 15:48:21 +11:00
disassemble.h
div64.h
dma-mapping.h powerpc: Implement dma_mmap_coherent() 2011-03-30 10:44:00 +11:00
dma.h
edac.h
eeh.h
eeh_event.h
elf.h powerpc: Use is_32bit_task() helper to test 32-bit binary 2010-09-02 14:07:32 +10:00
emergency-restart.h
emulated_ops.h powerpc: Per process DSCR + some fixes (try#4) 2011-04-27 14:18:19 +10:00
errno.h
exception-64e.h
exception-64s.h KVM: PPC: Add support for Book3S processors in hypervisor mode 2011-07-12 13:16:54 +03:00
fb.h
fcntl.h
feature-fixups.h powerpc: Use new CPU feature bit to select 2.06 tlbie 2011-05-04 15:19:26 +10:00
firmware.h powerpc/pseries: Add page coalescing support 2011-05-04 16:02:21 +10:00
fixmap.h
floppy.h
fs_pd.h
fsl_85xx_cache_sram.h powerpc/85xx: add cache-sram support 2010-10-14 00:54:38 -05:00
fsl_gtm.h
fsl_guts.h powerpc: rename immap_86xx.h to fsl_guts.h, and add 85xx support 2010-08-12 14:00:15 +01:00
fsl_lbc.h powerpc/fsl_lbc: Add workaround for ELBC-A001 erratum 2011-05-20 08:46:49 -05:00
ftrace.h powerpc/ftrace: Implement raw syscall tracepoints on PowerPC 2011-05-26 13:38:57 +10:00
futex.h futex: Sanitize futex ops argument types 2011-03-11 12:23:31 +01:00
gpio.h
grackle.h
hardirq.h powerpc: Convert global "BAD" interrupt to per cpu spurious 2010-02-17 14:02:49 +11:00
heathrow.h
highmem.h mm: stack based kmap_atomic() 2010-10-26 16:52:08 -07:00
hugetlb.h
hvcall.h powerpc/pseries: Update MAX_HCALL_OPCODE to reflect page coalescing 2011-05-26 13:38:57 +10:00
hvconsole.h
hvcserver.h
hw_breakpoint.h powerpc, hw_breakpoint: Tell generic code we have no instruction breakpoints 2010-06-30 13:54:58 +10:00
hw_irq.h powerpc: Use ARCH_IRQ_INIT_FLAGS 2011-03-02 16:50:24 +11:00
hydra.h Update broken web addresses in arch directory. 2010-10-18 11:03:21 +02:00
i8259.h
ibmebus.h
ide.h
immap_cpm2.h
immap_qe.h powerpc: fix warning when compiling immap_qe.h 2011-01-12 18:02:46 -06:00
io-defs.h
io-workarounds.h powerpc/pci: Make IO workarounds init implicit when first bus is registered 2011-04-27 14:18:31 +10:00
io.h powerpc: Remove ioremap_flags 2011-05-19 14:30:43 +10:00
io_event_irq.h powerpc/pseries: Add support for IO event interrupts 2011-05-06 13:19:01 +10:00
ioctl.h
ioctls.h tty: add TIOCVHANGUP to allow clean tty shutdown of all ttys 2011-02-17 14:16:30 -08:00
iommu.h
ipcbuf.h
ipic.h
irq.h powerpc: Remove virq_to_host 2011-05-19 15:32:01 +10:00
irq_regs.h
irqflags.h powerpc/ppc64/tracing: Add stack frame to calls of trace_hardirqs_on/off 2011-01-21 14:08:33 +11:00
Kbuild archs: replace unifdef-y with header-y 2010-08-14 22:26:51 +02:00
kdebug.h
kdump.h powerpc: Move kdump default base address to 64MB on 64bit 2010-06-15 15:02:32 +10:00
kexec.h powerpc: Convert old cpumask API into new one 2011-05-04 15:22:59 +10:00
keylargo.h
kgdb.h kgdb,ppc: Individual register get/set for ppc 2010-10-29 13:14:42 -05:00
kmap_types.h kdb: core for kgdb back end (2 of 2) 2010-05-20 21:04:21 -05:00
kprobes.h Fix common misspellings 2011-03-31 11:26:23 -03:00
kvm.h KVM: PPC: booke: add sregs support 2011-05-22 08:47:53 -04:00
kvm_44x.h KVM: PPC: booke: add sregs support 2011-05-22 08:47:53 -04:00
kvm_asm.h KVM: PPC: Add support for Book3S processors in hypervisor mode 2011-07-12 13:16:54 +03:00
kvm_book3s.h KVM: PPC: Add support for Book3S processors in hypervisor mode 2011-07-12 13:16:54 +03:00
kvm_book3s_32.h KVM: PPC: Add kvm_book3s_32.h 2010-05-17 12:18:23 +03:00
kvm_book3s_64.h KVM: PPC: Add support for Book3S processors in hypervisor mode 2011-07-12 13:16:54 +03:00
kvm_book3s_asm.h KVM: PPC: Add support for Book3S processors in hypervisor mode 2011-07-12 13:16:54 +03:00
kvm_booke.h KVM: PPC: Add support for Book3S processors in hypervisor mode 2011-07-12 13:16:54 +03:00
kvm_e500.h KVM: PPC: e500: Add shadow PID support 2011-07-12 13:16:39 +03:00
kvm_fpu.h powerpc: Remove fpscr use from [kvm_]cvt_{fd,df} 2010-09-02 14:07:32 +10:00
kvm_host.h KVM: PPC: Add support for Book3S processors in hypervisor mode 2011-07-12 13:16:54 +03:00
kvm_para.h KVM: PPC: Move of include to __KERNEL__ section 2010-10-24 10:52:23 +02:00
kvm_ppc.h KVM: PPC: Add support for Book3S processors in hypervisor mode 2011-07-12 13:16:54 +03:00
libata-portmap.h
linkage.h
local.h Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tj/percpu 2010-03-03 07:34:18 -08:00
local64.h arch: Implement local64_t 2010-06-09 11:12:36 +02:00
lppaca.h powerpc: Ensure dtl buffers do not cross 4k boundary 2011-05-19 14:30:41 +10:00
lv1call.h
machdep.h powerpc: Move smp_ops_t from machdep.h to smp.h 2011-05-19 15:31:01 +10:00
macio.h of/device: Replace of_device with platform_device in includes and core code 2010-07-24 09:58:21 -06:00
mc146818rtc.h
mediabay.h
memblock.h memblock: Introduce default allocation limit and use it to replace explicit ones 2010-08-05 12:56:07 +10:00
mman.h
mmu-8xx.h
mmu-40x.h
mmu-44x.h powerpc/47x: Base ppc476 support 2010-05-05 09:11:10 -04:00
mmu-book3e.h powerpc: Rename slb0_limit() to safe_stack_limit() and add Book3E support 2011-05-06 13:32:24 +10:00
mmu-hash32.h
mmu-hash64.h KVM: PPC: Add support for Book3S processors in hypervisor mode 2011-07-12 13:16:54 +03:00
mmu.h powerpc: Use new CPU feature bit to select 2.06 tlbie 2011-05-04 15:19:26 +10:00
mmu_context.h powerpc: Add Initiate Coprocessor Store Word (icswx) support 2011-05-04 15:19:26 +10:00
mmzone.h Fix node_start/end_pfn() definition for mm/page_cgroup.c 2011-06-27 14:13:09 -07:00
module.h
mpc5xxx.h
mpc6xx.h
mpc8xx.h
mpc52xx.h powerpc/5200: add mpc5200_psc_ac97_gpio_reset 2010-08-06 20:49:18 -06:00
mpc52xx_psc.h powerpc/5200: add mpc5200_psc_ac97_gpio_reset 2010-08-06 20:49:18 -06:00
mpc5121.h powerpc/5121: shared DIU framebuffer support 2010-08-01 17:06:44 -06:00
mpc8260.h
mpic.h Merge remote branch 'origin/master' into merge 2011-05-20 15:36:52 +10:00
msgbuf.h
msi_bitmap.h
mutex.h powerpc: Rename LWSYNC_ON_SMP to PPC_RELEASE_BARRIER, ISYNC_ON_SMP to PPC_ACQUIRE_BARRIER 2010-02-17 14:03:15 +11:00
nvram.h powerpc/nvram: Generalize code for OS partitions in NVRAM 2011-03-04 18:19:04 +11:00
ohare.h
oprofile_impl.h
paca.h KVM: PPC: Add support for Book3S processors in hypervisor mode 2011-07-12 13:16:54 +03:00
page.h powerpc: ARCH_PFN_OFFSET should be unsigned long 2011-03-30 10:44:07 +11:00
page_32.h dma-mapping: rename ARCH_KMALLOC_MINALIGN to ARCH_DMA_MINALIGN 2010-08-11 08:59:21 -07:00
page_64.h powerpc: Simplify 4k/64k copy_page logic 2011-05-19 14:30:42 +10:00
param.h
parport.h powerpc: Correct parport interrupt parsing 2010-05-06 16:49:26 +10:00
pasemi_dma.h Fix common misspellings 2011-03-31 11:26:23 -03:00
pci-bridge.h Fix common misspellings 2011-03-31 11:26:23 -03:00
pci.h powerpc/pci: Make both ppc32 and ppc64 use sysdata for pci_controller 2011-02-04 11:46:51 -07:00
percpu.h powerpc: Optimise per cpu accesses on 64bit 2010-07-09 11:28:30 +10:00
perf_event.h perf: Drop the skip argument from perf_arch_fetch_regs_caller 2010-06-08 23:31:27 +02:00
perf_event_fsl_emb.h powerpc/perf: e500 support 2010-03-05 03:04:08 -06:00
perf_event_server.h powerpc/perf: e500 support 2010-03-05 03:04:08 -06:00
pgalloc-32.h
pgalloc-64.h powerpc/mm: Track backing pages allocated by vmemmap_populate() 2010-05-06 16:49:27 +10:00
pgalloc.h mm, powerpc: move the RCU page-table freeing into generic code 2011-05-25 08:39:16 -07:00
pgtable-ppc32.h mm: remove pte_*map_nested() 2010-10-26 16:52:08 -07:00
pgtable-ppc64-4k.h
pgtable-ppc64-64k.h
pgtable-ppc64.h powerpc/mm: Fix compiler warning in pgtable-ppc64.h [-Wunused-but-set-variable] 2011-05-19 14:30:41 +10:00
pgtable.h powerpc: Add pgprot_writecombine 2011-03-02 16:50:24 +11:00
phyp_dump.h
pmac_feature.h Fix common misspellings 2011-03-31 11:26:23 -03:00
pmac_low_i2c.h
pmac_pfunc.h
pmc.h
pmi.h
poll.h
posix_types.h
ppc-opcode.h powerpc: Per process DSCR + some fixes (try#4) 2011-04-27 14:18:19 +10:00
ppc-pci.h powerpc/pci: Fix return type of BUID_{HI,LO} macros 2010-10-13 16:19:20 +11:00
ppc4xx.h
ppc_asm.h powerpc/e500: SPE register saving: take arbitrary struct offset 2011-07-12 13:16:31 +03:00
processor.h powerpc: Per process DSCR + some fixes (try#4) 2011-04-27 14:18:19 +10:00
prom.h of/pci: move of_irq_map_pci() into generic code 2011-02-04 11:46:50 -07:00
ps3.h
ps3av.h
ps3fb.h
ps3gpu.h
ps3stor.h
pSeries_reconfig.h powerpc/pseries: Add page coalescing support 2011-05-04 16:02:21 +10:00
pte-8xx.h
pte-40x.h
pte-44x.h
pte-book3e.h
pte-common.h powerpc: Don't write protect kernel text with CONFIG_DYNAMIC_FTRACE enabled 2011-04-18 13:08:21 +10:00
pte-fsl-booke.h
pte-hash32.h
pte-hash64-4k.h
pte-hash64-64k.h treewide: fix a few typos in comments 2011-05-10 10:16:21 +02:00
pte-hash64.h
ptrace.h powerpc/ptrace: Remove BUG_ON when full register set not available 2011-03-21 11:18:14 +11:00
qe.h
qe_ic.h powerpc: qe_ic: Rename get_irq_desc_data and get_irq_desc_chip 2011-03-30 15:38:02 +02:00
reg.h KVM: PPC: Add support for Book3S processors in hypervisor mode 2011-07-12 13:16:54 +03:00
reg_8xx.h
reg_a2.h powerpc: Add early debug for WSP platforms 2011-05-06 13:32:41 +10:00
reg_booke.h KVM: PPC: e500: Save/restore SPE state 2011-07-12 13:16:32 +03:00
reg_fsl_emb.h powerpc/perf: e500 support 2010-03-05 03:04:08 -06:00
resource.h
rheap.h
rio.h powerpc/fsl_rio: Fix compile error when CONFIG_FSL_RIO not set 2011-06-02 15:29:08 -05:00
rtas.h powerpc/pseries: Add RTAS event log v6 definition 2011-05-06 13:18:59 +10:00
rtc.h
rwsem.h rwsem: Move duplicate function prototypes to linux/rwsem.h 2011-01-27 12:30:39 +01:00
scatterlist.h remove needless ISA_DMA_THRESHOLD 2010-08-07 18:15:50 +02:00
scom.h powerpc: Add SCOM infrastructure 2011-04-20 17:01:19 +10:00
seccomp.h
sections.h
sembuf.h
serial.h
setjmp.h
setup.h
sfp-machine.h Revert "endian: #define __BYTE_ORDER" 2010-05-26 08:30:15 -07:00
shmbuf.h
shmparam.h
sigcontext.h
siginfo.h
signal.h
smp.h powerpc/cell: Use common smp ipi actions 2011-05-26 13:38:58 +10:00
smu.h of: kill struct of_device 2010-06-28 12:41:33 -07:00
socket.h
sockios.h
sparsemem.h Revert "powerpc/mm: Bump SECTION_SIZE_BITS from 16MB to 256MB" 2010-04-13 13:54:39 +10:00
spinlock.h powerpc: Rename LWSYNC_ON_SMP to PPC_RELEASE_BARRIER, ISYNC_ON_SMP to PPC_ACQUIRE_BARRIER 2010-02-17 14:03:15 +11:00
spinlock_types.h
spu.h powerpc/kdump: Move crash_kexec_stop_spus to kdump crash handler 2011-01-21 14:08:36 +11:00
spu_csa.h
spu_info.h
spu_priv1.h Fix common misspellings 2011-03-31 11:26:23 -03:00
sstep.h
stat.h
statfs.h
string.h
swab.h
swiotlb.h
synch.h powerpc: Use lwsync for acquire barrier if CPU supports it 2010-02-17 14:03:16 +11:00
syscall.h powerpc/ftrace: Implement raw syscall tracepoints on PowerPC 2011-05-26 13:38:57 +10:00
syscalls.h improve sys_newuname() for compat architectures 2010-03-12 15:52:32 -08:00
systbl.h ns: Wire up the setns system call 2011-05-28 10:48:39 -07:00
system.h powerpc: Remove alloc_maybe_bootmem for zalloc version 2011-05-19 15:30:57 +10:00
tce.h
termbits.h tty: Add EXTPROC support for LINEMODE 2010-08-10 13:47:39 -07:00
termios.h
thread_info.h powerpc/ftrace: Implement raw syscall tracepoints on PowerPC 2011-05-26 13:38:57 +10:00
time.h powerpc: Account time using timebase rather than PURR 2010-09-02 14:07:31 +10:00
timex.h
tlb.h mm, powerpc: move the RCU page-table freeing into generic code 2011-05-25 08:39:16 -07:00
tlbflush.h powerpc/mm: Standardise on MMU_NO_CONTEXT 2011-04-20 16:59:20 +10:00
topology.h powerpc/pseries: Fix build of topology stuff without CONFIG_NUMA 2011-01-12 10:56:29 +11:00
trace.h
tsi108.h
tsi108_irq.h
tsi108_pci.h
types.h remove dma64_addr_t 2011-03-23 19:47:18 -07:00
uaccess.h
ucc.h
ucc_fast.h
ucc_slow.h
ucontext.h
udbg.h powerpc: Add early debug for WSP platforms 2011-05-06 13:32:41 +10:00
uic.h
unaligned.h
uninorth.h Revert wrong fixes for common misspellings 2011-04-26 23:31:11 -07:00
unistd.h ns: Wire up the setns system call 2011-05-28 10:48:39 -07:00
user.h
vdso.h
vdso_datapage.h Fix common misspellings 2011-03-31 11:26:23 -03:00
vga.h
vio.h
wsp.h powerpc: Add WSP platform 2011-05-06 13:32:35 +10:00
xics.h powerpc: Consolidate ipi message mux and demux 2011-05-19 15:31:03 +10:00
xilinx_intc.h
xilinx_pci.h
xmon.h
xor.h