diff options
author | Linus Torvalds <torvalds@linux-foundation.org> | 2012-12-13 18:31:08 -0500 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2012-12-13 18:31:08 -0500 |
commit | 66cdd0ceaf65a18996f561b770eedde1d123b019 (patch) | |
tree | 4892eaa422d366fce5d1e866ff1fe0988af95569 /arch/powerpc/include/uapi/asm | |
parent | 896ea17d3da5f44b2625c9cda9874d7dfe447393 (diff) | |
parent | 58b7825bc324da55415034a9f6ca5d716b8fd898 (diff) |
Merge tag 'kvm-3.8-1' of git://git.kernel.org/pub/scm/virt/kvm/kvm
Pull KVM updates from Marcelo Tosatti:
"Considerable KVM/PPC work, x86 kvmclock vsyscall support,
IA32_TSC_ADJUST MSR emulation, amongst others."
Fix up trivial conflict in kernel/sched/core.c due to cross-cpu
migration notifier added next to rq migration call-back.
* tag 'kvm-3.8-1' of git://git.kernel.org/pub/scm/virt/kvm/kvm: (156 commits)
KVM: emulator: fix real mode segment checks in address linearization
VMX: remove unneeded enable_unrestricted_guest check
KVM: VMX: fix DPL during entry to protected mode
x86/kexec: crash_vmclear_local_vmcss needs __rcu
kvm: Fix irqfd resampler list walk
KVM: VMX: provide the vmclear function and a bitmap to support VMCLEAR in kdump
x86/kexec: VMCLEAR VMCSs loaded on all cpus if necessary
KVM: MMU: optimize for set_spte
KVM: PPC: booke: Get/set guest EPCR register using ONE_REG interface
KVM: PPC: bookehv: Add EPCR support in mtspr/mfspr emulation
KVM: PPC: bookehv: Add guest computation mode for irq delivery
KVM: PPC: Make EPCR a valid field for booke64 and bookehv
KVM: PPC: booke: Extend MAS2 EPN mask for 64-bit
KVM: PPC: e500: Mask MAS2 EPN high 32-bits in 32/64 tlbwe emulation
KVM: PPC: Mask ea's high 32-bits in 32/64 instr emulation
KVM: PPC: e500: Add emulation helper for getting instruction ea
KVM: PPC: bookehv64: Add support for interrupt handling
KVM: PPC: bookehv: Remove GET_VCPU macro from exception handler
KVM: PPC: booke: Fix get_tb() compile error on 64-bit
KVM: PPC: e500: Silence bogus GCC warning in tlb code
...
Diffstat (limited to 'arch/powerpc/include/uapi/asm')
-rw-r--r-- | arch/powerpc/include/uapi/asm/Kbuild | 1 | ||||
-rw-r--r-- | arch/powerpc/include/uapi/asm/epapr_hcalls.h | 98 | ||||
-rw-r--r-- | arch/powerpc/include/uapi/asm/kvm.h | 86 | ||||
-rw-r--r-- | arch/powerpc/include/uapi/asm/kvm_para.h | 7 |
4 files changed, 189 insertions, 3 deletions
diff --git a/arch/powerpc/include/uapi/asm/Kbuild b/arch/powerpc/include/uapi/asm/Kbuild index a33c3c03bb2e..f7bca6370745 100644 --- a/arch/powerpc/include/uapi/asm/Kbuild +++ b/arch/powerpc/include/uapi/asm/Kbuild | |||
@@ -7,6 +7,7 @@ header-y += bootx.h | |||
7 | header-y += byteorder.h | 7 | header-y += byteorder.h |
8 | header-y += cputable.h | 8 | header-y += cputable.h |
9 | header-y += elf.h | 9 | header-y += elf.h |
10 | header-y += epapr_hcalls.h | ||
10 | header-y += errno.h | 11 | header-y += errno.h |
11 | header-y += fcntl.h | 12 | header-y += fcntl.h |
12 | header-y += ioctl.h | 13 | header-y += ioctl.h |
diff --git a/arch/powerpc/include/uapi/asm/epapr_hcalls.h b/arch/powerpc/include/uapi/asm/epapr_hcalls.h new file mode 100644 index 000000000000..7f9c74b46704 --- /dev/null +++ b/arch/powerpc/include/uapi/asm/epapr_hcalls.h | |||
@@ -0,0 +1,98 @@ | |||
1 | /* | ||
2 | * ePAPR hcall interface | ||
3 | * | ||
4 | * Copyright 2008-2011 Freescale Semiconductor, Inc. | ||
5 | * | ||
6 | * Author: Timur Tabi <timur@freescale.com> | ||
7 | * | ||
8 | * This file is provided under a dual BSD/GPL license. When using or | ||
9 | * redistributing this file, you may do so under either license. | ||
10 | * | ||
11 | * Redistribution and use in source and binary forms, with or without | ||
12 | * modification, are permitted provided that the following conditions are met: | ||
13 | * * Redistributions of source code must retain the above copyright | ||
14 | * notice, this list of conditions and the following disclaimer. | ||
15 | * * Redistributions in binary form must reproduce the above copyright | ||
16 | * notice, this list of conditions and the following disclaimer in the | ||
17 | * documentation and/or other materials provided with the distribution. | ||
18 | * * Neither the name of Freescale Semiconductor nor the | ||
19 | * names of its contributors may be used to endorse or promote products | ||
20 | * derived from this software without specific prior written permission. | ||
21 | * | ||
22 | * | ||
23 | * ALTERNATIVELY, this software may be distributed under the terms of the | ||
24 | * GNU General Public License ("GPL") as published by the Free Software | ||
25 | * Foundation, either version 2 of that License or (at your option) any | ||
26 | * later version. | ||
27 | * | ||
28 | * THIS SOFTWARE IS PROVIDED BY Freescale Semiconductor ``AS IS'' AND ANY | ||
29 | * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED | ||
30 | * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE | ||
31 | * DISCLAIMED. IN NO EVENT SHALL Freescale Semiconductor BE LIABLE FOR ANY | ||
32 | * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES | ||
33 | * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; | ||
34 | * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND | ||
35 | * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | ||
36 | * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS | ||
37 | * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | ||
38 | */ | ||
39 | |||
40 | #ifndef _UAPI_ASM_POWERPC_EPAPR_HCALLS_H | ||
41 | #define _UAPI_ASM_POWERPC_EPAPR_HCALLS_H | ||
42 | |||
43 | #define EV_BYTE_CHANNEL_SEND 1 | ||
44 | #define EV_BYTE_CHANNEL_RECEIVE 2 | ||
45 | #define EV_BYTE_CHANNEL_POLL 3 | ||
46 | #define EV_INT_SET_CONFIG 4 | ||
47 | #define EV_INT_GET_CONFIG 5 | ||
48 | #define EV_INT_SET_MASK 6 | ||
49 | #define EV_INT_GET_MASK 7 | ||
50 | #define EV_INT_IACK 9 | ||
51 | #define EV_INT_EOI 10 | ||
52 | #define EV_INT_SEND_IPI 11 | ||
53 | #define EV_INT_SET_TASK_PRIORITY 12 | ||
54 | #define EV_INT_GET_TASK_PRIORITY 13 | ||
55 | #define EV_DOORBELL_SEND 14 | ||
56 | #define EV_MSGSND 15 | ||
57 | #define EV_IDLE 16 | ||
58 | |||
59 | /* vendor ID: epapr */ | ||
60 | #define EV_LOCAL_VENDOR_ID 0 /* for private use */ | ||
61 | #define EV_EPAPR_VENDOR_ID 1 | ||
62 | #define EV_FSL_VENDOR_ID 2 /* Freescale Semiconductor */ | ||
63 | #define EV_IBM_VENDOR_ID 3 /* IBM */ | ||
64 | #define EV_GHS_VENDOR_ID 4 /* Green Hills Software */ | ||
65 | #define EV_ENEA_VENDOR_ID 5 /* Enea */ | ||
66 | #define EV_WR_VENDOR_ID 6 /* Wind River Systems */ | ||
67 | #define EV_AMCC_VENDOR_ID 7 /* Applied Micro Circuits */ | ||
68 | #define EV_KVM_VENDOR_ID 42 /* KVM */ | ||
69 | |||
70 | /* The max number of bytes that a byte channel can send or receive per call */ | ||
71 | #define EV_BYTE_CHANNEL_MAX_BYTES 16 | ||
72 | |||
73 | |||
74 | #define _EV_HCALL_TOKEN(id, num) (((id) << 16) | (num)) | ||
75 | #define EV_HCALL_TOKEN(hcall_num) _EV_HCALL_TOKEN(EV_EPAPR_VENDOR_ID, hcall_num) | ||
76 | |||
77 | /* epapr return codes */ | ||
78 | #define EV_SUCCESS 0 | ||
79 | #define EV_EPERM 1 /* Operation not permitted */ | ||
80 | #define EV_ENOENT 2 /* Entry Not Found */ | ||
81 | #define EV_EIO 3 /* I/O error occured */ | ||
82 | #define EV_EAGAIN 4 /* The operation had insufficient | ||
83 | * resources to complete and should be | ||
84 | * retried | ||
85 | */ | ||
86 | #define EV_ENOMEM 5 /* There was insufficient memory to | ||
87 | * complete the operation */ | ||
88 | #define EV_EFAULT 6 /* Bad guest address */ | ||
89 | #define EV_ENODEV 7 /* No such device */ | ||
90 | #define EV_EINVAL 8 /* An argument supplied to the hcall | ||
91 | was out of range or invalid */ | ||
92 | #define EV_INTERNAL 9 /* An internal error occured */ | ||
93 | #define EV_CONFIG 10 /* A configuration error was detected */ | ||
94 | #define EV_INVALID_STATE 11 /* The object is in an invalid state */ | ||
95 | #define EV_UNIMPLEMENTED 12 /* Unimplemented hypercall */ | ||
96 | #define EV_BUFFER_OVERFLOW 13 /* Caller-supplied buffer too small */ | ||
97 | |||
98 | #endif /* _UAPI_ASM_POWERPC_EPAPR_HCALLS_H */ | ||
diff --git a/arch/powerpc/include/uapi/asm/kvm.h b/arch/powerpc/include/uapi/asm/kvm.h index 1bea4d8ea6f4..2fba8a66fb10 100644 --- a/arch/powerpc/include/uapi/asm/kvm.h +++ b/arch/powerpc/include/uapi/asm/kvm.h | |||
@@ -221,6 +221,12 @@ struct kvm_sregs { | |||
221 | 221 | ||
222 | __u32 dbsr; /* KVM_SREGS_E_UPDATE_DBSR */ | 222 | __u32 dbsr; /* KVM_SREGS_E_UPDATE_DBSR */ |
223 | __u32 dbcr[3]; | 223 | __u32 dbcr[3]; |
224 | /* | ||
225 | * iac/dac registers are 64bit wide, while this API | ||
226 | * interface provides only lower 32 bits on 64 bit | ||
227 | * processors. ONE_REG interface is added for 64bit | ||
228 | * iac/dac registers. | ||
229 | */ | ||
224 | __u32 iac[4]; | 230 | __u32 iac[4]; |
225 | __u32 dac[2]; | 231 | __u32 dac[2]; |
226 | __u32 dvc[2]; | 232 | __u32 dvc[2]; |
@@ -325,6 +331,86 @@ struct kvm_book3e_206_tlb_params { | |||
325 | __u32 reserved[8]; | 331 | __u32 reserved[8]; |
326 | }; | 332 | }; |
327 | 333 | ||
334 | /* For KVM_PPC_GET_HTAB_FD */ | ||
335 | struct kvm_get_htab_fd { | ||
336 | __u64 flags; | ||
337 | __u64 start_index; | ||
338 | __u64 reserved[2]; | ||
339 | }; | ||
340 | |||
341 | /* Values for kvm_get_htab_fd.flags */ | ||
342 | #define KVM_GET_HTAB_BOLTED_ONLY ((__u64)0x1) | ||
343 | #define KVM_GET_HTAB_WRITE ((__u64)0x2) | ||
344 | |||
345 | /* | ||
346 | * Data read on the file descriptor is formatted as a series of | ||
347 | * records, each consisting of a header followed by a series of | ||
348 | * `n_valid' HPTEs (16 bytes each), which are all valid. Following | ||
349 | * those valid HPTEs there are `n_invalid' invalid HPTEs, which | ||
350 | * are not represented explicitly in the stream. The same format | ||
351 | * is used for writing. | ||
352 | */ | ||
353 | struct kvm_get_htab_header { | ||
354 | __u32 index; | ||
355 | __u16 n_valid; | ||
356 | __u16 n_invalid; | ||
357 | }; | ||
358 | |||
328 | #define KVM_REG_PPC_HIOR (KVM_REG_PPC | KVM_REG_SIZE_U64 | 0x1) | 359 | #define KVM_REG_PPC_HIOR (KVM_REG_PPC | KVM_REG_SIZE_U64 | 0x1) |
360 | #define KVM_REG_PPC_IAC1 (KVM_REG_PPC | KVM_REG_SIZE_U64 | 0x2) | ||
361 | #define KVM_REG_PPC_IAC2 (KVM_REG_PPC | KVM_REG_SIZE_U64 | 0x3) | ||
362 | #define KVM_REG_PPC_IAC3 (KVM_REG_PPC | KVM_REG_SIZE_U64 | 0x4) | ||
363 | #define KVM_REG_PPC_IAC4 (KVM_REG_PPC | KVM_REG_SIZE_U64 | 0x5) | ||
364 | #define KVM_REG_PPC_DAC1 (KVM_REG_PPC | KVM_REG_SIZE_U64 | 0x6) | ||
365 | #define KVM_REG_PPC_DAC2 (KVM_REG_PPC | KVM_REG_SIZE_U64 | 0x7) | ||
366 | #define KVM_REG_PPC_DABR (KVM_REG_PPC | KVM_REG_SIZE_U64 | 0x8) | ||
367 | #define KVM_REG_PPC_DSCR (KVM_REG_PPC | KVM_REG_SIZE_U64 | 0x9) | ||
368 | #define KVM_REG_PPC_PURR (KVM_REG_PPC | KVM_REG_SIZE_U64 | 0xa) | ||
369 | #define KVM_REG_PPC_SPURR (KVM_REG_PPC | KVM_REG_SIZE_U64 | 0xb) | ||
370 | #define KVM_REG_PPC_DAR (KVM_REG_PPC | KVM_REG_SIZE_U64 | 0xc) | ||
371 | #define KVM_REG_PPC_DSISR (KVM_REG_PPC | KVM_REG_SIZE_U32 | 0xd) | ||
372 | #define KVM_REG_PPC_AMR (KVM_REG_PPC | KVM_REG_SIZE_U64 | 0xe) | ||
373 | #define KVM_REG_PPC_UAMOR (KVM_REG_PPC | KVM_REG_SIZE_U64 | 0xf) | ||
374 | |||
375 | #define KVM_REG_PPC_MMCR0 (KVM_REG_PPC | KVM_REG_SIZE_U64 | 0x10) | ||
376 | #define KVM_REG_PPC_MMCR1 (KVM_REG_PPC | KVM_REG_SIZE_U64 | 0x11) | ||
377 | #define KVM_REG_PPC_MMCRA (KVM_REG_PPC | KVM_REG_SIZE_U64 | 0x12) | ||
378 | |||
379 | #define KVM_REG_PPC_PMC1 (KVM_REG_PPC | KVM_REG_SIZE_U32 | 0x18) | ||
380 | #define KVM_REG_PPC_PMC2 (KVM_REG_PPC | KVM_REG_SIZE_U32 | 0x19) | ||
381 | #define KVM_REG_PPC_PMC3 (KVM_REG_PPC | KVM_REG_SIZE_U32 | 0x1a) | ||
382 | #define KVM_REG_PPC_PMC4 (KVM_REG_PPC | KVM_REG_SIZE_U32 | 0x1b) | ||
383 | #define KVM_REG_PPC_PMC5 (KVM_REG_PPC | KVM_REG_SIZE_U32 | 0x1c) | ||
384 | #define KVM_REG_PPC_PMC6 (KVM_REG_PPC | KVM_REG_SIZE_U32 | 0x1d) | ||
385 | #define KVM_REG_PPC_PMC7 (KVM_REG_PPC | KVM_REG_SIZE_U32 | 0x1e) | ||
386 | #define KVM_REG_PPC_PMC8 (KVM_REG_PPC | KVM_REG_SIZE_U32 | 0x1f) | ||
387 | |||
388 | /* 32 floating-point registers */ | ||
389 | #define KVM_REG_PPC_FPR0 (KVM_REG_PPC | KVM_REG_SIZE_U64 | 0x20) | ||
390 | #define KVM_REG_PPC_FPR(n) (KVM_REG_PPC_FPR0 + (n)) | ||
391 | #define KVM_REG_PPC_FPR31 (KVM_REG_PPC | KVM_REG_SIZE_U64 | 0x3f) | ||
392 | |||
393 | /* 32 VMX/Altivec vector registers */ | ||
394 | #define KVM_REG_PPC_VR0 (KVM_REG_PPC | KVM_REG_SIZE_U128 | 0x40) | ||
395 | #define KVM_REG_PPC_VR(n) (KVM_REG_PPC_VR0 + (n)) | ||
396 | #define KVM_REG_PPC_VR31 (KVM_REG_PPC | KVM_REG_SIZE_U128 | 0x5f) | ||
397 | |||
398 | /* 32 double-width FP registers for VSX */ | ||
399 | /* High-order halves overlap with FP regs */ | ||
400 | #define KVM_REG_PPC_VSR0 (KVM_REG_PPC | KVM_REG_SIZE_U128 | 0x60) | ||
401 | #define KVM_REG_PPC_VSR(n) (KVM_REG_PPC_VSR0 + (n)) | ||
402 | #define KVM_REG_PPC_VSR31 (KVM_REG_PPC | KVM_REG_SIZE_U128 | 0x7f) | ||
403 | |||
404 | /* FP and vector status/control registers */ | ||
405 | #define KVM_REG_PPC_FPSCR (KVM_REG_PPC | KVM_REG_SIZE_U64 | 0x80) | ||
406 | #define KVM_REG_PPC_VSCR (KVM_REG_PPC | KVM_REG_SIZE_U32 | 0x81) | ||
407 | |||
408 | /* Virtual processor areas */ | ||
409 | /* For SLB & DTL, address in high (first) half, length in low half */ | ||
410 | #define KVM_REG_PPC_VPA_ADDR (KVM_REG_PPC | KVM_REG_SIZE_U64 | 0x82) | ||
411 | #define KVM_REG_PPC_VPA_SLB (KVM_REG_PPC | KVM_REG_SIZE_U128 | 0x83) | ||
412 | #define KVM_REG_PPC_VPA_DTL (KVM_REG_PPC | KVM_REG_SIZE_U128 | 0x84) | ||
413 | |||
414 | #define KVM_REG_PPC_EPCR (KVM_REG_PPC | KVM_REG_SIZE_U32 | 0x85) | ||
329 | 415 | ||
330 | #endif /* __LINUX_KVM_POWERPC_H */ | 416 | #endif /* __LINUX_KVM_POWERPC_H */ |
diff --git a/arch/powerpc/include/uapi/asm/kvm_para.h b/arch/powerpc/include/uapi/asm/kvm_para.h index 5e04383a1db5..ed0e0254b47f 100644 --- a/arch/powerpc/include/uapi/asm/kvm_para.h +++ b/arch/powerpc/include/uapi/asm/kvm_para.h | |||
@@ -75,9 +75,10 @@ struct kvm_vcpu_arch_shared { | |||
75 | }; | 75 | }; |
76 | 76 | ||
77 | #define KVM_SC_MAGIC_R0 0x4b564d21 /* "KVM!" */ | 77 | #define KVM_SC_MAGIC_R0 0x4b564d21 /* "KVM!" */ |
78 | #define HC_VENDOR_KVM (42 << 16) | 78 | |
79 | #define HC_EV_SUCCESS 0 | 79 | #define KVM_HCALL_TOKEN(num) _EV_HCALL_TOKEN(EV_KVM_VENDOR_ID, num) |
80 | #define HC_EV_UNIMPLEMENTED 12 | 80 | |
81 | #include <uapi/asm/epapr_hcalls.h> | ||
81 | 82 | ||
82 | #define KVM_FEATURE_MAGIC_PAGE 1 | 83 | #define KVM_FEATURE_MAGIC_PAGE 1 |
83 | 84 | ||