diff options
| author | Carsten Otte <cotte@de.ibm.com> | 2008-03-25 13:47:38 -0400 |
|---|---|---|
| committer | Avi Kivity <avi@qumranet.com> | 2008-04-27 05:00:48 -0400 |
| commit | 5ecee4ba4eb2ada7ece7c41eb08cf7bc51b579e2 (patch) | |
| tree | bd81e83d221f9b17f71de04f9cfa117e732f4605 /Documentation/s390 | |
| parent | 77b455f1bcfa0fddb31b8e6f9f2adc246acb4216 (diff) | |
KVM: s390: API documentation
This patch adds Documentation/s390/kvm.txt, which describes specifics of kvm's
user interface that are unique to s390 architecture.
Signed-off-by: Carsten Otte <cotte@de.ibm.com>
Signed-off-by: Avi Kivity <avi@qumranet.com>
Diffstat (limited to 'Documentation/s390')
| -rw-r--r-- | Documentation/s390/kvm.txt | 125 |
1 files changed, 125 insertions, 0 deletions
diff --git a/Documentation/s390/kvm.txt b/Documentation/s390/kvm.txt new file mode 100644 index 000000000000..6f5ceb0f09fc --- /dev/null +++ b/Documentation/s390/kvm.txt | |||
| @@ -0,0 +1,125 @@ | |||
| 1 | *** BIG FAT WARNING *** | ||
| 2 | The kvm module is currently in EXPERIMENTAL state for s390. This means that | ||
| 3 | the interface to the module is not yet considered to remain stable. Thus, be | ||
| 4 | prepared that we keep breaking your userspace application and guest | ||
| 5 | compatibility over and over again until we feel happy with the result. Make sure | ||
| 6 | your guest kernel, your host kernel, and your userspace launcher are in a | ||
| 7 | consistent state. | ||
| 8 | |||
| 9 | This Documentation describes the unique ioctl calls to /dev/kvm, the resulting | ||
| 10 | kvm-vm file descriptors, and the kvm-vcpu file descriptors that differ from x86. | ||
| 11 | |||
| 12 | 1. ioctl calls to /dev/kvm | ||
| 13 | KVM does support the following ioctls on s390 that are common with other | ||
| 14 | architectures and do behave the same: | ||
| 15 | KVM_GET_API_VERSION | ||
| 16 | KVM_CREATE_VM (*) see note | ||
| 17 | KVM_CHECK_EXTENSION | ||
| 18 | KVM_GET_VCPU_MMAP_SIZE | ||
| 19 | |||
| 20 | Notes: | ||
| 21 | * KVM_CREATE_VM may fail on s390, if the calling process has multiple | ||
| 22 | threads and has not called KVM_S390_ENABLE_SIE before. | ||
| 23 | |||
| 24 | In addition, on s390 the following architecture specific ioctls are supported: | ||
| 25 | ioctl: KVM_S390_ENABLE_SIE | ||
| 26 | args: none | ||
| 27 | see also: include/linux/kvm.h | ||
| 28 | This call causes the kernel to switch on PGSTE in the user page table. This | ||
| 29 | operation is needed in order to run a virtual machine, and it requires the | ||
| 30 | calling process to be single-threaded. Note that the first call to KVM_CREATE_VM | ||
| 31 | will implicitly try to switch on PGSTE if the user process has not called | ||
| 32 | KVM_S390_ENABLE_SIE before. User processes that want to launch multiple threads | ||
| 33 | before creating a virtual machine have to call KVM_S390_ENABLE_SIE, or will | ||
| 34 | observe an error calling KVM_CREATE_VM. Switching on PGSTE is a one-time | ||
| 35 | operation, is not reversible, and will persist over the entire lifetime of | ||
| 36 | the calling process. It does not have any user-visible effect other than a small | ||
| 37 | performance penalty. | ||
| 38 | |||
| 39 | 2. ioctl calls to the kvm-vm file descriptor | ||
| 40 | KVM does support the following ioctls on s390 that are common with other | ||
| 41 | architectures and do behave the same: | ||
| 42 | KVM_CREATE_VCPU | ||
| 43 | KVM_SET_USER_MEMORY_REGION (*) see note | ||
| 44 | KVM_GET_DIRTY_LOG (**) see note | ||
| 45 | |||
| 46 | Notes: | ||
| 47 | * kvm does only allow exactly one memory slot on s390, which has to start | ||
| 48 | at guest absolute address zero and at a user address that is aligned on any | ||
| 49 | page boundary. This hardware "limitation" allows us to have a few unique | ||
| 50 | optimizations. The memory slot doesn't have to be filled | ||
| 51 | with memory actually, it may contain sparse holes. That said, with different | ||
| 52 | user memory layout this does still allow a large flexibility when | ||
| 53 | doing the guest memory setup. | ||
| 54 | ** KVM_GET_DIRTY_LOG doesn't work properly yet. The user will receive an empty | ||
| 55 | log. This ioctl call is only needed for guest migration, and we intend to | ||
| 56 | implement this one in the future. | ||
| 57 | |||
| 58 | In addition, on s390 the following architecture specific ioctls for the kvm-vm | ||
| 59 | file descriptor are supported: | ||
| 60 | ioctl: KVM_S390_INTERRUPT | ||
| 61 | args: struct kvm_s390_interrupt * | ||
| 62 | see also: include/linux/kvm.h | ||
| 63 | This ioctl is used to submit a floating interrupt for a virtual machine. | ||
| 64 | Floating interrupts may be delivered to any virtual cpu in the configuration. | ||
| 65 | Only some interrupt types defined in include/linux/kvm.h make sense when | ||
| 66 | submitted as floating interrupts. The following interrupts are not considered | ||
| 67 | to be useful as floating interrupts, and a call to inject them will result in | ||
| 68 | -EINVAL error code: program interrupts and interprocessor signals. Valid | ||
| 69 | floating interrupts are: | ||
| 70 | KVM_S390_INT_VIRTIO | ||
| 71 | KVM_S390_INT_SERVICE | ||
| 72 | |||
| 73 | 3. ioctl calls to the kvm-vcpu file descriptor | ||
| 74 | KVM does support the following ioctls on s390 that are common with other | ||
| 75 | architectures and do behave the same: | ||
| 76 | KVM_RUN | ||
| 77 | KVM_GET_REGS | ||
| 78 | KVM_SET_REGS | ||
| 79 | KVM_GET_SREGS | ||
| 80 | KVM_SET_SREGS | ||
| 81 | KVM_GET_FPU | ||
| 82 | KVM_SET_FPU | ||
| 83 | |||
| 84 | In addition, on s390 the following architecture specific ioctls for the | ||
| 85 | kvm-vcpu file descriptor are supported: | ||
| 86 | ioctl: KVM_S390_INTERRUPT | ||
| 87 | args: struct kvm_s390_interrupt * | ||
| 88 | see also: include/linux/kvm.h | ||
| 89 | This ioctl is used to submit an interrupt for a specific virtual cpu. | ||
| 90 | Only some interrupt types defined in include/linux/kvm.h make sense when | ||
| 91 | submitted for a specific cpu. The following interrupts are not considered | ||
| 92 | to be useful, and a call to inject them will result in -EINVAL error code: | ||
| 93 | service processor calls and virtio interrupts. Valid interrupt types are: | ||
| 94 | KVM_S390_PROGRAM_INT | ||
| 95 | KVM_S390_SIGP_STOP | ||
| 96 | KVM_S390_RESTART | ||
| 97 | KVM_S390_SIGP_SET_PREFIX | ||
| 98 | KVM_S390_INT_EMERGENCY | ||
| 99 | |||
| 100 | ioctl: KVM_S390_STORE_STATUS | ||
| 101 | args: unsigned long | ||
| 102 | see also: include/linux/kvm.h | ||
| 103 | This ioctl stores the state of the cpu at the guest real address given as | ||
| 104 | argument, unless one of the following values defined in include/linux/kvm.h | ||
| 105 | is given as arguement: | ||
| 106 | KVM_S390_STORE_STATUS_NOADDR - the CPU stores its status to the save area in | ||
| 107 | absolute lowcore as defined by the principles of operation | ||
| 108 | KVM_S390_STORE_STATUS_PREFIXED - the CPU stores its status to the save area in | ||
| 109 | its prefix page just like the dump tool that comes with zipl. This is useful | ||
| 110 | to create a system dump for use with lkcdutils or crash. | ||
| 111 | |||
| 112 | ioctl: KVM_S390_SET_INITIAL_PSW | ||
| 113 | args: struct kvm_s390_psw * | ||
| 114 | see also: include/linux/kvm.h | ||
| 115 | This ioctl can be used to set the processor status word (psw) of a stopped cpu | ||
| 116 | prior to running it with KVM_RUN. Note that this call is not required to modify | ||
| 117 | the psw during sie intercepts that fall back to userspace because struct kvm_run | ||
| 118 | does contain the psw, and this value is evaluated during reentry of KVM_RUN | ||
| 119 | after the intercept exit was recognized. | ||
| 120 | |||
| 121 | ioctl: KVM_S390_INITIAL_RESET | ||
| 122 | args: none | ||
| 123 | see also: include/linux/kvm.h | ||
| 124 | This ioctl can be used to perform an initial cpu reset as defined by the | ||
| 125 | principles of operation. The target cpu has to be in stopped state. | ||
