Commit | Line | Data |
---|---|---|
f2061656 DD |
1 | Generic vm interface |
2 | ==================================== | |
3 | ||
4 | The virtual machine "device" also accepts the ioctls KVM_SET_DEVICE_ATTR, | |
5 | KVM_GET_DEVICE_ATTR, and KVM_HAS_DEVICE_ATTR. The interface uses the same | |
6 | struct kvm_device_attr as other devices, but targets VM-wide settings | |
7 | and controls. | |
8 | ||
9 | The groups and attributes per virtual machine, if any, are architecture | |
10 | specific. | |
4f718eab DD |
11 | |
12 | 1. GROUP: KVM_S390_VM_MEM_CTRL | |
13 | Architectures: s390 | |
14 | ||
365dc163 | 15 | 1.1. ATTRIBUTE: KVM_S390_VM_MEM_ENABLE_CMMA |
4f718eab | 16 | Parameters: none |
365dc163 | 17 | Returns: -EBUSY if a vcpu is already defined, otherwise 0 |
4f718eab | 18 | |
365dc163 | 19 | Enables Collaborative Memory Management Assist (CMMA) for the virtual machine. |
4f718eab | 20 | |
365dc163 DD |
21 | 1.2. ATTRIBUTE: KVM_S390_VM_MEM_CLR_CMMA |
22 | Parameters: none | |
f9cbd9b0 DH |
23 | Returns: -EINVAL if CMMA was not enabled |
24 | 0 otherwise | |
4f718eab DD |
25 | |
26 | Clear the CMMA status for all guest pages, so any pages the guest marked | |
27 | as unused are again used any may not be reclaimed by the host. | |
8c0a7ce6 DD |
28 | |
29 | 1.3. ATTRIBUTE KVM_S390_VM_MEM_LIMIT_SIZE | |
30 | Parameters: in attr->addr the address for the new limit of guest memory | |
31 | Returns: -EFAULT if the given address is not accessible | |
32 | -EINVAL if the virtual machine is of type UCONTROL | |
33 | -E2BIG if the given guest memory is to big for that machine | |
34 | -EBUSY if a vcpu is already defined | |
35 | -ENOMEM if not enough memory is available for a new shadow guest mapping | |
36 | 0 otherwise | |
37 | ||
38 | Allows userspace to query the actual limit and set a new limit for | |
39 | the maximum guest memory size. The limit will be rounded up to | |
40 | 2048 MB, 4096 GB, 8192 TB respectively, as this limit is governed by | |
a3a92c31 DD |
41 | the number of page table levels. In the case that there is no limit we will set |
42 | the limit to KVM_S390_NO_MEM_LIMIT (U64_MAX). | |
658b6eda MM |
43 | |
44 | 2. GROUP: KVM_S390_VM_CPU_MODEL | |
45 | Architectures: s390 | |
46 | ||
47 | 2.1. ATTRIBUTE: KVM_S390_VM_CPU_MACHINE (r/o) | |
48 | ||
49 | Allows user space to retrieve machine and kvm specific cpu related information: | |
50 | ||
51 | struct kvm_s390_vm_cpu_machine { | |
52 | __u64 cpuid; # CPUID of host | |
53 | __u32 ibc; # IBC level range offered by host | |
54 | __u8 pad[4]; | |
55 | __u64 fac_mask[256]; # set of cpu facilities enabled by KVM | |
56 | __u64 fac_list[256]; # set of cpu facilities offered by host | |
57 | } | |
58 | ||
59 | Parameters: address of buffer to store the machine related cpu data | |
60 | of type struct kvm_s390_vm_cpu_machine* | |
61 | Returns: -EFAULT if the given address is not accessible from kernel space | |
62 | -ENOMEM if not enough memory is available to process the ioctl | |
63 | 0 in case of success | |
64 | ||
65 | 2.2. ATTRIBUTE: KVM_S390_VM_CPU_PROCESSOR (r/w) | |
66 | ||
67 | Allows user space to retrieve or request to change cpu related information for a vcpu: | |
68 | ||
69 | struct kvm_s390_vm_cpu_processor { | |
70 | __u64 cpuid; # CPUID currently (to be) used by this vcpu | |
71 | __u16 ibc; # IBC level currently (to be) used by this vcpu | |
72 | __u8 pad[6]; | |
73 | __u64 fac_list[256]; # set of cpu facilities currently (to be) used | |
74 | # by this vcpu | |
75 | } | |
76 | ||
77 | KVM does not enforce or limit the cpu model data in any form. Take the information | |
78 | retrieved by means of KVM_S390_VM_CPU_MACHINE as hint for reasonable configuration | |
5d4f6f3d | 79 | setups. Instruction interceptions triggered by additionally set facility bits that |
658b6eda MM |
80 | are not handled by KVM need to by imlemented in the VM driver code. |
81 | ||
82 | Parameters: address of buffer to store/set the processor related cpu | |
83 | data of type struct kvm_s390_vm_cpu_processor*. | |
84 | Returns: -EBUSY in case 1 or more vcpus are already activated (only in write case) | |
85 | -EFAULT if the given address is not accessible from kernel space | |
86 | -ENOMEM if not enough memory is available to process the ioctl | |
87 | 0 in case of success | |
aad3c1d9 | 88 | |
15c9705f DH |
89 | 2.3. ATTRIBUTE: KVM_S390_VM_CPU_MACHINE_FEAT (r/o) |
90 | ||
91 | Allows user space to retrieve available cpu features. A feature is available if | |
92 | provided by the hardware and supported by kvm. In theory, cpu features could | |
93 | even be completely emulated by kvm. | |
94 | ||
95 | struct kvm_s390_vm_cpu_feat { | |
96 | __u64 feat[16]; # Bitmap (1 = feature available), MSB 0 bit numbering | |
97 | }; | |
98 | ||
99 | Parameters: address of a buffer to load the feature list from. | |
100 | Returns: -EFAULT if the given address is not accessible from kernel space. | |
101 | 0 in case of success. | |
102 | ||
103 | 2.4. ATTRIBUTE: KVM_S390_VM_CPU_PROCESSOR_FEAT (r/w) | |
104 | ||
105 | Allows user space to retrieve or change enabled cpu features for all VCPUs of a | |
106 | VM. Features that are not available cannot be enabled. | |
107 | ||
108 | See 2.3. for a description of the parameter struct. | |
109 | ||
110 | Parameters: address of a buffer to store/load the feature list from. | |
111 | Returns: -EFAULT if the given address is not accessible from kernel space. | |
112 | -EINVAL if a cpu feature that is not available is to be enabled. | |
113 | -EBUSY if at least one VCPU has already been defined. | |
114 | 0 in case of success. | |
115 | ||
0a763c78 DH |
116 | 2.5. ATTRIBUTE: KVM_S390_VM_CPU_MACHINE_SUBFUNC (r/o) |
117 | ||
118 | Allows user space to retrieve available cpu subfunctions without any filtering | |
119 | done by a set IBC. These subfunctions are indicated to the guest VCPU via | |
120 | query or "test bit" subfunctions and used e.g. by cpacf functions, plo and ptff. | |
121 | ||
122 | A subfunction block is only valid if KVM_S390_VM_CPU_MACHINE contains the | |
123 | STFL(E) bit introducing the affected instruction. If the affected instruction | |
124 | indicates subfunctions via a "query subfunction", the response block is | |
125 | contained in the returned struct. If the affected instruction | |
126 | indicates subfunctions via a "test bit" mechanism, the subfunction codes are | |
127 | contained in the returned struct in MSB 0 bit numbering. | |
128 | ||
129 | struct kvm_s390_vm_cpu_subfunc { | |
130 | u8 plo[32]; # always valid (ESA/390 feature) | |
131 | u8 ptff[16]; # valid with TOD-clock steering | |
132 | u8 kmac[16]; # valid with Message-Security-Assist | |
133 | u8 kmc[16]; # valid with Message-Security-Assist | |
134 | u8 km[16]; # valid with Message-Security-Assist | |
135 | u8 kimd[16]; # valid with Message-Security-Assist | |
136 | u8 klmd[16]; # valid with Message-Security-Assist | |
137 | u8 pckmo[16]; # valid with Message-Security-Assist-Extension 3 | |
138 | u8 kmctr[16]; # valid with Message-Security-Assist-Extension 4 | |
139 | u8 kmf[16]; # valid with Message-Security-Assist-Extension 4 | |
140 | u8 kmo[16]; # valid with Message-Security-Assist-Extension 4 | |
141 | u8 pcc[16]; # valid with Message-Security-Assist-Extension 4 | |
142 | u8 ppno[16]; # valid with Message-Security-Assist-Extension 5 | |
143 | u8 reserved[1824]; # reserved for future instructions | |
144 | }; | |
145 | ||
146 | Parameters: address of a buffer to load the subfunction blocks from. | |
147 | Returns: -EFAULT if the given address is not accessible from kernel space. | |
148 | 0 in case of success. | |
149 | ||
150 | 2.6. ATTRIBUTE: KVM_S390_VM_CPU_PROCESSOR_SUBFUNC (r/w) | |
151 | ||
152 | Allows user space to retrieve or change cpu subfunctions to be indicated for | |
153 | all VCPUs of a VM. This attribute will only be available if kernel and | |
154 | hardware support are in place. | |
155 | ||
156 | The kernel uses the configured subfunction blocks for indication to | |
157 | the guest. A subfunction block will only be used if the associated STFL(E) bit | |
158 | has not been disabled by user space (so the instruction to be queried is | |
159 | actually available for the guest). | |
160 | ||
161 | As long as no data has been written, a read will fail. The IBC will be used | |
162 | to determine available subfunctions in this case, this will guarantee backward | |
163 | compatibility. | |
164 | ||
165 | See 2.5. for a description of the parameter struct. | |
166 | ||
167 | Parameters: address of a buffer to store/load the subfunction blocks from. | |
168 | Returns: -EFAULT if the given address is not accessible from kernel space. | |
169 | -EINVAL when reading, if there was no write yet. | |
170 | -EBUSY if at least one VCPU has already been defined. | |
171 | 0 in case of success. | |
172 | ||
aad3c1d9 DH |
173 | 3. GROUP: KVM_S390_VM_TOD |
174 | Architectures: s390 | |
175 | ||
176 | 3.1. ATTRIBUTE: KVM_S390_VM_TOD_HIGH | |
177 | ||
178 | Allows user space to set/get the TOD clock extension (u8). | |
179 | ||
180 | Parameters: address of a buffer in user space to store the data (u8) to | |
181 | Returns: -EFAULT if the given address is not accessible from kernel space | |
182 | -EINVAL if setting the TOD clock extension to != 0 is not supported | |
183 | ||
184 | 3.2. ATTRIBUTE: KVM_S390_VM_TOD_LOW | |
185 | ||
186 | Allows user space to set/get bits 0-63 of the TOD clock register as defined in | |
187 | the POP (u64). | |
188 | ||
189 | Parameters: address of a buffer in user space to store the data (u64) to | |
190 | Returns: -EFAULT if the given address is not accessible from kernel space | |
eaf2b656 DH |
191 | |
192 | 4. GROUP: KVM_S390_VM_CRYPTO | |
193 | Architectures: s390 | |
194 | ||
195 | 4.1. ATTRIBUTE: KVM_S390_VM_CRYPTO_ENABLE_AES_KW (w/o) | |
196 | ||
197 | Allows user space to enable aes key wrapping, including generating a new | |
198 | wrapping key. | |
199 | ||
200 | Parameters: none | |
201 | Returns: 0 | |
202 | ||
203 | 4.2. ATTRIBUTE: KVM_S390_VM_CRYPTO_ENABLE_DEA_KW (w/o) | |
204 | ||
205 | Allows user space to enable dea key wrapping, including generating a new | |
206 | wrapping key. | |
207 | ||
208 | Parameters: none | |
209 | Returns: 0 | |
210 | ||
211 | 4.3. ATTRIBUTE: KVM_S390_VM_CRYPTO_DISABLE_AES_KW (w/o) | |
212 | ||
213 | Allows user space to disable aes key wrapping, clearing the wrapping key. | |
214 | ||
215 | Parameters: none | |
216 | Returns: 0 | |
217 | ||
218 | 4.4. ATTRIBUTE: KVM_S390_VM_CRYPTO_DISABLE_DEA_KW (w/o) | |
219 | ||
220 | Allows user space to disable dea key wrapping, clearing the wrapping key. | |
221 | ||
222 | Parameters: none | |
223 | Returns: 0 |