Based on kernel version 3.19. Page generated on 2015-02-13 21:22 EST.
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 argument: 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.