diff options
Diffstat (limited to 'Documentation/virtual/kvm/api.txt')
-rw-r--r-- | Documentation/virtual/kvm/api.txt | 172 |
1 files changed, 164 insertions, 8 deletions
diff --git a/Documentation/virtual/kvm/api.txt b/Documentation/virtual/kvm/api.txt index 42542eb802ca..b0e4b9cd6a66 100644 --- a/Documentation/virtual/kvm/api.txt +++ b/Documentation/virtual/kvm/api.txt | |||
@@ -180,6 +180,19 @@ KVM_CHECK_EXTENSION ioctl() to determine the value for max_vcpus at run-time. | |||
180 | If the KVM_CAP_NR_VCPUS does not exist, you should assume that max_vcpus is 4 | 180 | If the KVM_CAP_NR_VCPUS does not exist, you should assume that max_vcpus is 4 |
181 | cpus max. | 181 | cpus max. |
182 | 182 | ||
183 | On powerpc using book3s_hv mode, the vcpus are mapped onto virtual | ||
184 | threads in one or more virtual CPU cores. (This is because the | ||
185 | hardware requires all the hardware threads in a CPU core to be in the | ||
186 | same partition.) The KVM_CAP_PPC_SMT capability indicates the number | ||
187 | of vcpus per virtual core (vcore). The vcore id is obtained by | ||
188 | dividing the vcpu id by the number of vcpus per vcore. The vcpus in a | ||
189 | given vcore will always be in the same physical core as each other | ||
190 | (though that might be a different physical core from time to time). | ||
191 | Userspace can control the threading (SMT) mode of the guest by its | ||
192 | allocation of vcpu ids. For example, if userspace wants | ||
193 | single-threaded guest vcpus, it should make all vcpu ids be a multiple | ||
194 | of the number of vcpus per vcore. | ||
195 | |||
183 | 4.8 KVM_GET_DIRTY_LOG (vm ioctl) | 196 | 4.8 KVM_GET_DIRTY_LOG (vm ioctl) |
184 | 197 | ||
185 | Capability: basic | 198 | Capability: basic |
@@ -1143,15 +1156,10 @@ Assigns an IRQ to a passed-through device. | |||
1143 | 1156 | ||
1144 | struct kvm_assigned_irq { | 1157 | struct kvm_assigned_irq { |
1145 | __u32 assigned_dev_id; | 1158 | __u32 assigned_dev_id; |
1146 | __u32 host_irq; | 1159 | __u32 host_irq; /* ignored (legacy field) */ |
1147 | __u32 guest_irq; | 1160 | __u32 guest_irq; |
1148 | __u32 flags; | 1161 | __u32 flags; |
1149 | union { | 1162 | union { |
1150 | struct { | ||
1151 | __u32 addr_lo; | ||
1152 | __u32 addr_hi; | ||
1153 | __u32 data; | ||
1154 | } guest_msi; | ||
1155 | __u32 reserved[12]; | 1163 | __u32 reserved[12]; |
1156 | }; | 1164 | }; |
1157 | }; | 1165 | }; |
@@ -1239,8 +1247,10 @@ Type: vm ioctl | |||
1239 | Parameters: struct kvm_assigned_msix_nr (in) | 1247 | Parameters: struct kvm_assigned_msix_nr (in) |
1240 | Returns: 0 on success, -1 on error | 1248 | Returns: 0 on success, -1 on error |
1241 | 1249 | ||
1242 | Set the number of MSI-X interrupts for an assigned device. This service can | 1250 | Set the number of MSI-X interrupts for an assigned device. The number is |
1243 | only be called once in the lifetime of an assigned device. | 1251 | reset again by terminating the MSI-X assignment of the device via |
1252 | KVM_DEASSIGN_DEV_IRQ. Calling this service more than once at any earlier | ||
1253 | point will fail. | ||
1244 | 1254 | ||
1245 | struct kvm_assigned_msix_nr { | 1255 | struct kvm_assigned_msix_nr { |
1246 | __u32 assigned_dev_id; | 1256 | __u32 assigned_dev_id; |
@@ -1291,6 +1301,135 @@ Returns the tsc frequency of the guest. The unit of the return value is | |||
1291 | KHz. If the host has unstable tsc this ioctl returns -EIO instead as an | 1301 | KHz. If the host has unstable tsc this ioctl returns -EIO instead as an |
1292 | error. | 1302 | error. |
1293 | 1303 | ||
1304 | 4.56 KVM_GET_LAPIC | ||
1305 | |||
1306 | Capability: KVM_CAP_IRQCHIP | ||
1307 | Architectures: x86 | ||
1308 | Type: vcpu ioctl | ||
1309 | Parameters: struct kvm_lapic_state (out) | ||
1310 | Returns: 0 on success, -1 on error | ||
1311 | |||
1312 | #define KVM_APIC_REG_SIZE 0x400 | ||
1313 | struct kvm_lapic_state { | ||
1314 | char regs[KVM_APIC_REG_SIZE]; | ||
1315 | }; | ||
1316 | |||
1317 | Reads the Local APIC registers and copies them into the input argument. The | ||
1318 | data format and layout are the same as documented in the architecture manual. | ||
1319 | |||
1320 | 4.57 KVM_SET_LAPIC | ||
1321 | |||
1322 | Capability: KVM_CAP_IRQCHIP | ||
1323 | Architectures: x86 | ||
1324 | Type: vcpu ioctl | ||
1325 | Parameters: struct kvm_lapic_state (in) | ||
1326 | Returns: 0 on success, -1 on error | ||
1327 | |||
1328 | #define KVM_APIC_REG_SIZE 0x400 | ||
1329 | struct kvm_lapic_state { | ||
1330 | char regs[KVM_APIC_REG_SIZE]; | ||
1331 | }; | ||
1332 | |||
1333 | Copies the input argument into the the Local APIC registers. The data format | ||
1334 | and layout are the same as documented in the architecture manual. | ||
1335 | |||
1336 | 4.58 KVM_IOEVENTFD | ||
1337 | |||
1338 | Capability: KVM_CAP_IOEVENTFD | ||
1339 | Architectures: all | ||
1340 | Type: vm ioctl | ||
1341 | Parameters: struct kvm_ioeventfd (in) | ||
1342 | Returns: 0 on success, !0 on error | ||
1343 | |||
1344 | This ioctl attaches or detaches an ioeventfd to a legal pio/mmio address | ||
1345 | within the guest. A guest write in the registered address will signal the | ||
1346 | provided event instead of triggering an exit. | ||
1347 | |||
1348 | struct kvm_ioeventfd { | ||
1349 | __u64 datamatch; | ||
1350 | __u64 addr; /* legal pio/mmio address */ | ||
1351 | __u32 len; /* 1, 2, 4, or 8 bytes */ | ||
1352 | __s32 fd; | ||
1353 | __u32 flags; | ||
1354 | __u8 pad[36]; | ||
1355 | }; | ||
1356 | |||
1357 | The following flags are defined: | ||
1358 | |||
1359 | #define KVM_IOEVENTFD_FLAG_DATAMATCH (1 << kvm_ioeventfd_flag_nr_datamatch) | ||
1360 | #define KVM_IOEVENTFD_FLAG_PIO (1 << kvm_ioeventfd_flag_nr_pio) | ||
1361 | #define KVM_IOEVENTFD_FLAG_DEASSIGN (1 << kvm_ioeventfd_flag_nr_deassign) | ||
1362 | |||
1363 | If datamatch flag is set, the event will be signaled only if the written value | ||
1364 | to the registered address is equal to datamatch in struct kvm_ioeventfd. | ||
1365 | |||
1366 | 4.62 KVM_CREATE_SPAPR_TCE | ||
1367 | |||
1368 | Capability: KVM_CAP_SPAPR_TCE | ||
1369 | Architectures: powerpc | ||
1370 | Type: vm ioctl | ||
1371 | Parameters: struct kvm_create_spapr_tce (in) | ||
1372 | Returns: file descriptor for manipulating the created TCE table | ||
1373 | |||
1374 | This creates a virtual TCE (translation control entry) table, which | ||
1375 | is an IOMMU for PAPR-style virtual I/O. It is used to translate | ||
1376 | logical addresses used in virtual I/O into guest physical addresses, | ||
1377 | and provides a scatter/gather capability for PAPR virtual I/O. | ||
1378 | |||
1379 | /* for KVM_CAP_SPAPR_TCE */ | ||
1380 | struct kvm_create_spapr_tce { | ||
1381 | __u64 liobn; | ||
1382 | __u32 window_size; | ||
1383 | }; | ||
1384 | |||
1385 | The liobn field gives the logical IO bus number for which to create a | ||
1386 | TCE table. The window_size field specifies the size of the DMA window | ||
1387 | which this TCE table will translate - the table will contain one 64 | ||
1388 | bit TCE entry for every 4kiB of the DMA window. | ||
1389 | |||
1390 | When the guest issues an H_PUT_TCE hcall on a liobn for which a TCE | ||
1391 | table has been created using this ioctl(), the kernel will handle it | ||
1392 | in real mode, updating the TCE table. H_PUT_TCE calls for other | ||
1393 | liobns will cause a vm exit and must be handled by userspace. | ||
1394 | |||
1395 | The return value is a file descriptor which can be passed to mmap(2) | ||
1396 | to map the created TCE table into userspace. This lets userspace read | ||
1397 | the entries written by kernel-handled H_PUT_TCE calls, and also lets | ||
1398 | userspace update the TCE table directly which is useful in some | ||
1399 | circumstances. | ||
1400 | |||
1401 | 4.63 KVM_ALLOCATE_RMA | ||
1402 | |||
1403 | Capability: KVM_CAP_PPC_RMA | ||
1404 | Architectures: powerpc | ||
1405 | Type: vm ioctl | ||
1406 | Parameters: struct kvm_allocate_rma (out) | ||
1407 | Returns: file descriptor for mapping the allocated RMA | ||
1408 | |||
1409 | This allocates a Real Mode Area (RMA) from the pool allocated at boot | ||
1410 | time by the kernel. An RMA is a physically-contiguous, aligned region | ||
1411 | of memory used on older POWER processors to provide the memory which | ||
1412 | will be accessed by real-mode (MMU off) accesses in a KVM guest. | ||
1413 | POWER processors support a set of sizes for the RMA that usually | ||
1414 | includes 64MB, 128MB, 256MB and some larger powers of two. | ||
1415 | |||
1416 | /* for KVM_ALLOCATE_RMA */ | ||
1417 | struct kvm_allocate_rma { | ||
1418 | __u64 rma_size; | ||
1419 | }; | ||
1420 | |||
1421 | The return value is a file descriptor which can be passed to mmap(2) | ||
1422 | to map the allocated RMA into userspace. The mapped area can then be | ||
1423 | passed to the KVM_SET_USER_MEMORY_REGION ioctl to establish it as the | ||
1424 | RMA for a virtual machine. The size of the RMA in bytes (which is | ||
1425 | fixed at host kernel boot time) is returned in the rma_size field of | ||
1426 | the argument structure. | ||
1427 | |||
1428 | The KVM_CAP_PPC_RMA capability is 1 or 2 if the KVM_ALLOCATE_RMA ioctl | ||
1429 | is supported; 2 if the processor requires all virtual machines to have | ||
1430 | an RMA, or 1 if the processor can use an RMA but doesn't require it, | ||
1431 | because it supports the Virtual RMA (VRMA) facility. | ||
1432 | |||
1294 | 5. The kvm_run structure | 1433 | 5. The kvm_run structure |
1295 | 1434 | ||
1296 | Application code obtains a pointer to the kvm_run structure by | 1435 | Application code obtains a pointer to the kvm_run structure by |
@@ -1473,6 +1612,23 @@ Userspace can now handle the hypercall and when it's done modify the gprs as | |||
1473 | necessary. Upon guest entry all guest GPRs will then be replaced by the values | 1612 | necessary. Upon guest entry all guest GPRs will then be replaced by the values |
1474 | in this struct. | 1613 | in this struct. |
1475 | 1614 | ||
1615 | /* KVM_EXIT_PAPR_HCALL */ | ||
1616 | struct { | ||
1617 | __u64 nr; | ||
1618 | __u64 ret; | ||
1619 | __u64 args[9]; | ||
1620 | } papr_hcall; | ||
1621 | |||
1622 | This is used on 64-bit PowerPC when emulating a pSeries partition, | ||
1623 | e.g. with the 'pseries' machine type in qemu. It occurs when the | ||
1624 | guest does a hypercall using the 'sc 1' instruction. The 'nr' field | ||
1625 | contains the hypercall number (from the guest R3), and 'args' contains | ||
1626 | the arguments (from the guest R4 - R12). Userspace should put the | ||
1627 | return code in 'ret' and any extra returned values in args[]. | ||
1628 | The possible hypercalls are defined in the Power Architecture Platform | ||
1629 | Requirements (PAPR) document available from www.power.org (free | ||
1630 | developer registration required to access it). | ||
1631 | |||
1476 | /* Fix the size of the union. */ | 1632 | /* Fix the size of the union. */ |
1477 | char padding[256]; | 1633 | char padding[256]; |
1478 | }; | 1634 | }; |