blob: 257a1f1eecc7f1514940126ebc88a37c40826a46 [file] [log] [blame]
Avi Kivity9c1b96e2009-06-09 12:37:58 +03001The Definitive KVM (Kernel-based Virtual Machine) API Documentation
2===================================================================
3
41. General description
Jan Kiszka414fa982012-04-24 16:40:15 +02005----------------------
Avi Kivity9c1b96e2009-06-09 12:37:58 +03006
7The kvm API is a set of ioctls that are issued to control various aspects
8of a virtual machine. The ioctls belong to three classes
9
10 - System ioctls: These query and set global attributes which affect the
11 whole kvm subsystem. In addition a system ioctl is used to create
12 virtual machines
13
14 - VM ioctls: These query and set attributes that affect an entire virtual
15 machine, for example memory layout. In addition a VM ioctl is used to
16 create virtual cpus (vcpus).
17
18 Only run VM ioctls from the same process (address space) that was used
19 to create the VM.
20
21 - vcpu ioctls: These query and set attributes that control the operation
22 of a single virtual cpu.
23
24 Only run vcpu ioctls from the same thread that was used to create the
25 vcpu.
26
Jan Kiszka414fa982012-04-24 16:40:15 +020027
Wu Fengguang2044892d2009-12-24 09:04:16 +0800282. File descriptors
Jan Kiszka414fa982012-04-24 16:40:15 +020029-------------------
Avi Kivity9c1b96e2009-06-09 12:37:58 +030030
31The kvm API is centered around file descriptors. An initial
32open("/dev/kvm") obtains a handle to the kvm subsystem; this handle
33can be used to issue system ioctls. A KVM_CREATE_VM ioctl on this
Wu Fengguang2044892d2009-12-24 09:04:16 +080034handle will create a VM file descriptor which can be used to issue VM
Avi Kivity9c1b96e2009-06-09 12:37:58 +030035ioctls. A KVM_CREATE_VCPU ioctl on a VM fd will create a virtual cpu
36and return a file descriptor pointing to it. Finally, ioctls on a vcpu
37fd can be used to control the vcpu, including the important task of
38actually running guest code.
39
40In general file descriptors can be migrated among processes by means
41of fork() and the SCM_RIGHTS facility of unix domain socket. These
42kinds of tricks are explicitly not supported by kvm. While they will
43not cause harm to the host, their actual behavior is not guaranteed by
44the API. The only supported use is one virtual machine per process,
45and one vcpu per thread.
46
Jan Kiszka414fa982012-04-24 16:40:15 +020047
Avi Kivity9c1b96e2009-06-09 12:37:58 +0300483. Extensions
Jan Kiszka414fa982012-04-24 16:40:15 +020049-------------
Avi Kivity9c1b96e2009-06-09 12:37:58 +030050
51As of Linux 2.6.22, the KVM ABI has been stabilized: no backward
52incompatible change are allowed. However, there is an extension
53facility that allows backward-compatible extensions to the API to be
54queried and used.
55
56The extension mechanism is not based on on the Linux version number.
57Instead, kvm defines extension identifiers and a facility to query
58whether a particular extension identifier is available. If it is, a
59set of ioctls is available for application use.
60
Jan Kiszka414fa982012-04-24 16:40:15 +020061
Avi Kivity9c1b96e2009-06-09 12:37:58 +0300624. API description
Jan Kiszka414fa982012-04-24 16:40:15 +020063------------------
Avi Kivity9c1b96e2009-06-09 12:37:58 +030064
65This section describes ioctls that can be used to control kvm guests.
66For each ioctl, the following information is provided along with a
67description:
68
69 Capability: which KVM extension provides this ioctl. Can be 'basic',
70 which means that is will be provided by any kernel that supports
71 API version 12 (see section 4.1), or a KVM_CAP_xyz constant, which
72 means availability needs to be checked with KVM_CHECK_EXTENSION
73 (see section 4.4).
74
75 Architectures: which instruction set architectures provide this ioctl.
76 x86 includes both i386 and x86_64.
77
78 Type: system, vm, or vcpu.
79
80 Parameters: what parameters are accepted by the ioctl.
81
82 Returns: the return value. General error numbers (EBADF, ENOMEM, EINVAL)
83 are not detailed, but errors with specific meanings are.
84
Jan Kiszka414fa982012-04-24 16:40:15 +020085
Avi Kivity9c1b96e2009-06-09 12:37:58 +0300864.1 KVM_GET_API_VERSION
87
88Capability: basic
89Architectures: all
90Type: system ioctl
91Parameters: none
92Returns: the constant KVM_API_VERSION (=12)
93
94This identifies the API version as the stable kvm API. It is not
95expected that this number will change. However, Linux 2.6.20 and
962.6.21 report earlier versions; these are not documented and not
97supported. Applications should refuse to run if KVM_GET_API_VERSION
98returns a value other than 12. If this check passes, all ioctls
99described as 'basic' will be available.
100
Jan Kiszka414fa982012-04-24 16:40:15 +0200101
Avi Kivity9c1b96e2009-06-09 12:37:58 +03001024.2 KVM_CREATE_VM
103
104Capability: basic
105Architectures: all
106Type: system ioctl
Carsten Ottee08b9632012-01-04 10:25:20 +0100107Parameters: machine type identifier (KVM_VM_*)
Avi Kivity9c1b96e2009-06-09 12:37:58 +0300108Returns: a VM fd that can be used to control the new virtual machine.
109
110The new VM has no virtual cpus and no memory. An mmap() of a VM fd
111will access the virtual machine's physical address space; offset zero
112corresponds to guest physical address zero. Use of mmap() on a VM fd
113is discouraged if userspace memory allocation (KVM_CAP_USER_MEMORY) is
114available.
Carsten Ottee08b9632012-01-04 10:25:20 +0100115You most certainly want to use 0 as machine type.
116
117In order to create user controlled virtual machines on S390, check
118KVM_CAP_S390_UCONTROL and use the flag KVM_VM_S390_UCONTROL as
119privileged user (CAP_SYS_ADMIN).
Avi Kivity9c1b96e2009-06-09 12:37:58 +0300120
Jan Kiszka414fa982012-04-24 16:40:15 +0200121
Avi Kivity9c1b96e2009-06-09 12:37:58 +03001224.3 KVM_GET_MSR_INDEX_LIST
123
124Capability: basic
125Architectures: x86
126Type: system
127Parameters: struct kvm_msr_list (in/out)
128Returns: 0 on success; -1 on error
129Errors:
130 E2BIG: the msr index list is to be to fit in the array specified by
131 the user.
132
133struct kvm_msr_list {
134 __u32 nmsrs; /* number of msrs in entries */
135 __u32 indices[0];
136};
137
138This ioctl returns the guest msrs that are supported. The list varies
139by kvm version and host processor, but does not change otherwise. The
140user fills in the size of the indices array in nmsrs, and in return
141kvm adjusts nmsrs to reflect the actual number of msrs and fills in
142the indices array with their numbers.
143
Avi Kivity2e2602c2010-07-07 14:09:39 +0300144Note: if kvm indicates supports MCE (KVM_CAP_MCE), then the MCE bank MSRs are
145not returned in the MSR list, as different vcpus can have a different number
146of banks, as set via the KVM_X86_SETUP_MCE ioctl.
147
Jan Kiszka414fa982012-04-24 16:40:15 +0200148
Avi Kivity9c1b96e2009-06-09 12:37:58 +03001494.4 KVM_CHECK_EXTENSION
150
Alexander Grafc509fab2014-07-14 18:33:08 +0200151Capability: basic, KVM_CAP_CHECK_EXTENSION_VM for vm ioctl
Avi Kivity9c1b96e2009-06-09 12:37:58 +0300152Architectures: all
Alexander Grafc509fab2014-07-14 18:33:08 +0200153Type: system ioctl, vm ioctl
Avi Kivity9c1b96e2009-06-09 12:37:58 +0300154Parameters: extension identifier (KVM_CAP_*)
155Returns: 0 if unsupported; 1 (or some other positive integer) if supported
156
157The API allows the application to query about extensions to the core
158kvm API. Userspace passes an extension identifier (an integer) and
159receives an integer that describes the extension availability.
160Generally 0 means no and 1 means yes, but some extensions may report
161additional information in the integer return value.
162
Alexander Grafc509fab2014-07-14 18:33:08 +0200163Based on their initialization different VMs may have different capabilities.
164It is thus encouraged to use the vm ioctl to query for capabilities (available
165with KVM_CAP_CHECK_EXTENSION_VM on the vm fd)
Jan Kiszka414fa982012-04-24 16:40:15 +0200166
Avi Kivity9c1b96e2009-06-09 12:37:58 +03001674.5 KVM_GET_VCPU_MMAP_SIZE
168
169Capability: basic
170Architectures: all
171Type: system ioctl
172Parameters: none
173Returns: size of vcpu mmap area, in bytes
174
175The KVM_RUN ioctl (cf.) communicates with userspace via a shared
176memory region. This ioctl returns the size of that region. See the
177KVM_RUN documentation for details.
178
Jan Kiszka414fa982012-04-24 16:40:15 +0200179
Avi Kivity9c1b96e2009-06-09 12:37:58 +03001804.6 KVM_SET_MEMORY_REGION
181
182Capability: basic
183Architectures: all
184Type: vm ioctl
185Parameters: struct kvm_memory_region (in)
186Returns: 0 on success, -1 on error
187
Avi Kivityb74a07b2010-06-21 11:48:05 +0300188This ioctl is obsolete and has been removed.
Avi Kivity9c1b96e2009-06-09 12:37:58 +0300189
Jan Kiszka414fa982012-04-24 16:40:15 +0200190
Paul Bolle68ba6972011-02-15 00:05:59 +01001914.7 KVM_CREATE_VCPU
Avi Kivity9c1b96e2009-06-09 12:37:58 +0300192
193Capability: basic
194Architectures: all
195Type: vm ioctl
196Parameters: vcpu id (apic id on x86)
197Returns: vcpu fd on success, -1 on error
198
199This API adds a vcpu to a virtual machine. The vcpu id is a small integer
Sasha Levin8c3ba332011-07-18 17:17:15 +0300200in the range [0, max_vcpus).
201
202The recommended max_vcpus value can be retrieved using the KVM_CAP_NR_VCPUS of
203the KVM_CHECK_EXTENSION ioctl() at run-time.
204The maximum possible value for max_vcpus can be retrieved using the
205KVM_CAP_MAX_VCPUS of the KVM_CHECK_EXTENSION ioctl() at run-time.
206
Pekka Enberg76d25402011-05-09 22:48:54 +0300207If the KVM_CAP_NR_VCPUS does not exist, you should assume that max_vcpus is 4
208cpus max.
Sasha Levin8c3ba332011-07-18 17:17:15 +0300209If the KVM_CAP_MAX_VCPUS does not exist, you should assume that max_vcpus is
210same as the value returned from KVM_CAP_NR_VCPUS.
Avi Kivity9c1b96e2009-06-09 12:37:58 +0300211
Paul Mackerras371fefd2011-06-29 00:23:08 +0000212On powerpc using book3s_hv mode, the vcpus are mapped onto virtual
213threads in one or more virtual CPU cores. (This is because the
214hardware requires all the hardware threads in a CPU core to be in the
215same partition.) The KVM_CAP_PPC_SMT capability indicates the number
216of vcpus per virtual core (vcore). The vcore id is obtained by
217dividing the vcpu id by the number of vcpus per vcore. The vcpus in a
218given vcore will always be in the same physical core as each other
219(though that might be a different physical core from time to time).
220Userspace can control the threading (SMT) mode of the guest by its
221allocation of vcpu ids. For example, if userspace wants
222single-threaded guest vcpus, it should make all vcpu ids be a multiple
223of the number of vcpus per vcore.
224
Carsten Otte5b1c1492012-01-04 10:25:23 +0100225For virtual cpus that have been created with S390 user controlled virtual
226machines, the resulting vcpu fd can be memory mapped at page offset
227KVM_S390_SIE_PAGE_OFFSET in order to obtain a memory map of the virtual
228cpu's hardware control block.
229
Jan Kiszka414fa982012-04-24 16:40:15 +0200230
Paul Bolle68ba6972011-02-15 00:05:59 +01002314.8 KVM_GET_DIRTY_LOG (vm ioctl)
Avi Kivity9c1b96e2009-06-09 12:37:58 +0300232
233Capability: basic
234Architectures: x86
235Type: vm ioctl
236Parameters: struct kvm_dirty_log (in/out)
237Returns: 0 on success, -1 on error
238
239/* for KVM_GET_DIRTY_LOG */
240struct kvm_dirty_log {
241 __u32 slot;
242 __u32 padding;
243 union {
244 void __user *dirty_bitmap; /* one bit per page */
245 __u64 padding;
246 };
247};
248
249Given a memory slot, return a bitmap containing any pages dirtied
250since the last call to this ioctl. Bit 0 is the first page in the
251memory slot. Ensure the entire structure is cleared to avoid padding
252issues.
253
Jan Kiszka414fa982012-04-24 16:40:15 +0200254
Paul Bolle68ba6972011-02-15 00:05:59 +01002554.9 KVM_SET_MEMORY_ALIAS
Avi Kivity9c1b96e2009-06-09 12:37:58 +0300256
257Capability: basic
258Architectures: x86
259Type: vm ioctl
260Parameters: struct kvm_memory_alias (in)
261Returns: 0 (success), -1 (error)
262
Avi Kivitya1f4d3952010-06-21 11:44:20 +0300263This ioctl is obsolete and has been removed.
Avi Kivity9c1b96e2009-06-09 12:37:58 +0300264
Jan Kiszka414fa982012-04-24 16:40:15 +0200265
Paul Bolle68ba6972011-02-15 00:05:59 +01002664.10 KVM_RUN
Avi Kivity9c1b96e2009-06-09 12:37:58 +0300267
268Capability: basic
269Architectures: all
270Type: vcpu ioctl
271Parameters: none
272Returns: 0 on success, -1 on error
273Errors:
274 EINTR: an unmasked signal is pending
275
276This ioctl is used to run a guest virtual cpu. While there are no
277explicit parameters, there is an implicit parameter block that can be
278obtained by mmap()ing the vcpu fd at offset 0, with the size given by
279KVM_GET_VCPU_MMAP_SIZE. The parameter block is formatted as a 'struct
280kvm_run' (see below).
281
Jan Kiszka414fa982012-04-24 16:40:15 +0200282
Paul Bolle68ba6972011-02-15 00:05:59 +01002834.11 KVM_GET_REGS
Avi Kivity9c1b96e2009-06-09 12:37:58 +0300284
285Capability: basic
Marc Zyngierd3845bf2013-04-02 17:46:31 +0100286Architectures: all except ARM, arm64
Avi Kivity9c1b96e2009-06-09 12:37:58 +0300287Type: vcpu ioctl
288Parameters: struct kvm_regs (out)
289Returns: 0 on success, -1 on error
290
291Reads the general purpose registers from the vcpu.
292
293/* x86 */
294struct kvm_regs {
295 /* out (KVM_GET_REGS) / in (KVM_SET_REGS) */
296 __u64 rax, rbx, rcx, rdx;
297 __u64 rsi, rdi, rsp, rbp;
298 __u64 r8, r9, r10, r11;
299 __u64 r12, r13, r14, r15;
300 __u64 rip, rflags;
301};
302
Jan Kiszka414fa982012-04-24 16:40:15 +0200303
Paul Bolle68ba6972011-02-15 00:05:59 +01003044.12 KVM_SET_REGS
Avi Kivity9c1b96e2009-06-09 12:37:58 +0300305
306Capability: basic
Marc Zyngierd3845bf2013-04-02 17:46:31 +0100307Architectures: all except ARM, arm64
Avi Kivity9c1b96e2009-06-09 12:37:58 +0300308Type: vcpu ioctl
309Parameters: struct kvm_regs (in)
310Returns: 0 on success, -1 on error
311
312Writes the general purpose registers into the vcpu.
313
314See KVM_GET_REGS for the data structure.
315
Jan Kiszka414fa982012-04-24 16:40:15 +0200316
Paul Bolle68ba6972011-02-15 00:05:59 +01003174.13 KVM_GET_SREGS
Avi Kivity9c1b96e2009-06-09 12:37:58 +0300318
319Capability: basic
Scott Wood5ce941e2011-04-27 17:24:21 -0500320Architectures: x86, ppc
Avi Kivity9c1b96e2009-06-09 12:37:58 +0300321Type: vcpu ioctl
322Parameters: struct kvm_sregs (out)
323Returns: 0 on success, -1 on error
324
325Reads special registers from the vcpu.
326
327/* x86 */
328struct kvm_sregs {
329 struct kvm_segment cs, ds, es, fs, gs, ss;
330 struct kvm_segment tr, ldt;
331 struct kvm_dtable gdt, idt;
332 __u64 cr0, cr2, cr3, cr4, cr8;
333 __u64 efer;
334 __u64 apic_base;
335 __u64 interrupt_bitmap[(KVM_NR_INTERRUPTS + 63) / 64];
336};
337
Mihai Caraman68e2ffe2012-12-11 03:38:23 +0000338/* ppc -- see arch/powerpc/include/uapi/asm/kvm.h */
Scott Wood5ce941e2011-04-27 17:24:21 -0500339
Avi Kivity9c1b96e2009-06-09 12:37:58 +0300340interrupt_bitmap is a bitmap of pending external interrupts. At most
341one bit may be set. This interrupt has been acknowledged by the APIC
342but not yet injected into the cpu core.
343
Jan Kiszka414fa982012-04-24 16:40:15 +0200344
Paul Bolle68ba6972011-02-15 00:05:59 +01003454.14 KVM_SET_SREGS
Avi Kivity9c1b96e2009-06-09 12:37:58 +0300346
347Capability: basic
Scott Wood5ce941e2011-04-27 17:24:21 -0500348Architectures: x86, ppc
Avi Kivity9c1b96e2009-06-09 12:37:58 +0300349Type: vcpu ioctl
350Parameters: struct kvm_sregs (in)
351Returns: 0 on success, -1 on error
352
353Writes special registers into the vcpu. See KVM_GET_SREGS for the
354data structures.
355
Jan Kiszka414fa982012-04-24 16:40:15 +0200356
Paul Bolle68ba6972011-02-15 00:05:59 +01003574.15 KVM_TRANSLATE
Avi Kivity9c1b96e2009-06-09 12:37:58 +0300358
359Capability: basic
360Architectures: x86
361Type: vcpu ioctl
362Parameters: struct kvm_translation (in/out)
363Returns: 0 on success, -1 on error
364
365Translates a virtual address according to the vcpu's current address
366translation mode.
367
368struct kvm_translation {
369 /* in */
370 __u64 linear_address;
371
372 /* out */
373 __u64 physical_address;
374 __u8 valid;
375 __u8 writeable;
376 __u8 usermode;
377 __u8 pad[5];
378};
379
Jan Kiszka414fa982012-04-24 16:40:15 +0200380
Paul Bolle68ba6972011-02-15 00:05:59 +01003814.16 KVM_INTERRUPT
Avi Kivity9c1b96e2009-06-09 12:37:58 +0300382
383Capability: basic
Alexander Graf6f7a2bd2010-08-31 02:03:32 +0200384Architectures: x86, ppc
Avi Kivity9c1b96e2009-06-09 12:37:58 +0300385Type: vcpu ioctl
386Parameters: struct kvm_interrupt (in)
387Returns: 0 on success, -1 on error
388
389Queues a hardware interrupt vector to be injected. This is only
Alexander Graf6f7a2bd2010-08-31 02:03:32 +0200390useful if in-kernel local APIC or equivalent is not used.
Avi Kivity9c1b96e2009-06-09 12:37:58 +0300391
392/* for KVM_INTERRUPT */
393struct kvm_interrupt {
394 /* in */
395 __u32 irq;
396};
397
Alexander Graf6f7a2bd2010-08-31 02:03:32 +0200398X86:
399
Avi Kivity9c1b96e2009-06-09 12:37:58 +0300400Note 'irq' is an interrupt vector, not an interrupt pin or line.
401
Alexander Graf6f7a2bd2010-08-31 02:03:32 +0200402PPC:
403
404Queues an external interrupt to be injected. This ioctl is overleaded
405with 3 different irq values:
406
407a) KVM_INTERRUPT_SET
408
409 This injects an edge type external interrupt into the guest once it's ready
410 to receive interrupts. When injected, the interrupt is done.
411
412b) KVM_INTERRUPT_UNSET
413
414 This unsets any pending interrupt.
415
416 Only available with KVM_CAP_PPC_UNSET_IRQ.
417
418c) KVM_INTERRUPT_SET_LEVEL
419
420 This injects a level type external interrupt into the guest context. The
421 interrupt stays pending until a specific ioctl with KVM_INTERRUPT_UNSET
422 is triggered.
423
424 Only available with KVM_CAP_PPC_IRQ_LEVEL.
425
426Note that any value for 'irq' other than the ones stated above is invalid
427and incurs unexpected behavior.
428
Jan Kiszka414fa982012-04-24 16:40:15 +0200429
Paul Bolle68ba6972011-02-15 00:05:59 +01004304.17 KVM_DEBUG_GUEST
Avi Kivity9c1b96e2009-06-09 12:37:58 +0300431
432Capability: basic
433Architectures: none
434Type: vcpu ioctl
435Parameters: none)
436Returns: -1 on error
437
438Support for this has been removed. Use KVM_SET_GUEST_DEBUG instead.
439
Jan Kiszka414fa982012-04-24 16:40:15 +0200440
Paul Bolle68ba6972011-02-15 00:05:59 +01004414.18 KVM_GET_MSRS
Avi Kivity9c1b96e2009-06-09 12:37:58 +0300442
443Capability: basic
444Architectures: x86
445Type: vcpu ioctl
446Parameters: struct kvm_msrs (in/out)
447Returns: 0 on success, -1 on error
448
449Reads model-specific registers from the vcpu. Supported msr indices can
450be obtained using KVM_GET_MSR_INDEX_LIST.
451
452struct kvm_msrs {
453 __u32 nmsrs; /* number of msrs in entries */
454 __u32 pad;
455
456 struct kvm_msr_entry entries[0];
457};
458
459struct kvm_msr_entry {
460 __u32 index;
461 __u32 reserved;
462 __u64 data;
463};
464
465Application code should set the 'nmsrs' member (which indicates the
466size of the entries array) and the 'index' member of each array entry.
467kvm will fill in the 'data' member.
468
Jan Kiszka414fa982012-04-24 16:40:15 +0200469
Paul Bolle68ba6972011-02-15 00:05:59 +01004704.19 KVM_SET_MSRS
Avi Kivity9c1b96e2009-06-09 12:37:58 +0300471
472Capability: basic
473Architectures: x86
474Type: vcpu ioctl
475Parameters: struct kvm_msrs (in)
476Returns: 0 on success, -1 on error
477
478Writes model-specific registers to the vcpu. See KVM_GET_MSRS for the
479data structures.
480
481Application code should set the 'nmsrs' member (which indicates the
482size of the entries array), and the 'index' and 'data' members of each
483array entry.
484
Jan Kiszka414fa982012-04-24 16:40:15 +0200485
Paul Bolle68ba6972011-02-15 00:05:59 +01004864.20 KVM_SET_CPUID
Avi Kivity9c1b96e2009-06-09 12:37:58 +0300487
488Capability: basic
489Architectures: x86
490Type: vcpu ioctl
491Parameters: struct kvm_cpuid (in)
492Returns: 0 on success, -1 on error
493
494Defines the vcpu responses to the cpuid instruction. Applications
495should use the KVM_SET_CPUID2 ioctl if available.
496
497
498struct kvm_cpuid_entry {
499 __u32 function;
500 __u32 eax;
501 __u32 ebx;
502 __u32 ecx;
503 __u32 edx;
504 __u32 padding;
505};
506
507/* for KVM_SET_CPUID */
508struct kvm_cpuid {
509 __u32 nent;
510 __u32 padding;
511 struct kvm_cpuid_entry entries[0];
512};
513
Jan Kiszka414fa982012-04-24 16:40:15 +0200514
Paul Bolle68ba6972011-02-15 00:05:59 +01005154.21 KVM_SET_SIGNAL_MASK
Avi Kivity9c1b96e2009-06-09 12:37:58 +0300516
517Capability: basic
518Architectures: x86
519Type: vcpu ioctl
520Parameters: struct kvm_signal_mask (in)
521Returns: 0 on success, -1 on error
522
523Defines which signals are blocked during execution of KVM_RUN. This
524signal mask temporarily overrides the threads signal mask. Any
525unblocked signal received (except SIGKILL and SIGSTOP, which retain
526their traditional behaviour) will cause KVM_RUN to return with -EINTR.
527
528Note the signal will only be delivered if not blocked by the original
529signal mask.
530
531/* for KVM_SET_SIGNAL_MASK */
532struct kvm_signal_mask {
533 __u32 len;
534 __u8 sigset[0];
535};
536
Jan Kiszka414fa982012-04-24 16:40:15 +0200537
Paul Bolle68ba6972011-02-15 00:05:59 +01005384.22 KVM_GET_FPU
Avi Kivity9c1b96e2009-06-09 12:37:58 +0300539
540Capability: basic
541Architectures: x86
542Type: vcpu ioctl
543Parameters: struct kvm_fpu (out)
544Returns: 0 on success, -1 on error
545
546Reads the floating point state from the vcpu.
547
548/* for KVM_GET_FPU and KVM_SET_FPU */
549struct kvm_fpu {
550 __u8 fpr[8][16];
551 __u16 fcw;
552 __u16 fsw;
553 __u8 ftwx; /* in fxsave format */
554 __u8 pad1;
555 __u16 last_opcode;
556 __u64 last_ip;
557 __u64 last_dp;
558 __u8 xmm[16][16];
559 __u32 mxcsr;
560 __u32 pad2;
561};
562
Jan Kiszka414fa982012-04-24 16:40:15 +0200563
Paul Bolle68ba6972011-02-15 00:05:59 +01005644.23 KVM_SET_FPU
Avi Kivity9c1b96e2009-06-09 12:37:58 +0300565
566Capability: basic
567Architectures: x86
568Type: vcpu ioctl
569Parameters: struct kvm_fpu (in)
570Returns: 0 on success, -1 on error
571
572Writes the floating point state to the vcpu.
573
574/* for KVM_GET_FPU and KVM_SET_FPU */
575struct kvm_fpu {
576 __u8 fpr[8][16];
577 __u16 fcw;
578 __u16 fsw;
579 __u8 ftwx; /* in fxsave format */
580 __u8 pad1;
581 __u16 last_opcode;
582 __u64 last_ip;
583 __u64 last_dp;
584 __u8 xmm[16][16];
585 __u32 mxcsr;
586 __u32 pad2;
587};
588
Jan Kiszka414fa982012-04-24 16:40:15 +0200589
Paul Bolle68ba6972011-02-15 00:05:59 +01005904.24 KVM_CREATE_IRQCHIP
Avi Kivity5dadbfd2009-08-23 17:08:04 +0300591
592Capability: KVM_CAP_IRQCHIP
Marc Zyngierd3845bf2013-04-02 17:46:31 +0100593Architectures: x86, ia64, ARM, arm64
Avi Kivity5dadbfd2009-08-23 17:08:04 +0300594Type: vm ioctl
595Parameters: none
596Returns: 0 on success, -1 on error
597
598Creates an interrupt controller model in the kernel. On x86, creates a virtual
599ioapic, a virtual PIC (two PICs, nested), and sets up future vcpus to have a
600local APIC. IRQ routing for GSIs 0-15 is set to both PIC and IOAPIC; GSI 16-23
Marc Zyngierd3845bf2013-04-02 17:46:31 +0100601only go to the IOAPIC. On ia64, a IOSAPIC is created. On ARM/arm64, a GIC is
Christoffer Dall749cf76c2013-01-20 18:28:06 -0500602created.
Avi Kivity5dadbfd2009-08-23 17:08:04 +0300603
Jan Kiszka414fa982012-04-24 16:40:15 +0200604
Paul Bolle68ba6972011-02-15 00:05:59 +01006054.25 KVM_IRQ_LINE
Avi Kivity5dadbfd2009-08-23 17:08:04 +0300606
607Capability: KVM_CAP_IRQCHIP
Marc Zyngierd3845bf2013-04-02 17:46:31 +0100608Architectures: x86, ia64, arm, arm64
Avi Kivity5dadbfd2009-08-23 17:08:04 +0300609Type: vm ioctl
610Parameters: struct kvm_irq_level
611Returns: 0 on success, -1 on error
612
613Sets the level of a GSI input to the interrupt controller model in the kernel.
Christoffer Dall86ce8532013-01-20 18:28:08 -0500614On some architectures it is required that an interrupt controller model has
615been previously created with KVM_CREATE_IRQCHIP. Note that edge-triggered
616interrupts require the level to be set to 1 and then back to 0.
617
Marc Zyngierd3845bf2013-04-02 17:46:31 +0100618ARM/arm64 can signal an interrupt either at the CPU level, or at the
619in-kernel irqchip (GIC), and for in-kernel irqchip can tell the GIC to
620use PPIs designated for specific cpus. The irq field is interpreted
621like this:
Christoffer Dall86ce8532013-01-20 18:28:08 -0500622
623  bits: | 31 ... 24 | 23 ... 16 | 15 ... 0 |
624 field: | irq_type | vcpu_index | irq_id |
625
626The irq_type field has the following values:
627- irq_type[0]: out-of-kernel GIC: irq_id 0 is IRQ, irq_id 1 is FIQ
628- irq_type[1]: in-kernel GIC: SPI, irq_id between 32 and 1019 (incl.)
629 (the vcpu_index field is ignored)
630- irq_type[2]: in-kernel GIC: PPI, irq_id between 16 and 31 (incl.)
631
632(The irq_id field thus corresponds nicely to the IRQ ID in the ARM GIC specs)
633
634In both cases, level is used to raise/lower the line.
Avi Kivity5dadbfd2009-08-23 17:08:04 +0300635
636struct kvm_irq_level {
637 union {
638 __u32 irq; /* GSI */
639 __s32 status; /* not used for KVM_IRQ_LEVEL */
640 };
641 __u32 level; /* 0 or 1 */
642};
643
Jan Kiszka414fa982012-04-24 16:40:15 +0200644
Paul Bolle68ba6972011-02-15 00:05:59 +01006454.26 KVM_GET_IRQCHIP
Avi Kivity5dadbfd2009-08-23 17:08:04 +0300646
647Capability: KVM_CAP_IRQCHIP
648Architectures: x86, ia64
649Type: vm ioctl
650Parameters: struct kvm_irqchip (in/out)
651Returns: 0 on success, -1 on error
652
653Reads the state of a kernel interrupt controller created with
654KVM_CREATE_IRQCHIP into a buffer provided by the caller.
655
656struct kvm_irqchip {
657 __u32 chip_id; /* 0 = PIC1, 1 = PIC2, 2 = IOAPIC */
658 __u32 pad;
659 union {
660 char dummy[512]; /* reserving space */
661 struct kvm_pic_state pic;
662 struct kvm_ioapic_state ioapic;
663 } chip;
664};
665
Jan Kiszka414fa982012-04-24 16:40:15 +0200666
Paul Bolle68ba6972011-02-15 00:05:59 +01006674.27 KVM_SET_IRQCHIP
Avi Kivity5dadbfd2009-08-23 17:08:04 +0300668
669Capability: KVM_CAP_IRQCHIP
670Architectures: x86, ia64
671Type: vm ioctl
672Parameters: struct kvm_irqchip (in)
673Returns: 0 on success, -1 on error
674
675Sets the state of a kernel interrupt controller created with
676KVM_CREATE_IRQCHIP from a buffer provided by the caller.
677
678struct kvm_irqchip {
679 __u32 chip_id; /* 0 = PIC1, 1 = PIC2, 2 = IOAPIC */
680 __u32 pad;
681 union {
682 char dummy[512]; /* reserving space */
683 struct kvm_pic_state pic;
684 struct kvm_ioapic_state ioapic;
685 } chip;
686};
687
Jan Kiszka414fa982012-04-24 16:40:15 +0200688
Paul Bolle68ba6972011-02-15 00:05:59 +01006894.28 KVM_XEN_HVM_CONFIG
Ed Swierkffde22a2009-10-15 15:21:43 -0700690
691Capability: KVM_CAP_XEN_HVM
692Architectures: x86
693Type: vm ioctl
694Parameters: struct kvm_xen_hvm_config (in)
695Returns: 0 on success, -1 on error
696
697Sets the MSR that the Xen HVM guest uses to initialize its hypercall
698page, and provides the starting address and size of the hypercall
699blobs in userspace. When the guest writes the MSR, kvm copies one
700page of a blob (32- or 64-bit, depending on the vcpu mode) to guest
701memory.
702
703struct kvm_xen_hvm_config {
704 __u32 flags;
705 __u32 msr;
706 __u64 blob_addr_32;
707 __u64 blob_addr_64;
708 __u8 blob_size_32;
709 __u8 blob_size_64;
710 __u8 pad2[30];
711};
712
Jan Kiszka414fa982012-04-24 16:40:15 +0200713
Paul Bolle68ba6972011-02-15 00:05:59 +01007144.29 KVM_GET_CLOCK
Glauber Costaafbcf7a2009-10-16 15:28:36 -0400715
716Capability: KVM_CAP_ADJUST_CLOCK
717Architectures: x86
718Type: vm ioctl
719Parameters: struct kvm_clock_data (out)
720Returns: 0 on success, -1 on error
721
722Gets the current timestamp of kvmclock as seen by the current guest. In
723conjunction with KVM_SET_CLOCK, it is used to ensure monotonicity on scenarios
724such as migration.
725
726struct kvm_clock_data {
727 __u64 clock; /* kvmclock current value */
728 __u32 flags;
729 __u32 pad[9];
730};
731
Jan Kiszka414fa982012-04-24 16:40:15 +0200732
Paul Bolle68ba6972011-02-15 00:05:59 +01007334.30 KVM_SET_CLOCK
Glauber Costaafbcf7a2009-10-16 15:28:36 -0400734
735Capability: KVM_CAP_ADJUST_CLOCK
736Architectures: x86
737Type: vm ioctl
738Parameters: struct kvm_clock_data (in)
739Returns: 0 on success, -1 on error
740
Wu Fengguang2044892d2009-12-24 09:04:16 +0800741Sets the current timestamp of kvmclock to the value specified in its parameter.
Glauber Costaafbcf7a2009-10-16 15:28:36 -0400742In conjunction with KVM_GET_CLOCK, it is used to ensure monotonicity on scenarios
743such as migration.
744
745struct kvm_clock_data {
746 __u64 clock; /* kvmclock current value */
747 __u32 flags;
748 __u32 pad[9];
749};
750
Jan Kiszka414fa982012-04-24 16:40:15 +0200751
Paul Bolle68ba6972011-02-15 00:05:59 +01007524.31 KVM_GET_VCPU_EVENTS
Jan Kiszka3cfc3092009-11-12 01:04:25 +0100753
754Capability: KVM_CAP_VCPU_EVENTS
Jan Kiszka48005f62010-02-19 19:38:07 +0100755Extended by: KVM_CAP_INTR_SHADOW
Jan Kiszka3cfc3092009-11-12 01:04:25 +0100756Architectures: x86
757Type: vm ioctl
758Parameters: struct kvm_vcpu_event (out)
759Returns: 0 on success, -1 on error
760
761Gets currently pending exceptions, interrupts, and NMIs as well as related
762states of the vcpu.
763
764struct kvm_vcpu_events {
765 struct {
766 __u8 injected;
767 __u8 nr;
768 __u8 has_error_code;
769 __u8 pad;
770 __u32 error_code;
771 } exception;
772 struct {
773 __u8 injected;
774 __u8 nr;
775 __u8 soft;
Jan Kiszka48005f62010-02-19 19:38:07 +0100776 __u8 shadow;
Jan Kiszka3cfc3092009-11-12 01:04:25 +0100777 } interrupt;
778 struct {
779 __u8 injected;
780 __u8 pending;
781 __u8 masked;
782 __u8 pad;
783 } nmi;
784 __u32 sipi_vector;
Jan Kiszkadab4b912009-12-06 18:24:15 +0100785 __u32 flags;
Jan Kiszka3cfc3092009-11-12 01:04:25 +0100786};
787
Jan Kiszka48005f62010-02-19 19:38:07 +0100788KVM_VCPUEVENT_VALID_SHADOW may be set in the flags field to signal that
789interrupt.shadow contains a valid state. Otherwise, this field is undefined.
790
Jan Kiszka414fa982012-04-24 16:40:15 +0200791
Paul Bolle68ba6972011-02-15 00:05:59 +01007924.32 KVM_SET_VCPU_EVENTS
Jan Kiszka3cfc3092009-11-12 01:04:25 +0100793
794Capability: KVM_CAP_VCPU_EVENTS
Jan Kiszka48005f62010-02-19 19:38:07 +0100795Extended by: KVM_CAP_INTR_SHADOW
Jan Kiszka3cfc3092009-11-12 01:04:25 +0100796Architectures: x86
797Type: vm ioctl
798Parameters: struct kvm_vcpu_event (in)
799Returns: 0 on success, -1 on error
800
801Set pending exceptions, interrupts, and NMIs as well as related states of the
802vcpu.
803
804See KVM_GET_VCPU_EVENTS for the data structure.
805
Jan Kiszkadab4b912009-12-06 18:24:15 +0100806Fields that may be modified asynchronously by running VCPUs can be excluded
807from the update. These fields are nmi.pending and sipi_vector. Keep the
808corresponding bits in the flags field cleared to suppress overwriting the
809current in-kernel state. The bits are:
810
811KVM_VCPUEVENT_VALID_NMI_PENDING - transfer nmi.pending to the kernel
812KVM_VCPUEVENT_VALID_SIPI_VECTOR - transfer sipi_vector
813
Jan Kiszka48005f62010-02-19 19:38:07 +0100814If KVM_CAP_INTR_SHADOW is available, KVM_VCPUEVENT_VALID_SHADOW can be set in
815the flags field to signal that interrupt.shadow contains a valid state and
816shall be written into the VCPU.
817
Jan Kiszka414fa982012-04-24 16:40:15 +0200818
Paul Bolle68ba6972011-02-15 00:05:59 +01008194.33 KVM_GET_DEBUGREGS
Jan Kiszkaa1efbe72010-02-15 10:45:43 +0100820
821Capability: KVM_CAP_DEBUGREGS
822Architectures: x86
823Type: vm ioctl
824Parameters: struct kvm_debugregs (out)
825Returns: 0 on success, -1 on error
826
827Reads debug registers from the vcpu.
828
829struct kvm_debugregs {
830 __u64 db[4];
831 __u64 dr6;
832 __u64 dr7;
833 __u64 flags;
834 __u64 reserved[9];
835};
836
Jan Kiszka414fa982012-04-24 16:40:15 +0200837
Paul Bolle68ba6972011-02-15 00:05:59 +01008384.34 KVM_SET_DEBUGREGS
Jan Kiszkaa1efbe72010-02-15 10:45:43 +0100839
840Capability: KVM_CAP_DEBUGREGS
841Architectures: x86
842Type: vm ioctl
843Parameters: struct kvm_debugregs (in)
844Returns: 0 on success, -1 on error
845
846Writes debug registers into the vcpu.
847
848See KVM_GET_DEBUGREGS for the data structure. The flags field is unused
849yet and must be cleared on entry.
850
Jan Kiszka414fa982012-04-24 16:40:15 +0200851
Paul Bolle68ba6972011-02-15 00:05:59 +01008524.35 KVM_SET_USER_MEMORY_REGION
Avi Kivity0f2d8f42010-03-25 12:16:48 +0200853
854Capability: KVM_CAP_USER_MEM
855Architectures: all
856Type: vm ioctl
857Parameters: struct kvm_userspace_memory_region (in)
858Returns: 0 on success, -1 on error
859
860struct kvm_userspace_memory_region {
861 __u32 slot;
862 __u32 flags;
863 __u64 guest_phys_addr;
864 __u64 memory_size; /* bytes */
865 __u64 userspace_addr; /* start of the userspace allocated memory */
866};
867
868/* for kvm_memory_region::flags */
Xiao Guangrong4d8b81a2012-08-21 11:02:51 +0800869#define KVM_MEM_LOG_DIRTY_PAGES (1UL << 0)
870#define KVM_MEM_READONLY (1UL << 1)
Avi Kivity0f2d8f42010-03-25 12:16:48 +0200871
872This ioctl allows the user to create or modify a guest physical memory
873slot. When changing an existing slot, it may be moved in the guest
874physical memory space, or its flags may be modified. It may not be
875resized. Slots may not overlap in guest physical address space.
876
877Memory for the region is taken starting at the address denoted by the
878field userspace_addr, which must point at user addressable memory for
879the entire memory slot size. Any object may back this memory, including
880anonymous memory, ordinary files, and hugetlbfs.
881
882It is recommended that the lower 21 bits of guest_phys_addr and userspace_addr
883be identical. This allows large pages in the guest to be backed by large
884pages in the host.
885
Takuya Yoshikawa75d61fb2013-01-30 19:40:41 +0900886The flags field supports two flags: KVM_MEM_LOG_DIRTY_PAGES and
887KVM_MEM_READONLY. The former can be set to instruct KVM to keep track of
888writes to memory within the slot. See KVM_GET_DIRTY_LOG ioctl to know how to
889use it. The latter can be set, if KVM_CAP_READONLY_MEM capability allows it,
890to make a new slot read-only. In this case, writes to this memory will be
891posted to userspace as KVM_EXIT_MMIO exits.
Avi Kivity0f2d8f42010-03-25 12:16:48 +0200892
Jan Kiszka7efd8fa2012-09-07 13:17:47 +0200893When the KVM_CAP_SYNC_MMU capability is available, changes in the backing of
894the memory region are automatically reflected into the guest. For example, an
895mmap() that affects the region will be made visible immediately. Another
896example is madvise(MADV_DROP).
Avi Kivity0f2d8f42010-03-25 12:16:48 +0200897
898It is recommended to use this API instead of the KVM_SET_MEMORY_REGION ioctl.
899The KVM_SET_MEMORY_REGION does not allow fine grained control over memory
900allocation and is deprecated.
Jan Kiszka3cfc3092009-11-12 01:04:25 +0100901
Jan Kiszka414fa982012-04-24 16:40:15 +0200902
Paul Bolle68ba6972011-02-15 00:05:59 +01009034.36 KVM_SET_TSS_ADDR
Avi Kivity8a5416d2010-03-25 12:27:30 +0200904
905Capability: KVM_CAP_SET_TSS_ADDR
906Architectures: x86
907Type: vm ioctl
908Parameters: unsigned long tss_address (in)
909Returns: 0 on success, -1 on error
910
911This ioctl defines the physical address of a three-page region in the guest
912physical address space. The region must be within the first 4GB of the
913guest physical address space and must not conflict with any memory slot
914or any mmio address. The guest may malfunction if it accesses this memory
915region.
916
917This ioctl is required on Intel-based hosts. This is needed on Intel hardware
918because of a quirk in the virtualization implementation (see the internals
919documentation when it pops into existence).
920
Jan Kiszka414fa982012-04-24 16:40:15 +0200921
Paul Bolle68ba6972011-02-15 00:05:59 +01009224.37 KVM_ENABLE_CAP
Alexander Graf71fbfd52010-03-24 21:48:29 +0100923
924Capability: KVM_CAP_ENABLE_CAP
Cornelia Huckd6712df2012-12-20 15:32:11 +0100925Architectures: ppc, s390
Alexander Graf71fbfd52010-03-24 21:48:29 +0100926Type: vcpu ioctl
927Parameters: struct kvm_enable_cap (in)
928Returns: 0 on success; -1 on error
929
930+Not all extensions are enabled by default. Using this ioctl the application
931can enable an extension, making it available to the guest.
932
933On systems that do not support this ioctl, it always fails. On systems that
934do support it, it only works for extensions that are supported for enablement.
935
936To check if a capability can be enabled, the KVM_CHECK_EXTENSION ioctl should
937be used.
938
939struct kvm_enable_cap {
940 /* in */
941 __u32 cap;
942
943The capability that is supposed to get enabled.
944
945 __u32 flags;
946
947A bitfield indicating future enhancements. Has to be 0 for now.
948
949 __u64 args[4];
950
951Arguments for enabling a feature. If a feature needs initial values to
952function properly, this is the place to put them.
953
954 __u8 pad[64];
955};
956
Jan Kiszka414fa982012-04-24 16:40:15 +0200957
Paul Bolle68ba6972011-02-15 00:05:59 +01009584.38 KVM_GET_MP_STATE
Avi Kivityb843f062010-04-25 15:51:46 +0300959
960Capability: KVM_CAP_MP_STATE
961Architectures: x86, ia64
962Type: vcpu ioctl
963Parameters: struct kvm_mp_state (out)
964Returns: 0 on success; -1 on error
965
966struct kvm_mp_state {
967 __u32 mp_state;
968};
969
970Returns the vcpu's current "multiprocessing state" (though also valid on
971uniprocessor guests).
972
973Possible values are:
974
David Hildenbrand892f5c62014-05-12 16:05:13 +0200975 - KVM_MP_STATE_RUNNABLE: the vcpu is currently running [x86, ia64]
Avi Kivityb843f062010-04-25 15:51:46 +0300976 - KVM_MP_STATE_UNINITIALIZED: the vcpu is an application processor (AP)
David Hildenbrand892f5c62014-05-12 16:05:13 +0200977 which has not yet received an INIT signal [x86,
978 ia64]
Avi Kivityb843f062010-04-25 15:51:46 +0300979 - KVM_MP_STATE_INIT_RECEIVED: the vcpu has received an INIT signal, and is
David Hildenbrand892f5c62014-05-12 16:05:13 +0200980 now ready for a SIPI [x86, ia64]
Avi Kivityb843f062010-04-25 15:51:46 +0300981 - KVM_MP_STATE_HALTED: the vcpu has executed a HLT instruction and
David Hildenbrand892f5c62014-05-12 16:05:13 +0200982 is waiting for an interrupt [x86, ia64]
Avi Kivityb843f062010-04-25 15:51:46 +0300983 - KVM_MP_STATE_SIPI_RECEIVED: the vcpu has just received a SIPI (vector
David Hildenbrand892f5c62014-05-12 16:05:13 +0200984 accessible via KVM_GET_VCPU_EVENTS) [x86, ia64]
Avi Kivityb843f062010-04-25 15:51:46 +0300985
David Hildenbrand892f5c62014-05-12 16:05:13 +0200986On x86 and ia64, this ioctl is only useful after KVM_CREATE_IRQCHIP. Without an
987in-kernel irqchip, the multiprocessing state must be maintained by userspace on
988these architectures.
Avi Kivityb843f062010-04-25 15:51:46 +0300989
Jan Kiszka414fa982012-04-24 16:40:15 +0200990
Paul Bolle68ba6972011-02-15 00:05:59 +01009914.39 KVM_SET_MP_STATE
Avi Kivityb843f062010-04-25 15:51:46 +0300992
993Capability: KVM_CAP_MP_STATE
994Architectures: x86, ia64
995Type: vcpu ioctl
996Parameters: struct kvm_mp_state (in)
997Returns: 0 on success; -1 on error
998
999Sets the vcpu's current "multiprocessing state"; see KVM_GET_MP_STATE for
1000arguments.
1001
David Hildenbrand892f5c62014-05-12 16:05:13 +02001002On x86 and ia64, this ioctl is only useful after KVM_CREATE_IRQCHIP. Without an
1003in-kernel irqchip, the multiprocessing state must be maintained by userspace on
1004these architectures.
Avi Kivityb843f062010-04-25 15:51:46 +03001005
Jan Kiszka414fa982012-04-24 16:40:15 +02001006
Paul Bolle68ba6972011-02-15 00:05:59 +010010074.40 KVM_SET_IDENTITY_MAP_ADDR
Avi Kivity47dbb842010-04-29 12:08:56 +03001008
1009Capability: KVM_CAP_SET_IDENTITY_MAP_ADDR
1010Architectures: x86
1011Type: vm ioctl
1012Parameters: unsigned long identity (in)
1013Returns: 0 on success, -1 on error
1014
1015This ioctl defines the physical address of a one-page region in the guest
1016physical address space. The region must be within the first 4GB of the
1017guest physical address space and must not conflict with any memory slot
1018or any mmio address. The guest may malfunction if it accesses this memory
1019region.
1020
1021This ioctl is required on Intel-based hosts. This is needed on Intel hardware
1022because of a quirk in the virtualization implementation (see the internals
1023documentation when it pops into existence).
1024
Jan Kiszka414fa982012-04-24 16:40:15 +02001025
Paul Bolle68ba6972011-02-15 00:05:59 +010010264.41 KVM_SET_BOOT_CPU_ID
Avi Kivity57bc24c2010-04-29 12:12:57 +03001027
1028Capability: KVM_CAP_SET_BOOT_CPU_ID
1029Architectures: x86, ia64
1030Type: vm ioctl
1031Parameters: unsigned long vcpu_id
1032Returns: 0 on success, -1 on error
1033
1034Define which vcpu is the Bootstrap Processor (BSP). Values are the same
1035as the vcpu id in KVM_CREATE_VCPU. If this ioctl is not called, the default
1036is vcpu 0.
1037
Jan Kiszka414fa982012-04-24 16:40:15 +02001038
Paul Bolle68ba6972011-02-15 00:05:59 +010010394.42 KVM_GET_XSAVE
Sheng Yang2d5b5a62010-06-13 17:29:39 +08001040
1041Capability: KVM_CAP_XSAVE
1042Architectures: x86
1043Type: vcpu ioctl
1044Parameters: struct kvm_xsave (out)
1045Returns: 0 on success, -1 on error
1046
1047struct kvm_xsave {
1048 __u32 region[1024];
1049};
1050
1051This ioctl would copy current vcpu's xsave struct to the userspace.
1052
Jan Kiszka414fa982012-04-24 16:40:15 +02001053
Paul Bolle68ba6972011-02-15 00:05:59 +010010544.43 KVM_SET_XSAVE
Sheng Yang2d5b5a62010-06-13 17:29:39 +08001055
1056Capability: KVM_CAP_XSAVE
1057Architectures: x86
1058Type: vcpu ioctl
1059Parameters: struct kvm_xsave (in)
1060Returns: 0 on success, -1 on error
1061
1062struct kvm_xsave {
1063 __u32 region[1024];
1064};
1065
1066This ioctl would copy userspace's xsave struct to the kernel.
1067
Jan Kiszka414fa982012-04-24 16:40:15 +02001068
Paul Bolle68ba6972011-02-15 00:05:59 +010010694.44 KVM_GET_XCRS
Sheng Yang2d5b5a62010-06-13 17:29:39 +08001070
1071Capability: KVM_CAP_XCRS
1072Architectures: x86
1073Type: vcpu ioctl
1074Parameters: struct kvm_xcrs (out)
1075Returns: 0 on success, -1 on error
1076
1077struct kvm_xcr {
1078 __u32 xcr;
1079 __u32 reserved;
1080 __u64 value;
1081};
1082
1083struct kvm_xcrs {
1084 __u32 nr_xcrs;
1085 __u32 flags;
1086 struct kvm_xcr xcrs[KVM_MAX_XCRS];
1087 __u64 padding[16];
1088};
1089
1090This ioctl would copy current vcpu's xcrs to the userspace.
1091
Jan Kiszka414fa982012-04-24 16:40:15 +02001092
Paul Bolle68ba6972011-02-15 00:05:59 +010010934.45 KVM_SET_XCRS
Sheng Yang2d5b5a62010-06-13 17:29:39 +08001094
1095Capability: KVM_CAP_XCRS
1096Architectures: x86
1097Type: vcpu ioctl
1098Parameters: struct kvm_xcrs (in)
1099Returns: 0 on success, -1 on error
1100
1101struct kvm_xcr {
1102 __u32 xcr;
1103 __u32 reserved;
1104 __u64 value;
1105};
1106
1107struct kvm_xcrs {
1108 __u32 nr_xcrs;
1109 __u32 flags;
1110 struct kvm_xcr xcrs[KVM_MAX_XCRS];
1111 __u64 padding[16];
1112};
1113
1114This ioctl would set vcpu's xcr to the value userspace specified.
1115
Jan Kiszka414fa982012-04-24 16:40:15 +02001116
Paul Bolle68ba6972011-02-15 00:05:59 +010011174.46 KVM_GET_SUPPORTED_CPUID
Avi Kivityd1535132010-07-14 09:45:21 +03001118
1119Capability: KVM_CAP_EXT_CPUID
1120Architectures: x86
1121Type: system ioctl
1122Parameters: struct kvm_cpuid2 (in/out)
1123Returns: 0 on success, -1 on error
1124
1125struct kvm_cpuid2 {
1126 __u32 nent;
1127 __u32 padding;
1128 struct kvm_cpuid_entry2 entries[0];
1129};
1130
Borislav Petkovb4fe3052013-09-22 16:44:50 +02001131#define KVM_CPUID_FLAG_SIGNIFCANT_INDEX BIT(0)
1132#define KVM_CPUID_FLAG_STATEFUL_FUNC BIT(1)
1133#define KVM_CPUID_FLAG_STATE_READ_NEXT BIT(2)
Avi Kivityd1535132010-07-14 09:45:21 +03001134
1135struct kvm_cpuid_entry2 {
1136 __u32 function;
1137 __u32 index;
1138 __u32 flags;
1139 __u32 eax;
1140 __u32 ebx;
1141 __u32 ecx;
1142 __u32 edx;
1143 __u32 padding[3];
1144};
1145
1146This ioctl returns x86 cpuid features which are supported by both the hardware
1147and kvm. Userspace can use the information returned by this ioctl to
1148construct cpuid information (for KVM_SET_CPUID2) that is consistent with
1149hardware, kernel, and userspace capabilities, and with user requirements (for
1150example, the user may wish to constrain cpuid to emulate older hardware,
1151or for feature consistency across a cluster).
1152
1153Userspace invokes KVM_GET_SUPPORTED_CPUID by passing a kvm_cpuid2 structure
1154with the 'nent' field indicating the number of entries in the variable-size
1155array 'entries'. If the number of entries is too low to describe the cpu
1156capabilities, an error (E2BIG) is returned. If the number is too high,
1157the 'nent' field is adjusted and an error (ENOMEM) is returned. If the
1158number is just right, the 'nent' field is adjusted to the number of valid
1159entries in the 'entries' array, which is then filled.
1160
1161The entries returned are the host cpuid as returned by the cpuid instruction,
Avi Kivityc39cbd22010-09-12 16:39:11 +02001162with unknown or unsupported features masked out. Some features (for example,
1163x2apic), may not be present in the host cpu, but are exposed by kvm if it can
1164emulate them efficiently. The fields in each entry are defined as follows:
Avi Kivityd1535132010-07-14 09:45:21 +03001165
1166 function: the eax value used to obtain the entry
1167 index: the ecx value used to obtain the entry (for entries that are
1168 affected by ecx)
1169 flags: an OR of zero or more of the following:
1170 KVM_CPUID_FLAG_SIGNIFCANT_INDEX:
1171 if the index field is valid
1172 KVM_CPUID_FLAG_STATEFUL_FUNC:
1173 if cpuid for this function returns different values for successive
1174 invocations; there will be several entries with the same function,
1175 all with this flag set
1176 KVM_CPUID_FLAG_STATE_READ_NEXT:
1177 for KVM_CPUID_FLAG_STATEFUL_FUNC entries, set if this entry is
1178 the first entry to be read by a cpu
1179 eax, ebx, ecx, edx: the values returned by the cpuid instruction for
1180 this function/index combination
1181
Jan Kiszka4d25a0662011-12-21 12:28:29 +01001182The TSC deadline timer feature (CPUID leaf 1, ecx[24]) is always returned
1183as false, since the feature depends on KVM_CREATE_IRQCHIP for local APIC
1184support. Instead it is reported via
1185
1186 ioctl(KVM_CHECK_EXTENSION, KVM_CAP_TSC_DEADLINE_TIMER)
1187
1188if that returns true and you use KVM_CREATE_IRQCHIP, or if you emulate the
1189feature in userspace, then you can enable the feature for KVM_SET_CPUID2.
1190
Jan Kiszka414fa982012-04-24 16:40:15 +02001191
Paul Bolle68ba6972011-02-15 00:05:59 +010011924.47 KVM_PPC_GET_PVINFO
Alexander Graf15711e92010-07-29 14:48:08 +02001193
1194Capability: KVM_CAP_PPC_GET_PVINFO
1195Architectures: ppc
1196Type: vm ioctl
1197Parameters: struct kvm_ppc_pvinfo (out)
1198Returns: 0 on success, !0 on error
1199
1200struct kvm_ppc_pvinfo {
1201 __u32 flags;
1202 __u32 hcall[4];
1203 __u8 pad[108];
1204};
1205
1206This ioctl fetches PV specific information that need to be passed to the guest
1207using the device tree or other means from vm context.
1208
Liu Yu-B132019202e072012-07-03 05:48:52 +00001209The hcall array defines 4 instructions that make up a hypercall.
Alexander Graf15711e92010-07-29 14:48:08 +02001210
1211If any additional field gets added to this structure later on, a bit for that
1212additional piece of information will be set in the flags bitmap.
1213
Liu Yu-B132019202e072012-07-03 05:48:52 +00001214The flags bitmap is defined as:
1215
1216 /* the host supports the ePAPR idle hcall
1217 #define KVM_PPC_PVINFO_FLAGS_EV_IDLE (1<<0)
Jan Kiszka414fa982012-04-24 16:40:15 +02001218
Paul Bolle68ba6972011-02-15 00:05:59 +010012194.48 KVM_ASSIGN_PCI_DEVICE
Jan Kiszka49f48172010-11-16 22:30:07 +01001220
1221Capability: KVM_CAP_DEVICE_ASSIGNMENT
1222Architectures: x86 ia64
1223Type: vm ioctl
1224Parameters: struct kvm_assigned_pci_dev (in)
1225Returns: 0 on success, -1 on error
1226
1227Assigns a host PCI device to the VM.
1228
1229struct kvm_assigned_pci_dev {
1230 __u32 assigned_dev_id;
1231 __u32 busnr;
1232 __u32 devfn;
1233 __u32 flags;
1234 __u32 segnr;
1235 union {
1236 __u32 reserved[11];
1237 };
1238};
1239
1240The PCI device is specified by the triple segnr, busnr, and devfn.
1241Identification in succeeding service requests is done via assigned_dev_id. The
1242following flags are specified:
1243
1244/* Depends on KVM_CAP_IOMMU */
1245#define KVM_DEV_ASSIGN_ENABLE_IOMMU (1 << 0)
Jan Kiszka07700a92012-02-28 14:19:54 +01001246/* The following two depend on KVM_CAP_PCI_2_3 */
1247#define KVM_DEV_ASSIGN_PCI_2_3 (1 << 1)
1248#define KVM_DEV_ASSIGN_MASK_INTX (1 << 2)
1249
1250If KVM_DEV_ASSIGN_PCI_2_3 is set, the kernel will manage legacy INTx interrupts
1251via the PCI-2.3-compliant device-level mask, thus enable IRQ sharing with other
1252assigned devices or host devices. KVM_DEV_ASSIGN_MASK_INTX specifies the
1253guest's view on the INTx mask, see KVM_ASSIGN_SET_INTX_MASK for details.
Jan Kiszka49f48172010-11-16 22:30:07 +01001254
Alex Williamson42387372011-12-20 21:59:03 -07001255The KVM_DEV_ASSIGN_ENABLE_IOMMU flag is a mandatory option to ensure
1256isolation of the device. Usages not specifying this flag are deprecated.
1257
Alex Williamson3d27e232011-12-20 21:59:09 -07001258Only PCI header type 0 devices with PCI BAR resources are supported by
1259device assignment. The user requesting this ioctl must have read/write
1260access to the PCI sysfs resource files associated with the device.
1261
Jan Kiszka414fa982012-04-24 16:40:15 +02001262
Paul Bolle68ba6972011-02-15 00:05:59 +010012634.49 KVM_DEASSIGN_PCI_DEVICE
Jan Kiszka49f48172010-11-16 22:30:07 +01001264
1265Capability: KVM_CAP_DEVICE_DEASSIGNMENT
1266Architectures: x86 ia64
1267Type: vm ioctl
1268Parameters: struct kvm_assigned_pci_dev (in)
1269Returns: 0 on success, -1 on error
1270
1271Ends PCI device assignment, releasing all associated resources.
1272
1273See KVM_CAP_DEVICE_ASSIGNMENT for the data structure. Only assigned_dev_id is
1274used in kvm_assigned_pci_dev to identify the device.
1275
Jan Kiszka414fa982012-04-24 16:40:15 +02001276
Paul Bolle68ba6972011-02-15 00:05:59 +010012774.50 KVM_ASSIGN_DEV_IRQ
Jan Kiszka49f48172010-11-16 22:30:07 +01001278
1279Capability: KVM_CAP_ASSIGN_DEV_IRQ
1280Architectures: x86 ia64
1281Type: vm ioctl
1282Parameters: struct kvm_assigned_irq (in)
1283Returns: 0 on success, -1 on error
1284
1285Assigns an IRQ to a passed-through device.
1286
1287struct kvm_assigned_irq {
1288 __u32 assigned_dev_id;
Jan Kiszka91e3d712011-06-03 08:51:05 +02001289 __u32 host_irq; /* ignored (legacy field) */
Jan Kiszka49f48172010-11-16 22:30:07 +01001290 __u32 guest_irq;
1291 __u32 flags;
1292 union {
Jan Kiszka49f48172010-11-16 22:30:07 +01001293 __u32 reserved[12];
1294 };
1295};
1296
1297The following flags are defined:
1298
1299#define KVM_DEV_IRQ_HOST_INTX (1 << 0)
1300#define KVM_DEV_IRQ_HOST_MSI (1 << 1)
1301#define KVM_DEV_IRQ_HOST_MSIX (1 << 2)
1302
1303#define KVM_DEV_IRQ_GUEST_INTX (1 << 8)
1304#define KVM_DEV_IRQ_GUEST_MSI (1 << 9)
1305#define KVM_DEV_IRQ_GUEST_MSIX (1 << 10)
1306
1307It is not valid to specify multiple types per host or guest IRQ. However, the
1308IRQ type of host and guest can differ or can even be null.
1309
Jan Kiszka414fa982012-04-24 16:40:15 +02001310
Paul Bolle68ba6972011-02-15 00:05:59 +010013114.51 KVM_DEASSIGN_DEV_IRQ
Jan Kiszka49f48172010-11-16 22:30:07 +01001312
1313Capability: KVM_CAP_ASSIGN_DEV_IRQ
1314Architectures: x86 ia64
1315Type: vm ioctl
1316Parameters: struct kvm_assigned_irq (in)
1317Returns: 0 on success, -1 on error
1318
1319Ends an IRQ assignment to a passed-through device.
1320
1321See KVM_ASSIGN_DEV_IRQ for the data structure. The target device is specified
1322by assigned_dev_id, flags must correspond to the IRQ type specified on
1323KVM_ASSIGN_DEV_IRQ. Partial deassignment of host or guest IRQ is allowed.
1324
Jan Kiszka414fa982012-04-24 16:40:15 +02001325
Paul Bolle68ba6972011-02-15 00:05:59 +010013264.52 KVM_SET_GSI_ROUTING
Jan Kiszka49f48172010-11-16 22:30:07 +01001327
1328Capability: KVM_CAP_IRQ_ROUTING
1329Architectures: x86 ia64
1330Type: vm ioctl
1331Parameters: struct kvm_irq_routing (in)
1332Returns: 0 on success, -1 on error
1333
1334Sets the GSI routing table entries, overwriting any previously set entries.
1335
1336struct kvm_irq_routing {
1337 __u32 nr;
1338 __u32 flags;
1339 struct kvm_irq_routing_entry entries[0];
1340};
1341
1342No flags are specified so far, the corresponding field must be set to zero.
1343
1344struct kvm_irq_routing_entry {
1345 __u32 gsi;
1346 __u32 type;
1347 __u32 flags;
1348 __u32 pad;
1349 union {
1350 struct kvm_irq_routing_irqchip irqchip;
1351 struct kvm_irq_routing_msi msi;
1352 __u32 pad[8];
1353 } u;
1354};
1355
1356/* gsi routing entry types */
1357#define KVM_IRQ_ROUTING_IRQCHIP 1
1358#define KVM_IRQ_ROUTING_MSI 2
1359
1360No flags are specified so far, the corresponding field must be set to zero.
1361
1362struct kvm_irq_routing_irqchip {
1363 __u32 irqchip;
1364 __u32 pin;
1365};
1366
1367struct kvm_irq_routing_msi {
1368 __u32 address_lo;
1369 __u32 address_hi;
1370 __u32 data;
1371 __u32 pad;
1372};
1373
Jan Kiszka414fa982012-04-24 16:40:15 +02001374
Paul Bolle68ba6972011-02-15 00:05:59 +010013754.53 KVM_ASSIGN_SET_MSIX_NR
Jan Kiszka49f48172010-11-16 22:30:07 +01001376
1377Capability: KVM_CAP_DEVICE_MSIX
1378Architectures: x86 ia64
1379Type: vm ioctl
1380Parameters: struct kvm_assigned_msix_nr (in)
1381Returns: 0 on success, -1 on error
1382
Jan Kiszka58f09642011-06-11 12:24:24 +02001383Set the number of MSI-X interrupts for an assigned device. The number is
1384reset again by terminating the MSI-X assignment of the device via
1385KVM_DEASSIGN_DEV_IRQ. Calling this service more than once at any earlier
1386point will fail.
Jan Kiszka49f48172010-11-16 22:30:07 +01001387
1388struct kvm_assigned_msix_nr {
1389 __u32 assigned_dev_id;
1390 __u16 entry_nr;
1391 __u16 padding;
1392};
1393
1394#define KVM_MAX_MSIX_PER_DEV 256
1395
Jan Kiszka414fa982012-04-24 16:40:15 +02001396
Paul Bolle68ba6972011-02-15 00:05:59 +010013974.54 KVM_ASSIGN_SET_MSIX_ENTRY
Jan Kiszka49f48172010-11-16 22:30:07 +01001398
1399Capability: KVM_CAP_DEVICE_MSIX
1400Architectures: x86 ia64
1401Type: vm ioctl
1402Parameters: struct kvm_assigned_msix_entry (in)
1403Returns: 0 on success, -1 on error
1404
1405Specifies the routing of an MSI-X assigned device interrupt to a GSI. Setting
1406the GSI vector to zero means disabling the interrupt.
1407
1408struct kvm_assigned_msix_entry {
1409 __u32 assigned_dev_id;
1410 __u32 gsi;
1411 __u16 entry; /* The index of entry in the MSI-X table */
1412 __u16 padding[3];
1413};
1414
Jan Kiszka414fa982012-04-24 16:40:15 +02001415
14164.55 KVM_SET_TSC_KHZ
Joerg Roedel92a1f122011-03-25 09:44:51 +01001417
1418Capability: KVM_CAP_TSC_CONTROL
1419Architectures: x86
1420Type: vcpu ioctl
1421Parameters: virtual tsc_khz
1422Returns: 0 on success, -1 on error
1423
1424Specifies the tsc frequency for the virtual machine. The unit of the
1425frequency is KHz.
1426
Jan Kiszka414fa982012-04-24 16:40:15 +02001427
14284.56 KVM_GET_TSC_KHZ
Joerg Roedel92a1f122011-03-25 09:44:51 +01001429
1430Capability: KVM_CAP_GET_TSC_KHZ
1431Architectures: x86
1432Type: vcpu ioctl
1433Parameters: none
1434Returns: virtual tsc-khz on success, negative value on error
1435
1436Returns the tsc frequency of the guest. The unit of the return value is
1437KHz. If the host has unstable tsc this ioctl returns -EIO instead as an
1438error.
1439
Jan Kiszka414fa982012-04-24 16:40:15 +02001440
14414.57 KVM_GET_LAPIC
Avi Kivitye7677932011-05-11 08:30:51 -04001442
1443Capability: KVM_CAP_IRQCHIP
1444Architectures: x86
1445Type: vcpu ioctl
1446Parameters: struct kvm_lapic_state (out)
1447Returns: 0 on success, -1 on error
1448
1449#define KVM_APIC_REG_SIZE 0x400
1450struct kvm_lapic_state {
1451 char regs[KVM_APIC_REG_SIZE];
1452};
1453
1454Reads the Local APIC registers and copies them into the input argument. The
1455data format and layout are the same as documented in the architecture manual.
1456
Jan Kiszka414fa982012-04-24 16:40:15 +02001457
14584.58 KVM_SET_LAPIC
Avi Kivitye7677932011-05-11 08:30:51 -04001459
1460Capability: KVM_CAP_IRQCHIP
1461Architectures: x86
1462Type: vcpu ioctl
1463Parameters: struct kvm_lapic_state (in)
1464Returns: 0 on success, -1 on error
1465
1466#define KVM_APIC_REG_SIZE 0x400
1467struct kvm_lapic_state {
1468 char regs[KVM_APIC_REG_SIZE];
1469};
1470
1471Copies the input argument into the the Local APIC registers. The data format
1472and layout are the same as documented in the architecture manual.
1473
Jan Kiszka414fa982012-04-24 16:40:15 +02001474
14754.59 KVM_IOEVENTFD
Sasha Levin55399a02011-05-28 14:12:30 +03001476
1477Capability: KVM_CAP_IOEVENTFD
1478Architectures: all
1479Type: vm ioctl
1480Parameters: struct kvm_ioeventfd (in)
1481Returns: 0 on success, !0 on error
1482
1483This ioctl attaches or detaches an ioeventfd to a legal pio/mmio address
1484within the guest. A guest write in the registered address will signal the
1485provided event instead of triggering an exit.
1486
1487struct kvm_ioeventfd {
1488 __u64 datamatch;
1489 __u64 addr; /* legal pio/mmio address */
1490 __u32 len; /* 1, 2, 4, or 8 bytes */
1491 __s32 fd;
1492 __u32 flags;
1493 __u8 pad[36];
1494};
1495
Cornelia Huck2b834512013-02-28 12:33:20 +01001496For the special case of virtio-ccw devices on s390, the ioevent is matched
1497to a subchannel/virtqueue tuple instead.
1498
Sasha Levin55399a02011-05-28 14:12:30 +03001499The following flags are defined:
1500
1501#define KVM_IOEVENTFD_FLAG_DATAMATCH (1 << kvm_ioeventfd_flag_nr_datamatch)
1502#define KVM_IOEVENTFD_FLAG_PIO (1 << kvm_ioeventfd_flag_nr_pio)
1503#define KVM_IOEVENTFD_FLAG_DEASSIGN (1 << kvm_ioeventfd_flag_nr_deassign)
Cornelia Huck2b834512013-02-28 12:33:20 +01001504#define KVM_IOEVENTFD_FLAG_VIRTIO_CCW_NOTIFY \
1505 (1 << kvm_ioeventfd_flag_nr_virtio_ccw_notify)
Sasha Levin55399a02011-05-28 14:12:30 +03001506
1507If datamatch flag is set, the event will be signaled only if the written value
1508to the registered address is equal to datamatch in struct kvm_ioeventfd.
1509
Cornelia Huck2b834512013-02-28 12:33:20 +01001510For virtio-ccw devices, addr contains the subchannel id and datamatch the
1511virtqueue index.
1512
Jan Kiszka414fa982012-04-24 16:40:15 +02001513
15144.60 KVM_DIRTY_TLB
Scott Wooddc83b8b2011-08-18 15:25:21 -05001515
1516Capability: KVM_CAP_SW_TLB
1517Architectures: ppc
1518Type: vcpu ioctl
1519Parameters: struct kvm_dirty_tlb (in)
1520Returns: 0 on success, -1 on error
1521
1522struct kvm_dirty_tlb {
1523 __u64 bitmap;
1524 __u32 num_dirty;
1525};
1526
1527This must be called whenever userspace has changed an entry in the shared
1528TLB, prior to calling KVM_RUN on the associated vcpu.
1529
1530The "bitmap" field is the userspace address of an array. This array
1531consists of a number of bits, equal to the total number of TLB entries as
1532determined by the last successful call to KVM_CONFIG_TLB, rounded up to the
1533nearest multiple of 64.
1534
1535Each bit corresponds to one TLB entry, ordered the same as in the shared TLB
1536array.
1537
1538The array is little-endian: the bit 0 is the least significant bit of the
1539first byte, bit 8 is the least significant bit of the second byte, etc.
1540This avoids any complications with differing word sizes.
1541
1542The "num_dirty" field is a performance hint for KVM to determine whether it
1543should skip processing the bitmap and just invalidate everything. It must
1544be set to the number of set bits in the bitmap.
1545
Jan Kiszka414fa982012-04-24 16:40:15 +02001546
15474.61 KVM_ASSIGN_SET_INTX_MASK
Jan Kiszka07700a92012-02-28 14:19:54 +01001548
1549Capability: KVM_CAP_PCI_2_3
1550Architectures: x86
1551Type: vm ioctl
1552Parameters: struct kvm_assigned_pci_dev (in)
1553Returns: 0 on success, -1 on error
1554
1555Allows userspace to mask PCI INTx interrupts from the assigned device. The
1556kernel will not deliver INTx interrupts to the guest between setting and
1557clearing of KVM_ASSIGN_SET_INTX_MASK via this interface. This enables use of
1558and emulation of PCI 2.3 INTx disable command register behavior.
1559
1560This may be used for both PCI 2.3 devices supporting INTx disable natively and
1561older devices lacking this support. Userspace is responsible for emulating the
1562read value of the INTx disable bit in the guest visible PCI command register.
1563When modifying the INTx disable state, userspace should precede updating the
1564physical device command register by calling this ioctl to inform the kernel of
1565the new intended INTx mask state.
1566
1567Note that the kernel uses the device INTx disable bit to internally manage the
1568device interrupt state for PCI 2.3 devices. Reads of this register may
1569therefore not match the expected value. Writes should always use the guest
1570intended INTx disable value rather than attempting to read-copy-update the
1571current physical device state. Races between user and kernel updates to the
1572INTx disable bit are handled lazily in the kernel. It's possible the device
1573may generate unintended interrupts, but they will not be injected into the
1574guest.
1575
1576See KVM_ASSIGN_DEV_IRQ for the data structure. The target device is specified
1577by assigned_dev_id. In the flags field, only KVM_DEV_ASSIGN_MASK_INTX is
1578evaluated.
1579
Jan Kiszka414fa982012-04-24 16:40:15 +02001580
David Gibson54738c02011-06-29 00:22:41 +000015814.62 KVM_CREATE_SPAPR_TCE
1582
1583Capability: KVM_CAP_SPAPR_TCE
1584Architectures: powerpc
1585Type: vm ioctl
1586Parameters: struct kvm_create_spapr_tce (in)
1587Returns: file descriptor for manipulating the created TCE table
1588
1589This creates a virtual TCE (translation control entry) table, which
1590is an IOMMU for PAPR-style virtual I/O. It is used to translate
1591logical addresses used in virtual I/O into guest physical addresses,
1592and provides a scatter/gather capability for PAPR virtual I/O.
1593
1594/* for KVM_CAP_SPAPR_TCE */
1595struct kvm_create_spapr_tce {
1596 __u64 liobn;
1597 __u32 window_size;
1598};
1599
1600The liobn field gives the logical IO bus number for which to create a
1601TCE table. The window_size field specifies the size of the DMA window
1602which this TCE table will translate - the table will contain one 64
1603bit TCE entry for every 4kiB of the DMA window.
1604
1605When the guest issues an H_PUT_TCE hcall on a liobn for which a TCE
1606table has been created using this ioctl(), the kernel will handle it
1607in real mode, updating the TCE table. H_PUT_TCE calls for other
1608liobns will cause a vm exit and must be handled by userspace.
1609
1610The return value is a file descriptor which can be passed to mmap(2)
1611to map the created TCE table into userspace. This lets userspace read
1612the entries written by kernel-handled H_PUT_TCE calls, and also lets
1613userspace update the TCE table directly which is useful in some
1614circumstances.
1615
Jan Kiszka414fa982012-04-24 16:40:15 +02001616
Paul Mackerrasaa04b4c2011-06-29 00:25:44 +000016174.63 KVM_ALLOCATE_RMA
1618
1619Capability: KVM_CAP_PPC_RMA
1620Architectures: powerpc
1621Type: vm ioctl
1622Parameters: struct kvm_allocate_rma (out)
1623Returns: file descriptor for mapping the allocated RMA
1624
1625This allocates a Real Mode Area (RMA) from the pool allocated at boot
1626time by the kernel. An RMA is a physically-contiguous, aligned region
1627of memory used on older POWER processors to provide the memory which
1628will be accessed by real-mode (MMU off) accesses in a KVM guest.
1629POWER processors support a set of sizes for the RMA that usually
1630includes 64MB, 128MB, 256MB and some larger powers of two.
1631
1632/* for KVM_ALLOCATE_RMA */
1633struct kvm_allocate_rma {
1634 __u64 rma_size;
1635};
1636
1637The return value is a file descriptor which can be passed to mmap(2)
1638to map the allocated RMA into userspace. The mapped area can then be
1639passed to the KVM_SET_USER_MEMORY_REGION ioctl to establish it as the
1640RMA for a virtual machine. The size of the RMA in bytes (which is
1641fixed at host kernel boot time) is returned in the rma_size field of
1642the argument structure.
1643
1644The KVM_CAP_PPC_RMA capability is 1 or 2 if the KVM_ALLOCATE_RMA ioctl
1645is supported; 2 if the processor requires all virtual machines to have
1646an RMA, or 1 if the processor can use an RMA but doesn't require it,
1647because it supports the Virtual RMA (VRMA) facility.
1648
Jan Kiszka414fa982012-04-24 16:40:15 +02001649
Avi Kivity3f745f12011-12-07 12:42:47 +020016504.64 KVM_NMI
1651
1652Capability: KVM_CAP_USER_NMI
1653Architectures: x86
1654Type: vcpu ioctl
1655Parameters: none
1656Returns: 0 on success, -1 on error
1657
1658Queues an NMI on the thread's vcpu. Note this is well defined only
1659when KVM_CREATE_IRQCHIP has not been called, since this is an interface
1660between the virtual cpu core and virtual local APIC. After KVM_CREATE_IRQCHIP
1661has been called, this interface is completely emulated within the kernel.
1662
1663To use this to emulate the LINT1 input with KVM_CREATE_IRQCHIP, use the
1664following algorithm:
1665
1666 - pause the vpcu
1667 - read the local APIC's state (KVM_GET_LAPIC)
1668 - check whether changing LINT1 will queue an NMI (see the LVT entry for LINT1)
1669 - if so, issue KVM_NMI
1670 - resume the vcpu
1671
1672Some guests configure the LINT1 NMI input to cause a panic, aiding in
1673debugging.
1674
Jan Kiszka414fa982012-04-24 16:40:15 +02001675
Alexander Grafe24ed812011-09-14 10:02:41 +020016764.65 KVM_S390_UCAS_MAP
Carsten Otte27e03932012-01-04 10:25:21 +01001677
1678Capability: KVM_CAP_S390_UCONTROL
1679Architectures: s390
1680Type: vcpu ioctl
1681Parameters: struct kvm_s390_ucas_mapping (in)
1682Returns: 0 in case of success
1683
1684The parameter is defined like this:
1685 struct kvm_s390_ucas_mapping {
1686 __u64 user_addr;
1687 __u64 vcpu_addr;
1688 __u64 length;
1689 };
1690
1691This ioctl maps the memory at "user_addr" with the length "length" to
1692the vcpu's address space starting at "vcpu_addr". All parameters need to
1693be alligned by 1 megabyte.
1694
Jan Kiszka414fa982012-04-24 16:40:15 +02001695
Alexander Grafe24ed812011-09-14 10:02:41 +020016964.66 KVM_S390_UCAS_UNMAP
Carsten Otte27e03932012-01-04 10:25:21 +01001697
1698Capability: KVM_CAP_S390_UCONTROL
1699Architectures: s390
1700Type: vcpu ioctl
1701Parameters: struct kvm_s390_ucas_mapping (in)
1702Returns: 0 in case of success
1703
1704The parameter is defined like this:
1705 struct kvm_s390_ucas_mapping {
1706 __u64 user_addr;
1707 __u64 vcpu_addr;
1708 __u64 length;
1709 };
1710
1711This ioctl unmaps the memory in the vcpu's address space starting at
1712"vcpu_addr" with the length "length". The field "user_addr" is ignored.
1713All parameters need to be alligned by 1 megabyte.
1714
Jan Kiszka414fa982012-04-24 16:40:15 +02001715
Alexander Grafe24ed812011-09-14 10:02:41 +020017164.67 KVM_S390_VCPU_FAULT
Carsten Otteccc79102012-01-04 10:25:26 +01001717
1718Capability: KVM_CAP_S390_UCONTROL
1719Architectures: s390
1720Type: vcpu ioctl
1721Parameters: vcpu absolute address (in)
1722Returns: 0 in case of success
1723
1724This call creates a page table entry on the virtual cpu's address space
1725(for user controlled virtual machines) or the virtual machine's address
1726space (for regular virtual machines). This only works for minor faults,
1727thus it's recommended to access subject memory page via the user page
1728table upfront. This is useful to handle validity intercepts for user
1729controlled virtual machines to fault in the virtual cpu's lowcore pages
1730prior to calling the KVM_RUN ioctl.
1731
Jan Kiszka414fa982012-04-24 16:40:15 +02001732
Alexander Grafe24ed812011-09-14 10:02:41 +020017334.68 KVM_SET_ONE_REG
1734
1735Capability: KVM_CAP_ONE_REG
1736Architectures: all
1737Type: vcpu ioctl
1738Parameters: struct kvm_one_reg (in)
1739Returns: 0 on success, negative value on failure
1740
1741struct kvm_one_reg {
1742 __u64 id;
1743 __u64 addr;
1744};
1745
1746Using this ioctl, a single vcpu register can be set to a specific value
1747defined by user space with the passed in struct kvm_one_reg, where id
1748refers to the register identifier as described below and addr is a pointer
1749to a variable with the respective size. There can be architecture agnostic
1750and architecture specific registers. Each have their own range of operation
1751and their own constants and width. To keep track of the implemented
1752registers, find a list below:
1753
1754 Arch | Register | Width (bits)
1755 | |
Alexander Graf1022fc32011-09-14 21:45:23 +02001756 PPC | KVM_REG_PPC_HIOR | 64
Bharat Bhushan2e232702012-08-15 17:37:13 +00001757 PPC | KVM_REG_PPC_IAC1 | 64
1758 PPC | KVM_REG_PPC_IAC2 | 64
1759 PPC | KVM_REG_PPC_IAC3 | 64
1760 PPC | KVM_REG_PPC_IAC4 | 64
1761 PPC | KVM_REG_PPC_DAC1 | 64
1762 PPC | KVM_REG_PPC_DAC2 | 64
Paul Mackerrasa136a8b2012-09-25 20:31:56 +00001763 PPC | KVM_REG_PPC_DABR | 64
1764 PPC | KVM_REG_PPC_DSCR | 64
1765 PPC | KVM_REG_PPC_PURR | 64
1766 PPC | KVM_REG_PPC_SPURR | 64
1767 PPC | KVM_REG_PPC_DAR | 64
1768 PPC | KVM_REG_PPC_DSISR | 32
1769 PPC | KVM_REG_PPC_AMR | 64
1770 PPC | KVM_REG_PPC_UAMOR | 64
1771 PPC | KVM_REG_PPC_MMCR0 | 64
1772 PPC | KVM_REG_PPC_MMCR1 | 64
1773 PPC | KVM_REG_PPC_MMCRA | 64
1774 PPC | KVM_REG_PPC_PMC1 | 32
1775 PPC | KVM_REG_PPC_PMC2 | 32
1776 PPC | KVM_REG_PPC_PMC3 | 32
1777 PPC | KVM_REG_PPC_PMC4 | 32
1778 PPC | KVM_REG_PPC_PMC5 | 32
1779 PPC | KVM_REG_PPC_PMC6 | 32
1780 PPC | KVM_REG_PPC_PMC7 | 32
1781 PPC | KVM_REG_PPC_PMC8 | 32
Paul Mackerrasa8bd19e2012-09-25 20:32:30 +00001782 PPC | KVM_REG_PPC_FPR0 | 64
1783 ...
1784 PPC | KVM_REG_PPC_FPR31 | 64
1785 PPC | KVM_REG_PPC_VR0 | 128
1786 ...
1787 PPC | KVM_REG_PPC_VR31 | 128
1788 PPC | KVM_REG_PPC_VSR0 | 128
1789 ...
1790 PPC | KVM_REG_PPC_VSR31 | 128
1791 PPC | KVM_REG_PPC_FPSCR | 64
1792 PPC | KVM_REG_PPC_VSCR | 32
Paul Mackerras55b665b2012-09-25 20:33:06 +00001793 PPC | KVM_REG_PPC_VPA_ADDR | 64
1794 PPC | KVM_REG_PPC_VPA_SLB | 128
1795 PPC | KVM_REG_PPC_VPA_DTL | 128
Mihai Caraman352df1d2012-10-11 06:13:29 +00001796 PPC | KVM_REG_PPC_EPCR | 32
Alexander Graf324b3e62013-01-04 18:28:51 +01001797 PPC | KVM_REG_PPC_EPR | 32
Bharat Bhushan78accda2013-02-24 18:57:12 +00001798 PPC | KVM_REG_PPC_TCR | 32
1799 PPC | KVM_REG_PPC_TSR | 32
1800 PPC | KVM_REG_PPC_OR_TSR | 32
1801 PPC | KVM_REG_PPC_CLEAR_TSR | 32
Mihai Caramana85d2aa2013-04-11 00:03:08 +00001802 PPC | KVM_REG_PPC_MAS0 | 32
1803 PPC | KVM_REG_PPC_MAS1 | 32
1804 PPC | KVM_REG_PPC_MAS2 | 64
1805 PPC | KVM_REG_PPC_MAS7_3 | 64
1806 PPC | KVM_REG_PPC_MAS4 | 32
1807 PPC | KVM_REG_PPC_MAS6 | 32
1808 PPC | KVM_REG_PPC_MMUCFG | 32
1809 PPC | KVM_REG_PPC_TLB0CFG | 32
1810 PPC | KVM_REG_PPC_TLB1CFG | 32
1811 PPC | KVM_REG_PPC_TLB2CFG | 32
1812 PPC | KVM_REG_PPC_TLB3CFG | 32
Mihai Caraman307d9002013-04-11 00:03:10 +00001813 PPC | KVM_REG_PPC_TLB0PS | 32
1814 PPC | KVM_REG_PPC_TLB1PS | 32
1815 PPC | KVM_REG_PPC_TLB2PS | 32
1816 PPC | KVM_REG_PPC_TLB3PS | 32
Mihai Caraman9a6061d2013-04-11 00:03:11 +00001817 PPC | KVM_REG_PPC_EPTCFG | 32
Paul Mackerras8b786452013-04-17 20:32:26 +00001818 PPC | KVM_REG_PPC_ICP_STATE | 64
Jan Kiszka414fa982012-04-24 16:40:15 +02001819
Christoffer Dall749cf76c2013-01-20 18:28:06 -05001820ARM registers are mapped using the lower 32 bits. The upper 16 of that
1821is the register group type, or coprocessor number:
1822
1823ARM core registers have the following id bit patterns:
Christoffer Dallaa404dd2013-04-22 18:57:46 -07001824 0x4020 0000 0010 <index into the kvm_regs struct:16>
Christoffer Dall749cf76c2013-01-20 18:28:06 -05001825
Christoffer Dall11382452013-01-20 18:28:10 -05001826ARM 32-bit CP15 registers have the following id bit patterns:
Christoffer Dallaa404dd2013-04-22 18:57:46 -07001827 0x4020 0000 000F <zero:1> <crn:4> <crm:4> <opc1:4> <opc2:3>
Christoffer Dall11382452013-01-20 18:28:10 -05001828
1829ARM 64-bit CP15 registers have the following id bit patterns:
Christoffer Dallaa404dd2013-04-22 18:57:46 -07001830 0x4030 0000 000F <zero:1> <zero:4> <crm:4> <opc1:4> <zero:3>
Christoffer Dall749cf76c2013-01-20 18:28:06 -05001831
Christoffer Dallc27581e2013-01-20 18:28:10 -05001832ARM CCSIDR registers are demultiplexed by CSSELR value:
Christoffer Dallaa404dd2013-04-22 18:57:46 -07001833 0x4020 0000 0011 00 <csselr:8>
Christoffer Dall749cf76c2013-01-20 18:28:06 -05001834
Rusty Russell4fe21e42013-01-20 18:28:11 -05001835ARM 32-bit VFP control registers have the following id bit patterns:
Christoffer Dallaa404dd2013-04-22 18:57:46 -07001836 0x4020 0000 0012 1 <regno:12>
Rusty Russell4fe21e42013-01-20 18:28:11 -05001837
1838ARM 64-bit FP registers have the following id bit patterns:
Christoffer Dallaa404dd2013-04-22 18:57:46 -07001839 0x4030 0000 0012 0 <regno:12>
Rusty Russell4fe21e42013-01-20 18:28:11 -05001840
Marc Zyngierd3845bf2013-04-02 17:46:31 +01001841
1842arm64 registers are mapped using the lower 32 bits. The upper 16 of
1843that is the register group type, or coprocessor number:
1844
1845arm64 core/FP-SIMD registers have the following id bit patterns. Note
1846that the size of the access is variable, as the kvm_regs structure
1847contains elements ranging from 32 to 128 bits. The index is a 32bit
1848value in the kvm_regs structure seen as a 32bit array.
1849 0x60x0 0000 0010 <index into the kvm_regs struct:16>
1850
1851arm64 CCSIDR registers are demultiplexed by CSSELR value:
1852 0x6020 0000 0011 00 <csselr:8>
1853
1854arm64 system registers have the following id bit patterns:
1855 0x6030 0000 0013 <op0:2> <op1:3> <crn:4> <crm:4> <op2:3>
1856
Alexander Grafe24ed812011-09-14 10:02:41 +020018574.69 KVM_GET_ONE_REG
1858
1859Capability: KVM_CAP_ONE_REG
1860Architectures: all
1861Type: vcpu ioctl
1862Parameters: struct kvm_one_reg (in and out)
1863Returns: 0 on success, negative value on failure
1864
1865This ioctl allows to receive the value of a single register implemented
1866in a vcpu. The register to read is indicated by the "id" field of the
1867kvm_one_reg struct passed in. On success, the register value can be found
1868at the memory location pointed to by "addr".
1869
1870The list of registers accessible using this interface is identical to the
Bharat Bhushan2e232702012-08-15 17:37:13 +00001871list in 4.68.
Alexander Grafe24ed812011-09-14 10:02:41 +02001872
Jan Kiszka414fa982012-04-24 16:40:15 +02001873
Eric B Munson1c0b28c2012-03-10 14:37:27 -050018744.70 KVM_KVMCLOCK_CTRL
1875
1876Capability: KVM_CAP_KVMCLOCK_CTRL
1877Architectures: Any that implement pvclocks (currently x86 only)
1878Type: vcpu ioctl
1879Parameters: None
1880Returns: 0 on success, -1 on error
1881
1882This signals to the host kernel that the specified guest is being paused by
1883userspace. The host will set a flag in the pvclock structure that is checked
1884from the soft lockup watchdog. The flag is part of the pvclock structure that
1885is shared between guest and host, specifically the second bit of the flags
1886field of the pvclock_vcpu_time_info structure. It will be set exclusively by
1887the host and read/cleared exclusively by the guest. The guest operation of
1888checking and clearing the flag must an atomic operation so
1889load-link/store-conditional, or equivalent must be used. There are two cases
1890where the guest will clear the flag: when the soft lockup watchdog timer resets
1891itself or when a soft lockup is detected. This ioctl can be called any time
1892after pausing the vcpu, but before it is resumed.
1893
Jan Kiszka414fa982012-04-24 16:40:15 +02001894
Jan Kiszka07975ad2012-03-29 21:14:12 +020018954.71 KVM_SIGNAL_MSI
1896
1897Capability: KVM_CAP_SIGNAL_MSI
1898Architectures: x86
1899Type: vm ioctl
1900Parameters: struct kvm_msi (in)
1901Returns: >0 on delivery, 0 if guest blocked the MSI, and -1 on error
1902
1903Directly inject a MSI message. Only valid with in-kernel irqchip that handles
1904MSI messages.
1905
1906struct kvm_msi {
1907 __u32 address_lo;
1908 __u32 address_hi;
1909 __u32 data;
1910 __u32 flags;
1911 __u8 pad[16];
1912};
1913
1914No flags are defined so far. The corresponding field must be 0.
1915
Jan Kiszka414fa982012-04-24 16:40:15 +02001916
Jan Kiszka0589ff62012-04-24 16:40:16 +020019174.71 KVM_CREATE_PIT2
1918
1919Capability: KVM_CAP_PIT2
1920Architectures: x86
1921Type: vm ioctl
1922Parameters: struct kvm_pit_config (in)
1923Returns: 0 on success, -1 on error
1924
1925Creates an in-kernel device model for the i8254 PIT. This call is only valid
1926after enabling in-kernel irqchip support via KVM_CREATE_IRQCHIP. The following
1927parameters have to be passed:
1928
1929struct kvm_pit_config {
1930 __u32 flags;
1931 __u32 pad[15];
1932};
1933
1934Valid flags are:
1935
1936#define KVM_PIT_SPEAKER_DUMMY 1 /* emulate speaker port stub */
1937
Jan Kiszkab6ddf052012-04-24 16:40:17 +02001938PIT timer interrupts may use a per-VM kernel thread for injection. If it
1939exists, this thread will have a name of the following pattern:
1940
1941kvm-pit/<owner-process-pid>
1942
1943When running a guest with elevated priorities, the scheduling parameters of
1944this thread may have to be adjusted accordingly.
1945
Jan Kiszka0589ff62012-04-24 16:40:16 +02001946This IOCTL replaces the obsolete KVM_CREATE_PIT.
1947
1948
19494.72 KVM_GET_PIT2
1950
1951Capability: KVM_CAP_PIT_STATE2
1952Architectures: x86
1953Type: vm ioctl
1954Parameters: struct kvm_pit_state2 (out)
1955Returns: 0 on success, -1 on error
1956
1957Retrieves the state of the in-kernel PIT model. Only valid after
1958KVM_CREATE_PIT2. The state is returned in the following structure:
1959
1960struct kvm_pit_state2 {
1961 struct kvm_pit_channel_state channels[3];
1962 __u32 flags;
1963 __u32 reserved[9];
1964};
1965
1966Valid flags are:
1967
1968/* disable PIT in HPET legacy mode */
1969#define KVM_PIT_FLAGS_HPET_LEGACY 0x00000001
1970
1971This IOCTL replaces the obsolete KVM_GET_PIT.
1972
1973
19744.73 KVM_SET_PIT2
1975
1976Capability: KVM_CAP_PIT_STATE2
1977Architectures: x86
1978Type: vm ioctl
1979Parameters: struct kvm_pit_state2 (in)
1980Returns: 0 on success, -1 on error
1981
1982Sets the state of the in-kernel PIT model. Only valid after KVM_CREATE_PIT2.
1983See KVM_GET_PIT2 for details on struct kvm_pit_state2.
1984
1985This IOCTL replaces the obsolete KVM_SET_PIT.
1986
1987
Benjamin Herrenschmidt5b747162012-04-26 19:43:42 +000019884.74 KVM_PPC_GET_SMMU_INFO
1989
1990Capability: KVM_CAP_PPC_GET_SMMU_INFO
1991Architectures: powerpc
1992Type: vm ioctl
1993Parameters: None
1994Returns: 0 on success, -1 on error
1995
1996This populates and returns a structure describing the features of
1997the "Server" class MMU emulation supported by KVM.
1998This can in turn be used by userspace to generate the appropariate
1999device-tree properties for the guest operating system.
2000
2001The structure contains some global informations, followed by an
2002array of supported segment page sizes:
2003
2004 struct kvm_ppc_smmu_info {
2005 __u64 flags;
2006 __u32 slb_size;
2007 __u32 pad;
2008 struct kvm_ppc_one_seg_page_size sps[KVM_PPC_PAGE_SIZES_MAX_SZ];
2009 };
2010
2011The supported flags are:
2012
2013 - KVM_PPC_PAGE_SIZES_REAL:
2014 When that flag is set, guest page sizes must "fit" the backing
2015 store page sizes. When not set, any page size in the list can
2016 be used regardless of how they are backed by userspace.
2017
2018 - KVM_PPC_1T_SEGMENTS
2019 The emulated MMU supports 1T segments in addition to the
2020 standard 256M ones.
2021
2022The "slb_size" field indicates how many SLB entries are supported
2023
2024The "sps" array contains 8 entries indicating the supported base
2025page sizes for a segment in increasing order. Each entry is defined
2026as follow:
2027
2028 struct kvm_ppc_one_seg_page_size {
2029 __u32 page_shift; /* Base page shift of segment (or 0) */
2030 __u32 slb_enc; /* SLB encoding for BookS */
2031 struct kvm_ppc_one_page_size enc[KVM_PPC_PAGE_SIZES_MAX_SZ];
2032 };
2033
2034An entry with a "page_shift" of 0 is unused. Because the array is
2035organized in increasing order, a lookup can stop when encoutering
2036such an entry.
2037
2038The "slb_enc" field provides the encoding to use in the SLB for the
2039page size. The bits are in positions such as the value can directly
2040be OR'ed into the "vsid" argument of the slbmte instruction.
2041
2042The "enc" array is a list which for each of those segment base page
2043size provides the list of supported actual page sizes (which can be
2044only larger or equal to the base page size), along with the
2045corresponding encoding in the hash PTE. Similarily, the array is
20468 entries sorted by increasing sizes and an entry with a "0" shift
2047is an empty entry and a terminator:
2048
2049 struct kvm_ppc_one_page_size {
2050 __u32 page_shift; /* Page shift (or 0) */
2051 __u32 pte_enc; /* Encoding in the HPTE (>>12) */
2052 };
2053
2054The "pte_enc" field provides a value that can OR'ed into the hash
2055PTE's RPN field (ie, it needs to be shifted left by 12 to OR it
2056into the hash PTE second double word).
2057
Alex Williamsonf36992e2012-06-29 09:56:16 -060020584.75 KVM_IRQFD
2059
2060Capability: KVM_CAP_IRQFD
2061Architectures: x86
2062Type: vm ioctl
2063Parameters: struct kvm_irqfd (in)
2064Returns: 0 on success, -1 on error
2065
2066Allows setting an eventfd to directly trigger a guest interrupt.
2067kvm_irqfd.fd specifies the file descriptor to use as the eventfd and
2068kvm_irqfd.gsi specifies the irqchip pin toggled by this event. When
2069an event is tiggered on the eventfd, an interrupt is injected into
2070the guest using the specified gsi pin. The irqfd is removed using
2071the KVM_IRQFD_FLAG_DEASSIGN flag, specifying both kvm_irqfd.fd
2072and kvm_irqfd.gsi.
2073
Alex Williamson7a844282012-09-21 11:58:03 -06002074With KVM_CAP_IRQFD_RESAMPLE, KVM_IRQFD supports a de-assert and notify
2075mechanism allowing emulation of level-triggered, irqfd-based
2076interrupts. When KVM_IRQFD_FLAG_RESAMPLE is set the user must pass an
2077additional eventfd in the kvm_irqfd.resamplefd field. When operating
2078in resample mode, posting of an interrupt through kvm_irq.fd asserts
2079the specified gsi in the irqchip. When the irqchip is resampled, such
2080as from an EOI, the gsi is de-asserted and the user is notifed via
2081kvm_irqfd.resamplefd. It is the user's responsibility to re-queue
2082the interrupt if the device making use of it still requires service.
2083Note that closing the resamplefd is not sufficient to disable the
2084irqfd. The KVM_IRQFD_FLAG_RESAMPLE is only necessary on assignment
2085and need not be specified with KVM_IRQFD_FLAG_DEASSIGN.
2086
Linus Torvalds5fecc9d2012-07-24 12:01:20 -070020874.76 KVM_PPC_ALLOCATE_HTAB
Paul Mackerras32fad282012-05-04 02:32:53 +00002088
2089Capability: KVM_CAP_PPC_ALLOC_HTAB
2090Architectures: powerpc
2091Type: vm ioctl
2092Parameters: Pointer to u32 containing hash table order (in/out)
2093Returns: 0 on success, -1 on error
2094
2095This requests the host kernel to allocate an MMU hash table for a
2096guest using the PAPR paravirtualization interface. This only does
2097anything if the kernel is configured to use the Book 3S HV style of
2098virtualization. Otherwise the capability doesn't exist and the ioctl
2099returns an ENOTTY error. The rest of this description assumes Book 3S
2100HV.
2101
2102There must be no vcpus running when this ioctl is called; if there
2103are, it will do nothing and return an EBUSY error.
2104
2105The parameter is a pointer to a 32-bit unsigned integer variable
2106containing the order (log base 2) of the desired size of the hash
2107table, which must be between 18 and 46. On successful return from the
2108ioctl, it will have been updated with the order of the hash table that
2109was allocated.
2110
2111If no hash table has been allocated when any vcpu is asked to run
2112(with the KVM_RUN ioctl), the host kernel will allocate a
2113default-sized hash table (16 MB).
2114
2115If this ioctl is called when a hash table has already been allocated,
2116the kernel will clear out the existing hash table (zero all HPTEs) and
2117return the hash table order in the parameter. (If the guest is using
2118the virtualized real-mode area (VRMA) facility, the kernel will
2119re-create the VMRA HPTEs on the next KVM_RUN of any vcpu.)
2120
Cornelia Huck416ad652012-10-02 16:25:37 +020021214.77 KVM_S390_INTERRUPT
2122
2123Capability: basic
2124Architectures: s390
2125Type: vm ioctl, vcpu ioctl
2126Parameters: struct kvm_s390_interrupt (in)
2127Returns: 0 on success, -1 on error
2128
2129Allows to inject an interrupt to the guest. Interrupts can be floating
2130(vm ioctl) or per cpu (vcpu ioctl), depending on the interrupt type.
2131
2132Interrupt parameters are passed via kvm_s390_interrupt:
2133
2134struct kvm_s390_interrupt {
2135 __u32 type;
2136 __u32 parm;
2137 __u64 parm64;
2138};
2139
2140type can be one of the following:
2141
2142KVM_S390_SIGP_STOP (vcpu) - sigp restart
2143KVM_S390_PROGRAM_INT (vcpu) - program check; code in parm
2144KVM_S390_SIGP_SET_PREFIX (vcpu) - sigp set prefix; prefix address in parm
2145KVM_S390_RESTART (vcpu) - restart
2146KVM_S390_INT_VIRTIO (vm) - virtio external interrupt; external interrupt
2147 parameters in parm and parm64
2148KVM_S390_INT_SERVICE (vm) - sclp external interrupt; sclp parameter in parm
2149KVM_S390_INT_EMERGENCY (vcpu) - sigp emergency; source cpu in parm
2150KVM_S390_INT_EXTERNAL_CALL (vcpu) - sigp external call; source cpu in parm
Cornelia Huckd8346b72012-12-20 15:32:08 +01002151KVM_S390_INT_IO(ai,cssid,ssid,schid) (vm) - compound value to indicate an
2152 I/O interrupt (ai - adapter interrupt; cssid,ssid,schid - subchannel);
2153 I/O interruption parameters in parm (subchannel) and parm64 (intparm,
2154 interruption subclass)
Cornelia Huck48a3e952012-12-20 15:32:09 +01002155KVM_S390_MCHK (vm, vcpu) - machine check interrupt; cr 14 bits in parm,
2156 machine check interrupt code in parm64 (note that
2157 machine checks needing further payload are not
2158 supported by this ioctl)
Cornelia Huck416ad652012-10-02 16:25:37 +02002159
2160Note that the vcpu ioctl is asynchronous to vcpu execution.
2161
Paul Mackerrasa2932922012-11-19 22:57:20 +000021624.78 KVM_PPC_GET_HTAB_FD
2163
2164Capability: KVM_CAP_PPC_HTAB_FD
2165Architectures: powerpc
2166Type: vm ioctl
2167Parameters: Pointer to struct kvm_get_htab_fd (in)
2168Returns: file descriptor number (>= 0) on success, -1 on error
2169
2170This returns a file descriptor that can be used either to read out the
2171entries in the guest's hashed page table (HPT), or to write entries to
2172initialize the HPT. The returned fd can only be written to if the
2173KVM_GET_HTAB_WRITE bit is set in the flags field of the argument, and
2174can only be read if that bit is clear. The argument struct looks like
2175this:
2176
2177/* For KVM_PPC_GET_HTAB_FD */
2178struct kvm_get_htab_fd {
2179 __u64 flags;
2180 __u64 start_index;
2181 __u64 reserved[2];
2182};
2183
2184/* Values for kvm_get_htab_fd.flags */
2185#define KVM_GET_HTAB_BOLTED_ONLY ((__u64)0x1)
2186#define KVM_GET_HTAB_WRITE ((__u64)0x2)
2187
2188The `start_index' field gives the index in the HPT of the entry at
2189which to start reading. It is ignored when writing.
2190
2191Reads on the fd will initially supply information about all
2192"interesting" HPT entries. Interesting entries are those with the
2193bolted bit set, if the KVM_GET_HTAB_BOLTED_ONLY bit is set, otherwise
2194all entries. When the end of the HPT is reached, the read() will
2195return. If read() is called again on the fd, it will start again from
2196the beginning of the HPT, but will only return HPT entries that have
2197changed since they were last read.
2198
2199Data read or written is structured as a header (8 bytes) followed by a
2200series of valid HPT entries (16 bytes) each. The header indicates how
2201many valid HPT entries there are and how many invalid entries follow
2202the valid entries. The invalid entries are not represented explicitly
2203in the stream. The header format is:
2204
2205struct kvm_get_htab_header {
2206 __u32 index;
2207 __u16 n_valid;
2208 __u16 n_invalid;
2209};
2210
2211Writes to the fd create HPT entries starting at the index given in the
2212header; first `n_valid' valid entries with contents from the data
2213written, then `n_invalid' invalid entries, invalidating any previously
2214valid entries found.
2215
Scott Wood852b6d52013-04-12 14:08:42 +000022164.79 KVM_CREATE_DEVICE
2217
2218Capability: KVM_CAP_DEVICE_CTRL
2219Type: vm ioctl
2220Parameters: struct kvm_create_device (in/out)
2221Returns: 0 on success, -1 on error
2222Errors:
2223 ENODEV: The device type is unknown or unsupported
2224 EEXIST: Device already created, and this type of device may not
2225 be instantiated multiple times
2226
2227 Other error conditions may be defined by individual device types or
2228 have their standard meanings.
2229
2230Creates an emulated device in the kernel. The file descriptor returned
2231in fd can be used with KVM_SET/GET/HAS_DEVICE_ATTR.
2232
2233If the KVM_CREATE_DEVICE_TEST flag is set, only test whether the
2234device type is supported (not necessarily whether it can be created
2235in the current vm).
2236
2237Individual devices should not define flags. Attributes should be used
2238for specifying any behavior that is not implied by the device type
2239number.
2240
2241struct kvm_create_device {
2242 __u32 type; /* in: KVM_DEV_TYPE_xxx */
2243 __u32 fd; /* out: device handle */
2244 __u32 flags; /* in: KVM_CREATE_DEVICE_xxx */
2245};
2246
22474.80 KVM_SET_DEVICE_ATTR/KVM_GET_DEVICE_ATTR
2248
2249Capability: KVM_CAP_DEVICE_CTRL
2250Type: device ioctl
2251Parameters: struct kvm_device_attr
2252Returns: 0 on success, -1 on error
2253Errors:
2254 ENXIO: The group or attribute is unknown/unsupported for this device
2255 EPERM: The attribute cannot (currently) be accessed this way
2256 (e.g. read-only attribute, or attribute that only makes
2257 sense when the device is in a different state)
2258
2259 Other error conditions may be defined by individual device types.
2260
2261Gets/sets a specified piece of device configuration and/or state. The
2262semantics are device-specific. See individual device documentation in
2263the "devices" directory. As with ONE_REG, the size of the data
2264transferred is defined by the particular attribute.
2265
2266struct kvm_device_attr {
2267 __u32 flags; /* no flags currently defined */
2268 __u32 group; /* device-defined */
2269 __u64 attr; /* group-defined */
2270 __u64 addr; /* userspace address of attr data */
2271};
2272
22734.81 KVM_HAS_DEVICE_ATTR
2274
2275Capability: KVM_CAP_DEVICE_CTRL
2276Type: device ioctl
2277Parameters: struct kvm_device_attr
2278Returns: 0 on success, -1 on error
2279Errors:
2280 ENXIO: The group or attribute is unknown/unsupported for this device
2281
2282Tests whether a device supports a particular attribute. A successful
2283return indicates the attribute is implemented. It does not necessarily
2284indicate that the attribute can be read or written in the device's
2285current state. "addr" is ignored.
Alex Williamsonf36992e2012-06-29 09:56:16 -06002286
Christoffer Dall749cf76c2013-01-20 18:28:06 -050022874.77 KVM_ARM_VCPU_INIT
2288
2289Capability: basic
Marc Zyngierd3845bf2013-04-02 17:46:31 +01002290Architectures: arm, arm64
Christoffer Dall749cf76c2013-01-20 18:28:06 -05002291Type: vcpu ioctl
2292Parameters: struct struct kvm_vcpu_init (in)
2293Returns: 0 on success; -1 on error
2294Errors:
2295  EINVAL:    the target is unknown, or the combination of features is invalid.
2296  ENOENT:    a features bit specified is unknown.
2297
2298This tells KVM what type of CPU to present to the guest, and what
2299optional features it should have.  This will cause a reset of the cpu
2300registers to their initial values.  If this is not called, KVM_RUN will
2301return ENOEXEC for that vcpu.
2302
2303Note that because some registers reflect machine topology, all vcpus
2304should be created before this ioctl is invoked.
2305
Marc Zyngieraa024c22013-01-20 18:28:13 -05002306Possible features:
2307 - KVM_ARM_VCPU_POWER_OFF: Starts the CPU in a power-off state.
2308 Depends on KVM_CAP_ARM_PSCI.
Marc Zyngierd3845bf2013-04-02 17:46:31 +01002309 - KVM_ARM_VCPU_EL1_32BIT: Starts the CPU in a 32bit mode.
2310 Depends on KVM_CAP_ARM_EL1_32BIT (arm64 only).
Marc Zyngieraa024c22013-01-20 18:28:13 -05002311
Christoffer Dall749cf76c2013-01-20 18:28:06 -05002312
23134.78 KVM_GET_REG_LIST
2314
2315Capability: basic
Marc Zyngierd3845bf2013-04-02 17:46:31 +01002316Architectures: arm, arm64
Christoffer Dall749cf76c2013-01-20 18:28:06 -05002317Type: vcpu ioctl
2318Parameters: struct kvm_reg_list (in/out)
2319Returns: 0 on success; -1 on error
2320Errors:
2321  E2BIG:     the reg index list is too big to fit in the array specified by
2322             the user (the number required will be written into n).
2323
2324struct kvm_reg_list {
2325 __u64 n; /* number of registers in reg[] */
2326 __u64 reg[0];
2327};
2328
2329This ioctl returns the guest registers that are supported for the
2330KVM_GET_ONE_REG/KVM_SET_ONE_REG calls.
2331
2332
Christoffer Dallc4ad31f2013-09-23 14:55:56 -070023334.85 KVM_ARM_SET_DEVICE_ADDR (deprecated)
Christoffer Dall3401d5462013-01-23 13:18:04 -05002334
2335Capability: KVM_CAP_ARM_SET_DEVICE_ADDR
Marc Zyngierd3845bf2013-04-02 17:46:31 +01002336Architectures: arm, arm64
Christoffer Dall3401d5462013-01-23 13:18:04 -05002337Type: vm ioctl
2338Parameters: struct kvm_arm_device_address (in)
2339Returns: 0 on success, -1 on error
2340Errors:
2341 ENODEV: The device id is unknown
2342 ENXIO: Device not supported on current system
2343 EEXIST: Address already set
2344 E2BIG: Address outside guest physical address space
Christoffer Dall330690c2013-01-21 19:36:13 -05002345 EBUSY: Address overlaps with other device range
Christoffer Dall3401d5462013-01-23 13:18:04 -05002346
2347struct kvm_arm_device_addr {
2348 __u64 id;
2349 __u64 addr;
2350};
2351
2352Specify a device address in the guest's physical address space where guests
2353can access emulated or directly exposed devices, which the host kernel needs
2354to know about. The id field is an architecture specific identifier for a
2355specific device.
2356
Marc Zyngierd3845bf2013-04-02 17:46:31 +01002357ARM/arm64 divides the id field into two parts, a device id and an
2358address type id specific to the individual device.
Christoffer Dall3401d5462013-01-23 13:18:04 -05002359
2360  bits: | 63 ... 32 | 31 ... 16 | 15 ... 0 |
2361 field: | 0x00000000 | device id | addr type id |
2362
Marc Zyngierd3845bf2013-04-02 17:46:31 +01002363ARM/arm64 currently only require this when using the in-kernel GIC
2364support for the hardware VGIC features, using KVM_ARM_DEVICE_VGIC_V2
2365as the device id. When setting the base address for the guest's
2366mapping of the VGIC virtual CPU and distributor interface, the ioctl
2367must be called after calling KVM_CREATE_IRQCHIP, but before calling
2368KVM_RUN on any of the VCPUs. Calling this ioctl twice for any of the
2369base addresses will return -EEXIST.
Christoffer Dall3401d5462013-01-23 13:18:04 -05002370
Christoffer Dallc4ad31f2013-09-23 14:55:56 -07002371Note, this IOCTL is deprecated and the more flexible SET/GET_DEVICE_ATTR API
2372should be used instead.
2373
2374
23754.86 KVM_PPC_RTAS_DEFINE_TOKEN
Michael Ellerman8e591cb2013-04-17 20:30:00 +00002376
2377Capability: KVM_CAP_PPC_RTAS
2378Architectures: ppc
2379Type: vm ioctl
2380Parameters: struct kvm_rtas_token_args
2381Returns: 0 on success, -1 on error
2382
2383Defines a token value for a RTAS (Run Time Abstraction Services)
2384service in order to allow it to be handled in the kernel. The
2385argument struct gives the name of the service, which must be the name
2386of a service that has a kernel-side implementation. If the token
2387value is non-zero, it will be associated with that service, and
2388subsequent RTAS calls by the guest specifying that token will be
2389handled by the kernel. If the token value is 0, then any token
2390associated with the service will be forgotten, and subsequent RTAS
2391calls by the guest for that service will be passed to userspace to be
2392handled.
2393
Christoffer Dall3401d5462013-01-23 13:18:04 -05002394
Avi Kivity9c1b96e2009-06-09 12:37:58 +030023955. The kvm_run structure
Jan Kiszka414fa982012-04-24 16:40:15 +02002396------------------------
Avi Kivity9c1b96e2009-06-09 12:37:58 +03002397
2398Application code obtains a pointer to the kvm_run structure by
2399mmap()ing a vcpu fd. From that point, application code can control
2400execution by changing fields in kvm_run prior to calling the KVM_RUN
2401ioctl, and obtain information about the reason KVM_RUN returned by
2402looking up structure members.
2403
2404struct kvm_run {
2405 /* in */
2406 __u8 request_interrupt_window;
2407
2408Request that KVM_RUN return when it becomes possible to inject external
2409interrupts into the guest. Useful in conjunction with KVM_INTERRUPT.
2410
2411 __u8 padding1[7];
2412
2413 /* out */
2414 __u32 exit_reason;
2415
2416When KVM_RUN has returned successfully (return value 0), this informs
2417application code why KVM_RUN has returned. Allowable values for this
2418field are detailed below.
2419
2420 __u8 ready_for_interrupt_injection;
2421
2422If request_interrupt_window has been specified, this field indicates
2423an interrupt can be injected now with KVM_INTERRUPT.
2424
2425 __u8 if_flag;
2426
2427The value of the current interrupt flag. Only valid if in-kernel
2428local APIC is not used.
2429
2430 __u8 padding2[2];
2431
2432 /* in (pre_kvm_run), out (post_kvm_run) */
2433 __u64 cr8;
2434
2435The value of the cr8 register. Only valid if in-kernel local APIC is
2436not used. Both input and output.
2437
2438 __u64 apic_base;
2439
2440The value of the APIC BASE msr. Only valid if in-kernel local
2441APIC is not used. Both input and output.
2442
2443 union {
2444 /* KVM_EXIT_UNKNOWN */
2445 struct {
2446 __u64 hardware_exit_reason;
2447 } hw;
2448
2449If exit_reason is KVM_EXIT_UNKNOWN, the vcpu has exited due to unknown
2450reasons. Further architecture-specific information is available in
2451hardware_exit_reason.
2452
2453 /* KVM_EXIT_FAIL_ENTRY */
2454 struct {
2455 __u64 hardware_entry_failure_reason;
2456 } fail_entry;
2457
2458If exit_reason is KVM_EXIT_FAIL_ENTRY, the vcpu could not be run due
2459to unknown reasons. Further architecture-specific information is
2460available in hardware_entry_failure_reason.
2461
2462 /* KVM_EXIT_EXCEPTION */
2463 struct {
2464 __u32 exception;
2465 __u32 error_code;
2466 } ex;
2467
2468Unused.
2469
2470 /* KVM_EXIT_IO */
2471 struct {
2472#define KVM_EXIT_IO_IN 0
2473#define KVM_EXIT_IO_OUT 1
2474 __u8 direction;
2475 __u8 size; /* bytes */
2476 __u16 port;
2477 __u32 count;
2478 __u64 data_offset; /* relative to kvm_run start */
2479 } io;
2480
Wu Fengguang2044892d2009-12-24 09:04:16 +08002481If exit_reason is KVM_EXIT_IO, then the vcpu has
Avi Kivity9c1b96e2009-06-09 12:37:58 +03002482executed a port I/O instruction which could not be satisfied by kvm.
2483data_offset describes where the data is located (KVM_EXIT_IO_OUT) or
2484where kvm expects application code to place the data for the next
Wu Fengguang2044892d2009-12-24 09:04:16 +08002485KVM_RUN invocation (KVM_EXIT_IO_IN). Data format is a packed array.
Avi Kivity9c1b96e2009-06-09 12:37:58 +03002486
2487 struct {
2488 struct kvm_debug_exit_arch arch;
2489 } debug;
2490
2491Unused.
2492
2493 /* KVM_EXIT_MMIO */
2494 struct {
2495 __u64 phys_addr;
2496 __u8 data[8];
2497 __u32 len;
2498 __u8 is_write;
2499 } mmio;
2500
Wu Fengguang2044892d2009-12-24 09:04:16 +08002501If exit_reason is KVM_EXIT_MMIO, then the vcpu has
Avi Kivity9c1b96e2009-06-09 12:37:58 +03002502executed a memory-mapped I/O instruction which could not be satisfied
2503by kvm. The 'data' member contains the written data if 'is_write' is
2504true, and should be filled by application code otherwise.
2505
Alexander Graf1c810632013-01-04 18:12:48 +01002506NOTE: For KVM_EXIT_IO, KVM_EXIT_MMIO, KVM_EXIT_OSI, KVM_EXIT_DCR,
2507 KVM_EXIT_PAPR and KVM_EXIT_EPR the corresponding
Alexander Grafad0a0482010-03-24 21:48:30 +01002508operations are complete (and guest state is consistent) only after userspace
2509has re-entered the kernel with KVM_RUN. The kernel side will first finish
Marcelo Tosatti67961342010-02-13 16:10:26 -02002510incomplete operations and then check for pending signals. Userspace
2511can re-enter the guest with an unmasked signal pending to complete
2512pending operations.
2513
Avi Kivity9c1b96e2009-06-09 12:37:58 +03002514 /* KVM_EXIT_HYPERCALL */
2515 struct {
2516 __u64 nr;
2517 __u64 args[6];
2518 __u64 ret;
2519 __u32 longmode;
2520 __u32 pad;
2521 } hypercall;
2522
Avi Kivity647dc492010-04-01 14:39:21 +03002523Unused. This was once used for 'hypercall to userspace'. To implement
2524such functionality, use KVM_EXIT_IO (x86) or KVM_EXIT_MMIO (all except s390).
2525Note KVM_EXIT_IO is significantly faster than KVM_EXIT_MMIO.
Avi Kivity9c1b96e2009-06-09 12:37:58 +03002526
2527 /* KVM_EXIT_TPR_ACCESS */
2528 struct {
2529 __u64 rip;
2530 __u32 is_write;
2531 __u32 pad;
2532 } tpr_access;
2533
2534To be documented (KVM_TPR_ACCESS_REPORTING).
2535
2536 /* KVM_EXIT_S390_SIEIC */
2537 struct {
2538 __u8 icptcode;
2539 __u64 mask; /* psw upper half */
2540 __u64 addr; /* psw lower half */
2541 __u16 ipa;
2542 __u32 ipb;
2543 } s390_sieic;
2544
2545s390 specific.
2546
2547 /* KVM_EXIT_S390_RESET */
2548#define KVM_S390_RESET_POR 1
2549#define KVM_S390_RESET_CLEAR 2
2550#define KVM_S390_RESET_SUBSYSTEM 4
2551#define KVM_S390_RESET_CPU_INIT 8
2552#define KVM_S390_RESET_IPL 16
2553 __u64 s390_reset_flags;
2554
2555s390 specific.
2556
Carsten Ottee168bf82012-01-04 10:25:22 +01002557 /* KVM_EXIT_S390_UCONTROL */
2558 struct {
2559 __u64 trans_exc_code;
2560 __u32 pgm_code;
2561 } s390_ucontrol;
2562
2563s390 specific. A page fault has occurred for a user controlled virtual
2564machine (KVM_VM_S390_UNCONTROL) on it's host page table that cannot be
2565resolved by the kernel.
2566The program code and the translation exception code that were placed
2567in the cpu's lowcore are presented here as defined by the z Architecture
2568Principles of Operation Book in the Chapter for Dynamic Address Translation
2569(DAT)
2570
Avi Kivity9c1b96e2009-06-09 12:37:58 +03002571 /* KVM_EXIT_DCR */
2572 struct {
2573 __u32 dcrn;
2574 __u32 data;
2575 __u8 is_write;
2576 } dcr;
2577
2578powerpc specific.
2579
Alexander Grafad0a0482010-03-24 21:48:30 +01002580 /* KVM_EXIT_OSI */
2581 struct {
2582 __u64 gprs[32];
2583 } osi;
2584
2585MOL uses a special hypercall interface it calls 'OSI'. To enable it, we catch
2586hypercalls and exit with this exit struct that contains all the guest gprs.
2587
2588If exit_reason is KVM_EXIT_OSI, then the vcpu has triggered such a hypercall.
2589Userspace can now handle the hypercall and when it's done modify the gprs as
2590necessary. Upon guest entry all guest GPRs will then be replaced by the values
2591in this struct.
2592
Paul Mackerrasde56a942011-06-29 00:21:34 +00002593 /* KVM_EXIT_PAPR_HCALL */
2594 struct {
2595 __u64 nr;
2596 __u64 ret;
2597 __u64 args[9];
2598 } papr_hcall;
2599
2600This is used on 64-bit PowerPC when emulating a pSeries partition,
2601e.g. with the 'pseries' machine type in qemu. It occurs when the
2602guest does a hypercall using the 'sc 1' instruction. The 'nr' field
2603contains the hypercall number (from the guest R3), and 'args' contains
2604the arguments (from the guest R4 - R12). Userspace should put the
2605return code in 'ret' and any extra returned values in args[].
2606The possible hypercalls are defined in the Power Architecture Platform
2607Requirements (PAPR) document available from www.power.org (free
2608developer registration required to access it).
2609
Cornelia Huckfa6b7fe2012-12-20 15:32:12 +01002610 /* KVM_EXIT_S390_TSCH */
2611 struct {
2612 __u16 subchannel_id;
2613 __u16 subchannel_nr;
2614 __u32 io_int_parm;
2615 __u32 io_int_word;
2616 __u32 ipb;
2617 __u8 dequeued;
2618 } s390_tsch;
2619
2620s390 specific. This exit occurs when KVM_CAP_S390_CSS_SUPPORT has been enabled
2621and TEST SUBCHANNEL was intercepted. If dequeued is set, a pending I/O
2622interrupt for the target subchannel has been dequeued and subchannel_id,
2623subchannel_nr, io_int_parm and io_int_word contain the parameters for that
2624interrupt. ipb is needed for instruction parameter decoding.
2625
Alexander Graf1c810632013-01-04 18:12:48 +01002626 /* KVM_EXIT_EPR */
2627 struct {
2628 __u32 epr;
2629 } epr;
2630
2631On FSL BookE PowerPC chips, the interrupt controller has a fast patch
2632interrupt acknowledge path to the core. When the core successfully
2633delivers an interrupt, it automatically populates the EPR register with
2634the interrupt vector number and acknowledges the interrupt inside
2635the interrupt controller.
2636
2637In case the interrupt controller lives in user space, we need to do
2638the interrupt acknowledge cycle through it to fetch the next to be
2639delivered interrupt vector using this exit.
2640
2641It gets triggered whenever both KVM_CAP_PPC_EPR are enabled and an
2642external interrupt has just been delivered into the guest. User space
2643should put the acknowledged interrupt vector into the 'epr' field.
2644
Anup Patel7b0aa852014-04-29 11:24:19 +05302645 /* KVM_EXIT_SYSTEM_EVENT */
2646 struct {
2647#define KVM_SYSTEM_EVENT_SHUTDOWN 1
2648#define KVM_SYSTEM_EVENT_RESET 2
2649 __u32 type;
2650 __u64 flags;
2651 } system_event;
2652
2653If exit_reason is KVM_EXIT_SYSTEM_EVENT then the vcpu has triggered
2654a system-level event using some architecture specific mechanism (hypercall
2655or some special instruction). In case of ARM/ARM64, this is triggered using
2656HVC instruction based PSCI call from the vcpu. The 'type' field describes
2657the system-level event type. The 'flags' field describes architecture
2658specific flags for the system-level event.
2659
Avi Kivity9c1b96e2009-06-09 12:37:58 +03002660 /* Fix the size of the union. */
2661 char padding[256];
2662 };
Christian Borntraegerb9e5dc82012-01-11 11:20:30 +01002663
2664 /*
2665 * shared registers between kvm and userspace.
2666 * kvm_valid_regs specifies the register classes set by the host
2667 * kvm_dirty_regs specified the register classes dirtied by userspace
2668 * struct kvm_sync_regs is architecture specific, as well as the
2669 * bits for kvm_valid_regs and kvm_dirty_regs
2670 */
2671 __u64 kvm_valid_regs;
2672 __u64 kvm_dirty_regs;
2673 union {
2674 struct kvm_sync_regs regs;
2675 char padding[1024];
2676 } s;
2677
2678If KVM_CAP_SYNC_REGS is defined, these fields allow userspace to access
2679certain guest registers without having to call SET/GET_*REGS. Thus we can
2680avoid some system call overhead if userspace has to handle the exit.
2681Userspace can query the validity of the structure by checking
2682kvm_valid_regs for specific bits. These bits are architecture specific
2683and usually define the validity of a groups of registers. (e.g. one bit
2684 for general purpose registers)
2685
Avi Kivity9c1b96e2009-06-09 12:37:58 +03002686};
Alexander Graf821246a2011-08-31 10:58:55 +02002687
Jan Kiszka414fa982012-04-24 16:40:15 +02002688
Borislav Petkovb4fe3052013-09-22 16:44:50 +020026894.81 KVM_GET_EMULATED_CPUID
2690
2691Capability: KVM_CAP_EXT_EMUL_CPUID
2692Architectures: x86
2693Type: system ioctl
2694Parameters: struct kvm_cpuid2 (in/out)
2695Returns: 0 on success, -1 on error
2696
2697struct kvm_cpuid2 {
2698 __u32 nent;
2699 __u32 flags;
2700 struct kvm_cpuid_entry2 entries[0];
2701};
2702
2703The member 'flags' is used for passing flags from userspace.
2704
2705#define KVM_CPUID_FLAG_SIGNIFCANT_INDEX BIT(0)
2706#define KVM_CPUID_FLAG_STATEFUL_FUNC BIT(1)
2707#define KVM_CPUID_FLAG_STATE_READ_NEXT BIT(2)
2708
2709struct kvm_cpuid_entry2 {
2710 __u32 function;
2711 __u32 index;
2712 __u32 flags;
2713 __u32 eax;
2714 __u32 ebx;
2715 __u32 ecx;
2716 __u32 edx;
2717 __u32 padding[3];
2718};
2719
2720This ioctl returns x86 cpuid features which are emulated by
2721kvm.Userspace can use the information returned by this ioctl to query
2722which features are emulated by kvm instead of being present natively.
2723
2724Userspace invokes KVM_GET_EMULATED_CPUID by passing a kvm_cpuid2
2725structure with the 'nent' field indicating the number of entries in
2726the variable-size array 'entries'. If the number of entries is too low
2727to describe the cpu capabilities, an error (E2BIG) is returned. If the
2728number is too high, the 'nent' field is adjusted and an error (ENOMEM)
2729is returned. If the number is just right, the 'nent' field is adjusted
2730to the number of valid entries in the 'entries' array, which is then
2731filled.
2732
2733The entries returned are the set CPUID bits of the respective features
2734which kvm emulates, as returned by the CPUID instruction, with unknown
2735or unsupported feature bits cleared.
2736
2737Features like x2apic, for example, may not be present in the host cpu
2738but are exposed by kvm in KVM_GET_SUPPORTED_CPUID because they can be
2739emulated efficiently and thus not included here.
2740
2741The fields in each entry are defined as follows:
2742
2743 function: the eax value used to obtain the entry
2744 index: the ecx value used to obtain the entry (for entries that are
2745 affected by ecx)
2746 flags: an OR of zero or more of the following:
2747 KVM_CPUID_FLAG_SIGNIFCANT_INDEX:
2748 if the index field is valid
2749 KVM_CPUID_FLAG_STATEFUL_FUNC:
2750 if cpuid for this function returns different values for successive
2751 invocations; there will be several entries with the same function,
2752 all with this flag set
2753 KVM_CPUID_FLAG_STATE_READ_NEXT:
2754 for KVM_CPUID_FLAG_STATEFUL_FUNC entries, set if this entry is
2755 the first entry to be read by a cpu
2756 eax, ebx, ecx, edx: the values returned by the cpuid instruction for
2757 this function/index combination
2758
2759
Alexander Graf821246a2011-08-31 10:58:55 +020027606. Capabilities that can be enabled
Jan Kiszka414fa982012-04-24 16:40:15 +02002761-----------------------------------
Alexander Graf821246a2011-08-31 10:58:55 +02002762
2763There are certain capabilities that change the behavior of the virtual CPU when
2764enabled. To enable them, please see section 4.37. Below you can find a list of
2765capabilities and what their effect on the vCPU is when enabling them.
2766
2767The following information is provided along with the description:
2768
2769 Architectures: which instruction set architectures provide this ioctl.
2770 x86 includes both i386 and x86_64.
2771
2772 Parameters: what parameters are accepted by the capability.
2773
2774 Returns: the return value. General error numbers (EBADF, ENOMEM, EINVAL)
2775 are not detailed, but errors with specific meanings are.
2776
Jan Kiszka414fa982012-04-24 16:40:15 +02002777
Alexander Graf821246a2011-08-31 10:58:55 +020027786.1 KVM_CAP_PPC_OSI
2779
2780Architectures: ppc
2781Parameters: none
2782Returns: 0 on success; -1 on error
2783
2784This capability enables interception of OSI hypercalls that otherwise would
2785be treated as normal system calls to be injected into the guest. OSI hypercalls
2786were invented by Mac-on-Linux to have a standardized communication mechanism
2787between the guest and the host.
2788
2789When this capability is enabled, KVM_EXIT_OSI can occur.
2790
Jan Kiszka414fa982012-04-24 16:40:15 +02002791
Alexander Graf821246a2011-08-31 10:58:55 +020027926.2 KVM_CAP_PPC_PAPR
2793
2794Architectures: ppc
2795Parameters: none
2796Returns: 0 on success; -1 on error
2797
2798This capability enables interception of PAPR hypercalls. PAPR hypercalls are
2799done using the hypercall instruction "sc 1".
2800
2801It also sets the guest privilege level to "supervisor" mode. Usually the guest
2802runs in "hypervisor" privilege mode with a few missing features.
2803
2804In addition to the above, it changes the semantics of SDR1. In this mode, the
2805HTAB address part of SDR1 contains an HVA instead of a GPA, as PAPR keeps the
2806HTAB invisible to the guest.
2807
2808When this capability is enabled, KVM_EXIT_PAPR_HCALL can occur.
Scott Wooddc83b8b2011-08-18 15:25:21 -05002809
Jan Kiszka414fa982012-04-24 16:40:15 +02002810
Scott Wooddc83b8b2011-08-18 15:25:21 -050028116.3 KVM_CAP_SW_TLB
2812
2813Architectures: ppc
2814Parameters: args[0] is the address of a struct kvm_config_tlb
2815Returns: 0 on success; -1 on error
2816
2817struct kvm_config_tlb {
2818 __u64 params;
2819 __u64 array;
2820 __u32 mmu_type;
2821 __u32 array_len;
2822};
2823
2824Configures the virtual CPU's TLB array, establishing a shared memory area
2825between userspace and KVM. The "params" and "array" fields are userspace
2826addresses of mmu-type-specific data structures. The "array_len" field is an
2827safety mechanism, and should be set to the size in bytes of the memory that
2828userspace has reserved for the array. It must be at least the size dictated
2829by "mmu_type" and "params".
2830
2831While KVM_RUN is active, the shared region is under control of KVM. Its
2832contents are undefined, and any modification by userspace results in
2833boundedly undefined behavior.
2834
2835On return from KVM_RUN, the shared region will reflect the current state of
2836the guest's TLB. If userspace makes any changes, it must call KVM_DIRTY_TLB
2837to tell KVM which entries have been changed, prior to calling KVM_RUN again
2838on this vcpu.
2839
2840For mmu types KVM_MMU_FSL_BOOKE_NOHV and KVM_MMU_FSL_BOOKE_HV:
2841 - The "params" field is of type "struct kvm_book3e_206_tlb_params".
2842 - The "array" field points to an array of type "struct
2843 kvm_book3e_206_tlb_entry".
2844 - The array consists of all entries in the first TLB, followed by all
2845 entries in the second TLB.
2846 - Within a TLB, entries are ordered first by increasing set number. Within a
2847 set, entries are ordered by way (increasing ESEL).
2848 - The hash for determining set number in TLB0 is: (MAS2 >> 12) & (num_sets - 1)
2849 where "num_sets" is the tlb_sizes[] value divided by the tlb_ways[] value.
2850 - The tsize field of mas1 shall be set to 4K on TLB0, even though the
2851 hardware ignores this value for TLB0.
Cornelia Huckfa6b7fe2012-12-20 15:32:12 +01002852
28536.4 KVM_CAP_S390_CSS_SUPPORT
2854
2855Architectures: s390
2856Parameters: none
2857Returns: 0 on success; -1 on error
2858
2859This capability enables support for handling of channel I/O instructions.
2860
2861TEST PENDING INTERRUPTION and the interrupt portion of TEST SUBCHANNEL are
2862handled in-kernel, while the other I/O instructions are passed to userspace.
2863
2864When this capability is enabled, KVM_EXIT_S390_TSCH will occur on TEST
2865SUBCHANNEL intercepts.
Alexander Graf1c810632013-01-04 18:12:48 +01002866
28676.5 KVM_CAP_PPC_EPR
2868
2869Architectures: ppc
2870Parameters: args[0] defines whether the proxy facility is active
2871Returns: 0 on success; -1 on error
2872
2873This capability enables or disables the delivery of interrupts through the
2874external proxy facility.
2875
2876When enabled (args[0] != 0), every time the guest gets an external interrupt
2877delivered, it automatically exits into user space with a KVM_EXIT_EPR exit
2878to receive the topmost interrupt vector.
2879
2880When disabled (args[0] == 0), behavior is as if this facility is unsupported.
2881
2882When this capability is enabled, KVM_EXIT_EPR can occur.
Scott Woodeb1e4f42013-04-12 14:08:47 +00002883
28846.6 KVM_CAP_IRQ_MPIC
2885
2886Architectures: ppc
2887Parameters: args[0] is the MPIC device fd
2888 args[1] is the MPIC CPU number for this vcpu
2889
2890This capability connects the vcpu to an in-kernel MPIC device.
Paul Mackerras5975a2e2013-04-27 00:28:37 +00002891
28926.7 KVM_CAP_IRQ_XICS
2893
2894Architectures: ppc
2895Parameters: args[0] is the XICS device fd
2896 args[1] is the XICS CPU number (server ID) for this vcpu
2897
2898This capability connects the vcpu to an in-kernel XICS device.