~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~

TOMOYO Linux Cross Reference
Linux/arch/s390/kvm/kvm-s390.c

Version: ~ [ linux-5.1-rc2 ] ~ [ linux-5.0.4 ] ~ [ linux-4.20.17 ] ~ [ linux-4.19.31 ] ~ [ linux-4.18.20 ] ~ [ linux-4.17.19 ] ~ [ linux-4.16.18 ] ~ [ linux-4.15.18 ] ~ [ linux-4.14.108 ] ~ [ linux-4.13.16 ] ~ [ linux-4.12.14 ] ~ [ linux-4.11.12 ] ~ [ linux-4.10.17 ] ~ [ linux-4.9.165 ] ~ [ linux-4.8.17 ] ~ [ linux-4.7.10 ] ~ [ linux-4.6.7 ] ~ [ linux-4.5.7 ] ~ [ linux-4.4.177 ] ~ [ linux-4.3.6 ] ~ [ linux-4.2.8 ] ~ [ linux-4.1.52 ] ~ [ linux-4.0.9 ] ~ [ linux-3.19.8 ] ~ [ linux-3.18.137 ] ~ [ linux-3.17.8 ] ~ [ linux-3.16.63 ] ~ [ linux-3.15.10 ] ~ [ linux-3.14.79 ] ~ [ linux-3.13.11 ] ~ [ linux-3.12.74 ] ~ [ linux-3.11.10 ] ~ [ linux-3.10.108 ] ~ [ linux-3.9.11 ] ~ [ linux-3.8.13 ] ~ [ linux-3.7.10 ] ~ [ linux-3.6.11 ] ~ [ linux-3.5.7 ] ~ [ linux-3.4.113 ] ~ [ linux-3.3.8 ] ~ [ linux-3.2.102 ] ~ [ linux-3.1.10 ] ~ [ linux-3.0.101 ] ~ [ linux-2.6.39.4 ] ~ [ linux-2.6.38.8 ] ~ [ linux-2.6.37.6 ] ~ [ linux-2.6.36.4 ] ~ [ linux-2.6.35.14 ] ~ [ linux-2.6.34.15 ] ~ [ linux-2.6.33.20 ] ~ [ linux-2.6.32.71 ] ~ [ linux-2.6.0 ] ~ [ linux-2.4.37.11 ] ~ [ unix-v6-master ] ~ [ ccs-tools-1.8.5 ] ~ [ policy-sample ] ~
Architecture: ~ [ i386 ] ~ [ alpha ] ~ [ m68k ] ~ [ mips ] ~ [ ppc ] ~ [ sparc ] ~ [ sparc64 ] ~

  1 // SPDX-License-Identifier: GPL-2.0
  2 /*
  3  * hosting IBM Z kernel virtual machines (s390x)
  4  *
  5  * Copyright IBM Corp. 2008, 2018
  6  *
  7  *    Author(s): Carsten Otte <cotte@de.ibm.com>
  8  *               Christian Borntraeger <borntraeger@de.ibm.com>
  9  *               Heiko Carstens <heiko.carstens@de.ibm.com>
 10  *               Christian Ehrhardt <ehrhardt@de.ibm.com>
 11  *               Jason J. Herne <jjherne@us.ibm.com>
 12  */
 13 
 14 #define KMSG_COMPONENT "kvm-s390"
 15 #define pr_fmt(fmt) KMSG_COMPONENT ": " fmt
 16 
 17 #include <linux/compiler.h>
 18 #include <linux/err.h>
 19 #include <linux/fs.h>
 20 #include <linux/hrtimer.h>
 21 #include <linux/init.h>
 22 #include <linux/kvm.h>
 23 #include <linux/kvm_host.h>
 24 #include <linux/mman.h>
 25 #include <linux/module.h>
 26 #include <linux/moduleparam.h>
 27 #include <linux/random.h>
 28 #include <linux/slab.h>
 29 #include <linux/timer.h>
 30 #include <linux/vmalloc.h>
 31 #include <linux/bitmap.h>
 32 #include <linux/sched/signal.h>
 33 #include <linux/string.h>
 34 
 35 #include <asm/asm-offsets.h>
 36 #include <asm/lowcore.h>
 37 #include <asm/stp.h>
 38 #include <asm/pgtable.h>
 39 #include <asm/gmap.h>
 40 #include <asm/nmi.h>
 41 #include <asm/switch_to.h>
 42 #include <asm/isc.h>
 43 #include <asm/sclp.h>
 44 #include <asm/cpacf.h>
 45 #include <asm/timex.h>
 46 #include <asm/ap.h>
 47 #include "kvm-s390.h"
 48 #include "gaccess.h"
 49 
 50 #define CREATE_TRACE_POINTS
 51 #include "trace.h"
 52 #include "trace-s390.h"
 53 
 54 #define MEM_OP_MAX_SIZE 65536   /* Maximum transfer size for KVM_S390_MEM_OP */
 55 #define LOCAL_IRQS 32
 56 #define VCPU_IRQS_MAX_BUF (sizeof(struct kvm_s390_irq) * \
 57                            (KVM_MAX_VCPUS + LOCAL_IRQS))
 58 
 59 #define VCPU_STAT(x) offsetof(struct kvm_vcpu, stat.x), KVM_STAT_VCPU
 60 #define VM_STAT(x) offsetof(struct kvm, stat.x), KVM_STAT_VM
 61 
 62 struct kvm_stats_debugfs_item debugfs_entries[] = {
 63         { "userspace_handled", VCPU_STAT(exit_userspace) },
 64         { "exit_null", VCPU_STAT(exit_null) },
 65         { "exit_validity", VCPU_STAT(exit_validity) },
 66         { "exit_stop_request", VCPU_STAT(exit_stop_request) },
 67         { "exit_external_request", VCPU_STAT(exit_external_request) },
 68         { "exit_io_request", VCPU_STAT(exit_io_request) },
 69         { "exit_external_interrupt", VCPU_STAT(exit_external_interrupt) },
 70         { "exit_instruction", VCPU_STAT(exit_instruction) },
 71         { "exit_pei", VCPU_STAT(exit_pei) },
 72         { "exit_program_interruption", VCPU_STAT(exit_program_interruption) },
 73         { "exit_instr_and_program_int", VCPU_STAT(exit_instr_and_program) },
 74         { "exit_operation_exception", VCPU_STAT(exit_operation_exception) },
 75         { "halt_successful_poll", VCPU_STAT(halt_successful_poll) },
 76         { "halt_attempted_poll", VCPU_STAT(halt_attempted_poll) },
 77         { "halt_poll_invalid", VCPU_STAT(halt_poll_invalid) },
 78         { "halt_wakeup", VCPU_STAT(halt_wakeup) },
 79         { "instruction_lctlg", VCPU_STAT(instruction_lctlg) },
 80         { "instruction_lctl", VCPU_STAT(instruction_lctl) },
 81         { "instruction_stctl", VCPU_STAT(instruction_stctl) },
 82         { "instruction_stctg", VCPU_STAT(instruction_stctg) },
 83         { "deliver_ckc", VCPU_STAT(deliver_ckc) },
 84         { "deliver_cputm", VCPU_STAT(deliver_cputm) },
 85         { "deliver_emergency_signal", VCPU_STAT(deliver_emergency_signal) },
 86         { "deliver_external_call", VCPU_STAT(deliver_external_call) },
 87         { "deliver_service_signal", VCPU_STAT(deliver_service_signal) },
 88         { "deliver_virtio", VCPU_STAT(deliver_virtio) },
 89         { "deliver_stop_signal", VCPU_STAT(deliver_stop_signal) },
 90         { "deliver_prefix_signal", VCPU_STAT(deliver_prefix_signal) },
 91         { "deliver_restart_signal", VCPU_STAT(deliver_restart_signal) },
 92         { "deliver_program", VCPU_STAT(deliver_program) },
 93         { "deliver_io", VCPU_STAT(deliver_io) },
 94         { "deliver_machine_check", VCPU_STAT(deliver_machine_check) },
 95         { "exit_wait_state", VCPU_STAT(exit_wait_state) },
 96         { "inject_ckc", VCPU_STAT(inject_ckc) },
 97         { "inject_cputm", VCPU_STAT(inject_cputm) },
 98         { "inject_external_call", VCPU_STAT(inject_external_call) },
 99         { "inject_float_mchk", VM_STAT(inject_float_mchk) },
100         { "inject_emergency_signal", VCPU_STAT(inject_emergency_signal) },
101         { "inject_io", VM_STAT(inject_io) },
102         { "inject_mchk", VCPU_STAT(inject_mchk) },
103         { "inject_pfault_done", VM_STAT(inject_pfault_done) },
104         { "inject_program", VCPU_STAT(inject_program) },
105         { "inject_restart", VCPU_STAT(inject_restart) },
106         { "inject_service_signal", VM_STAT(inject_service_signal) },
107         { "inject_set_prefix", VCPU_STAT(inject_set_prefix) },
108         { "inject_stop_signal", VCPU_STAT(inject_stop_signal) },
109         { "inject_pfault_init", VCPU_STAT(inject_pfault_init) },
110         { "inject_virtio", VM_STAT(inject_virtio) },
111         { "instruction_epsw", VCPU_STAT(instruction_epsw) },
112         { "instruction_gs", VCPU_STAT(instruction_gs) },
113         { "instruction_io_other", VCPU_STAT(instruction_io_other) },
114         { "instruction_lpsw", VCPU_STAT(instruction_lpsw) },
115         { "instruction_lpswe", VCPU_STAT(instruction_lpswe) },
116         { "instruction_pfmf", VCPU_STAT(instruction_pfmf) },
117         { "instruction_ptff", VCPU_STAT(instruction_ptff) },
118         { "instruction_stidp", VCPU_STAT(instruction_stidp) },
119         { "instruction_sck", VCPU_STAT(instruction_sck) },
120         { "instruction_sckpf", VCPU_STAT(instruction_sckpf) },
121         { "instruction_spx", VCPU_STAT(instruction_spx) },
122         { "instruction_stpx", VCPU_STAT(instruction_stpx) },
123         { "instruction_stap", VCPU_STAT(instruction_stap) },
124         { "instruction_iske", VCPU_STAT(instruction_iske) },
125         { "instruction_ri", VCPU_STAT(instruction_ri) },
126         { "instruction_rrbe", VCPU_STAT(instruction_rrbe) },
127         { "instruction_sske", VCPU_STAT(instruction_sske) },
128         { "instruction_ipte_interlock", VCPU_STAT(instruction_ipte_interlock) },
129         { "instruction_essa", VCPU_STAT(instruction_essa) },
130         { "instruction_stsi", VCPU_STAT(instruction_stsi) },
131         { "instruction_stfl", VCPU_STAT(instruction_stfl) },
132         { "instruction_tb", VCPU_STAT(instruction_tb) },
133         { "instruction_tpi", VCPU_STAT(instruction_tpi) },
134         { "instruction_tprot", VCPU_STAT(instruction_tprot) },
135         { "instruction_tsch", VCPU_STAT(instruction_tsch) },
136         { "instruction_sthyi", VCPU_STAT(instruction_sthyi) },
137         { "instruction_sie", VCPU_STAT(instruction_sie) },
138         { "instruction_sigp_sense", VCPU_STAT(instruction_sigp_sense) },
139         { "instruction_sigp_sense_running", VCPU_STAT(instruction_sigp_sense_running) },
140         { "instruction_sigp_external_call", VCPU_STAT(instruction_sigp_external_call) },
141         { "instruction_sigp_emergency", VCPU_STAT(instruction_sigp_emergency) },
142         { "instruction_sigp_cond_emergency", VCPU_STAT(instruction_sigp_cond_emergency) },
143         { "instruction_sigp_start", VCPU_STAT(instruction_sigp_start) },
144         { "instruction_sigp_stop", VCPU_STAT(instruction_sigp_stop) },
145         { "instruction_sigp_stop_store_status", VCPU_STAT(instruction_sigp_stop_store_status) },
146         { "instruction_sigp_store_status", VCPU_STAT(instruction_sigp_store_status) },
147         { "instruction_sigp_store_adtl_status", VCPU_STAT(instruction_sigp_store_adtl_status) },
148         { "instruction_sigp_set_arch", VCPU_STAT(instruction_sigp_arch) },
149         { "instruction_sigp_set_prefix", VCPU_STAT(instruction_sigp_prefix) },
150         { "instruction_sigp_restart", VCPU_STAT(instruction_sigp_restart) },
151         { "instruction_sigp_cpu_reset", VCPU_STAT(instruction_sigp_cpu_reset) },
152         { "instruction_sigp_init_cpu_reset", VCPU_STAT(instruction_sigp_init_cpu_reset) },
153         { "instruction_sigp_unknown", VCPU_STAT(instruction_sigp_unknown) },
154         { "instruction_diag_10", VCPU_STAT(diagnose_10) },
155         { "instruction_diag_44", VCPU_STAT(diagnose_44) },
156         { "instruction_diag_9c", VCPU_STAT(diagnose_9c) },
157         { "instruction_diag_258", VCPU_STAT(diagnose_258) },
158         { "instruction_diag_308", VCPU_STAT(diagnose_308) },
159         { "instruction_diag_500", VCPU_STAT(diagnose_500) },
160         { "instruction_diag_other", VCPU_STAT(diagnose_other) },
161         { NULL }
162 };
163 
164 struct kvm_s390_tod_clock_ext {
165         __u8 epoch_idx;
166         __u64 tod;
167         __u8 reserved[7];
168 } __packed;
169 
170 /* allow nested virtualization in KVM (if enabled by user space) */
171 static int nested;
172 module_param(nested, int, S_IRUGO);
173 MODULE_PARM_DESC(nested, "Nested virtualization support");
174 
175 /* allow 1m huge page guest backing, if !nested */
176 static int hpage;
177 module_param(hpage, int, 0444);
178 MODULE_PARM_DESC(hpage, "1m huge page backing support");
179 
180 /*
181  * For now we handle at most 16 double words as this is what the s390 base
182  * kernel handles and stores in the prefix page. If we ever need to go beyond
183  * this, this requires changes to code, but the external uapi can stay.
184  */
185 #define SIZE_INTERNAL 16
186 
187 /*
188  * Base feature mask that defines default mask for facilities. Consists of the
189  * defines in FACILITIES_KVM and the non-hypervisor managed bits.
190  */
191 static unsigned long kvm_s390_fac_base[SIZE_INTERNAL] = { FACILITIES_KVM };
192 /*
193  * Extended feature mask. Consists of the defines in FACILITIES_KVM_CPUMODEL
194  * and defines the facilities that can be enabled via a cpu model.
195  */
196 static unsigned long kvm_s390_fac_ext[SIZE_INTERNAL] = { FACILITIES_KVM_CPUMODEL };
197 
198 static unsigned long kvm_s390_fac_size(void)
199 {
200         BUILD_BUG_ON(SIZE_INTERNAL > S390_ARCH_FAC_MASK_SIZE_U64);
201         BUILD_BUG_ON(SIZE_INTERNAL > S390_ARCH_FAC_LIST_SIZE_U64);
202         BUILD_BUG_ON(SIZE_INTERNAL * sizeof(unsigned long) >
203                 sizeof(S390_lowcore.stfle_fac_list));
204 
205         return SIZE_INTERNAL;
206 }
207 
208 /* available cpu features supported by kvm */
209 static DECLARE_BITMAP(kvm_s390_available_cpu_feat, KVM_S390_VM_CPU_FEAT_NR_BITS);
210 /* available subfunctions indicated via query / "test bit" */
211 static struct kvm_s390_vm_cpu_subfunc kvm_s390_available_subfunc;
212 
213 static struct gmap_notifier gmap_notifier;
214 static struct gmap_notifier vsie_gmap_notifier;
215 debug_info_t *kvm_s390_dbf;
216 
217 /* Section: not file related */
218 int kvm_arch_hardware_enable(void)
219 {
220         /* every s390 is virtualization enabled ;-) */
221         return 0;
222 }
223 
224 static void kvm_gmap_notifier(struct gmap *gmap, unsigned long start,
225                               unsigned long end);
226 
227 static void kvm_clock_sync_scb(struct kvm_s390_sie_block *scb, u64 delta)
228 {
229         u8 delta_idx = 0;
230 
231         /*
232          * The TOD jumps by delta, we have to compensate this by adding
233          * -delta to the epoch.
234          */
235         delta = -delta;
236 
237         /* sign-extension - we're adding to signed values below */
238         if ((s64)delta < 0)
239                 delta_idx = -1;
240 
241         scb->epoch += delta;
242         if (scb->ecd & ECD_MEF) {
243                 scb->epdx += delta_idx;
244                 if (scb->epoch < delta)
245                         scb->epdx += 1;
246         }
247 }
248 
249 /*
250  * This callback is executed during stop_machine(). All CPUs are therefore
251  * temporarily stopped. In order not to change guest behavior, we have to
252  * disable preemption whenever we touch the epoch of kvm and the VCPUs,
253  * so a CPU won't be stopped while calculating with the epoch.
254  */
255 static int kvm_clock_sync(struct notifier_block *notifier, unsigned long val,
256                           void *v)
257 {
258         struct kvm *kvm;
259         struct kvm_vcpu *vcpu;
260         int i;
261         unsigned long long *delta = v;
262 
263         list_for_each_entry(kvm, &vm_list, vm_list) {
264                 kvm_for_each_vcpu(i, vcpu, kvm) {
265                         kvm_clock_sync_scb(vcpu->arch.sie_block, *delta);
266                         if (i == 0) {
267                                 kvm->arch.epoch = vcpu->arch.sie_block->epoch;
268                                 kvm->arch.epdx = vcpu->arch.sie_block->epdx;
269                         }
270                         if (vcpu->arch.cputm_enabled)
271                                 vcpu->arch.cputm_start += *delta;
272                         if (vcpu->arch.vsie_block)
273                                 kvm_clock_sync_scb(vcpu->arch.vsie_block,
274                                                    *delta);
275                 }
276         }
277         return NOTIFY_OK;
278 }
279 
280 static struct notifier_block kvm_clock_notifier = {
281         .notifier_call = kvm_clock_sync,
282 };
283 
284 int kvm_arch_hardware_setup(void)
285 {
286         gmap_notifier.notifier_call = kvm_gmap_notifier;
287         gmap_register_pte_notifier(&gmap_notifier);
288         vsie_gmap_notifier.notifier_call = kvm_s390_vsie_gmap_notifier;
289         gmap_register_pte_notifier(&vsie_gmap_notifier);
290         atomic_notifier_chain_register(&s390_epoch_delta_notifier,
291                                        &kvm_clock_notifier);
292         return 0;
293 }
294 
295 void kvm_arch_hardware_unsetup(void)
296 {
297         gmap_unregister_pte_notifier(&gmap_notifier);
298         gmap_unregister_pte_notifier(&vsie_gmap_notifier);
299         atomic_notifier_chain_unregister(&s390_epoch_delta_notifier,
300                                          &kvm_clock_notifier);
301 }
302 
303 static void allow_cpu_feat(unsigned long nr)
304 {
305         set_bit_inv(nr, kvm_s390_available_cpu_feat);
306 }
307 
308 static inline int plo_test_bit(unsigned char nr)
309 {
310         register unsigned long r0 asm("") = (unsigned long) nr | 0x100;
311         int cc;
312 
313         asm volatile(
314                 /* Parameter registers are ignored for "test bit" */
315                 "       plo     0,0,0,0(0)\n"
316                 "       ipm     %0\n"
317                 "       srl     %0,28\n"
318                 : "=d" (cc)
319                 : "d" (r0)
320                 : "cc");
321         return cc == 0;
322 }
323 
324 static void kvm_s390_cpu_feat_init(void)
325 {
326         int i;
327 
328         for (i = 0; i < 256; ++i) {
329                 if (plo_test_bit(i))
330                         kvm_s390_available_subfunc.plo[i >> 3] |= 0x80 >> (i & 7);
331         }
332 
333         if (test_facility(28)) /* TOD-clock steering */
334                 ptff(kvm_s390_available_subfunc.ptff,
335                      sizeof(kvm_s390_available_subfunc.ptff),
336                      PTFF_QAF);
337 
338         if (test_facility(17)) { /* MSA */
339                 __cpacf_query(CPACF_KMAC, (cpacf_mask_t *)
340                               kvm_s390_available_subfunc.kmac);
341                 __cpacf_query(CPACF_KMC, (cpacf_mask_t *)
342                               kvm_s390_available_subfunc.kmc);
343                 __cpacf_query(CPACF_KM, (cpacf_mask_t *)
344                               kvm_s390_available_subfunc.km);
345                 __cpacf_query(CPACF_KIMD, (cpacf_mask_t *)
346                               kvm_s390_available_subfunc.kimd);
347                 __cpacf_query(CPACF_KLMD, (cpacf_mask_t *)
348                               kvm_s390_available_subfunc.klmd);
349         }
350         if (test_facility(76)) /* MSA3 */
351                 __cpacf_query(CPACF_PCKMO, (cpacf_mask_t *)
352                               kvm_s390_available_subfunc.pckmo);
353         if (test_facility(77)) { /* MSA4 */
354                 __cpacf_query(CPACF_KMCTR, (cpacf_mask_t *)
355                               kvm_s390_available_subfunc.kmctr);
356                 __cpacf_query(CPACF_KMF, (cpacf_mask_t *)
357                               kvm_s390_available_subfunc.kmf);
358                 __cpacf_query(CPACF_KMO, (cpacf_mask_t *)
359                               kvm_s390_available_subfunc.kmo);
360                 __cpacf_query(CPACF_PCC, (cpacf_mask_t *)
361                               kvm_s390_available_subfunc.pcc);
362         }
363         if (test_facility(57)) /* MSA5 */
364                 __cpacf_query(CPACF_PRNO, (cpacf_mask_t *)
365                               kvm_s390_available_subfunc.ppno);
366 
367         if (test_facility(146)) /* MSA8 */
368                 __cpacf_query(CPACF_KMA, (cpacf_mask_t *)
369                               kvm_s390_available_subfunc.kma);
370 
371         if (MACHINE_HAS_ESOP)
372                 allow_cpu_feat(KVM_S390_VM_CPU_FEAT_ESOP);
373         /*
374          * We need SIE support, ESOP (PROT_READ protection for gmap_shadow),
375          * 64bit SCAO (SCA passthrough) and IDTE (for gmap_shadow unshadowing).
376          */
377         if (!sclp.has_sief2 || !MACHINE_HAS_ESOP || !sclp.has_64bscao ||
378             !test_facility(3) || !nested)
379                 return;
380         allow_cpu_feat(KVM_S390_VM_CPU_FEAT_SIEF2);
381         if (sclp.has_64bscao)
382                 allow_cpu_feat(KVM_S390_VM_CPU_FEAT_64BSCAO);
383         if (sclp.has_siif)
384                 allow_cpu_feat(KVM_S390_VM_CPU_FEAT_SIIF);
385         if (sclp.has_gpere)
386                 allow_cpu_feat(KVM_S390_VM_CPU_FEAT_GPERE);
387         if (sclp.has_gsls)
388                 allow_cpu_feat(KVM_S390_VM_CPU_FEAT_GSLS);
389         if (sclp.has_ib)
390                 allow_cpu_feat(KVM_S390_VM_CPU_FEAT_IB);
391         if (sclp.has_cei)
392                 allow_cpu_feat(KVM_S390_VM_CPU_FEAT_CEI);
393         if (sclp.has_ibs)
394                 allow_cpu_feat(KVM_S390_VM_CPU_FEAT_IBS);
395         if (sclp.has_kss)
396                 allow_cpu_feat(KVM_S390_VM_CPU_FEAT_KSS);
397         /*
398          * KVM_S390_VM_CPU_FEAT_SKEY: Wrong shadow of PTE.I bits will make
399          * all skey handling functions read/set the skey from the PGSTE
400          * instead of the real storage key.
401          *
402          * KVM_S390_VM_CPU_FEAT_CMMA: Wrong shadow of PTE.I bits will make
403          * pages being detected as preserved although they are resident.
404          *
405          * KVM_S390_VM_CPU_FEAT_PFMFI: Wrong shadow of PTE.I bits will
406          * have the same effect as for KVM_S390_VM_CPU_FEAT_SKEY.
407          *
408          * For KVM_S390_VM_CPU_FEAT_SKEY, KVM_S390_VM_CPU_FEAT_CMMA and
409          * KVM_S390_VM_CPU_FEAT_PFMFI, all PTE.I and PGSTE bits have to be
410          * correctly shadowed. We can do that for the PGSTE but not for PTE.I.
411          *
412          * KVM_S390_VM_CPU_FEAT_SIGPIF: Wrong SCB addresses in the SCA. We
413          * cannot easily shadow the SCA because of the ipte lock.
414          */
415 }
416 
417 int kvm_arch_init(void *opaque)
418 {
419         int rc;
420 
421         kvm_s390_dbf = debug_register("kvm-trace", 32, 1, 7 * sizeof(long));
422         if (!kvm_s390_dbf)
423                 return -ENOMEM;
424 
425         if (debug_register_view(kvm_s390_dbf, &debug_sprintf_view)) {
426                 rc = -ENOMEM;
427                 goto out_debug_unreg;
428         }
429 
430         kvm_s390_cpu_feat_init();
431 
432         /* Register floating interrupt controller interface. */
433         rc = kvm_register_device_ops(&kvm_flic_ops, KVM_DEV_TYPE_FLIC);
434         if (rc) {
435                 pr_err("A FLIC registration call failed with rc=%d\n", rc);
436                 goto out_debug_unreg;
437         }
438 
439         rc = kvm_s390_gib_init(GAL_ISC);
440         if (rc)
441                 goto out_gib_destroy;
442 
443         return 0;
444 
445 out_gib_destroy:
446         kvm_s390_gib_destroy();
447 out_debug_unreg:
448         debug_unregister(kvm_s390_dbf);
449         return rc;
450 }
451 
452 void kvm_arch_exit(void)
453 {
454         kvm_s390_gib_destroy();
455         debug_unregister(kvm_s390_dbf);
456 }
457 
458 /* Section: device related */
459 long kvm_arch_dev_ioctl(struct file *filp,
460                         unsigned int ioctl, unsigned long arg)
461 {
462         if (ioctl == KVM_S390_ENABLE_SIE)
463                 return s390_enable_sie();
464         return -EINVAL;
465 }
466 
467 int kvm_vm_ioctl_check_extension(struct kvm *kvm, long ext)
468 {
469         int r;
470 
471         switch (ext) {
472         case KVM_CAP_S390_PSW:
473         case KVM_CAP_S390_GMAP:
474         case KVM_CAP_SYNC_MMU:
475 #ifdef CONFIG_KVM_S390_UCONTROL
476         case KVM_CAP_S390_UCONTROL:
477 #endif
478         case KVM_CAP_ASYNC_PF:
479         case KVM_CAP_SYNC_REGS:
480         case KVM_CAP_ONE_REG:
481         case KVM_CAP_ENABLE_CAP:
482         case KVM_CAP_S390_CSS_SUPPORT:
483         case KVM_CAP_IOEVENTFD:
484         case KVM_CAP_DEVICE_CTRL:
485         case KVM_CAP_S390_IRQCHIP:
486         case KVM_CAP_VM_ATTRIBUTES:
487         case KVM_CAP_MP_STATE:
488         case KVM_CAP_IMMEDIATE_EXIT:
489         case KVM_CAP_S390_INJECT_IRQ:
490         case KVM_CAP_S390_USER_SIGP:
491         case KVM_CAP_S390_USER_STSI:
492         case KVM_CAP_S390_SKEYS:
493         case KVM_CAP_S390_IRQ_STATE:
494         case KVM_CAP_S390_USER_INSTR0:
495         case KVM_CAP_S390_CMMA_MIGRATION:
496         case KVM_CAP_S390_AIS:
497         case KVM_CAP_S390_AIS_MIGRATION:
498                 r = 1;
499                 break;
500         case KVM_CAP_S390_HPAGE_1M:
501                 r = 0;
502                 if (hpage && !kvm_is_ucontrol(kvm))
503                         r = 1;
504                 break;
505         case KVM_CAP_S390_MEM_OP:
506                 r = MEM_OP_MAX_SIZE;
507                 break;
508         case KVM_CAP_NR_VCPUS:
509         case KVM_CAP_MAX_VCPUS:
510                 r = KVM_S390_BSCA_CPU_SLOTS;
511                 if (!kvm_s390_use_sca_entries())
512                         r = KVM_MAX_VCPUS;
513                 else if (sclp.has_esca && sclp.has_64bscao)
514                         r = KVM_S390_ESCA_CPU_SLOTS;
515                 break;
516         case KVM_CAP_NR_MEMSLOTS:
517                 r = KVM_USER_MEM_SLOTS;
518                 break;
519         case KVM_CAP_S390_COW:
520                 r = MACHINE_HAS_ESOP;
521                 break;
522         case KVM_CAP_S390_VECTOR_REGISTERS:
523                 r = MACHINE_HAS_VX;
524                 break;
525         case KVM_CAP_S390_RI:
526                 r = test_facility(64);
527                 break;
528         case KVM_CAP_S390_GS:
529                 r = test_facility(133);
530                 break;
531         case KVM_CAP_S390_BPB:
532                 r = test_facility(82);
533                 break;
534         default:
535                 r = 0;
536         }
537         return r;
538 }
539 
540 static void kvm_s390_sync_dirty_log(struct kvm *kvm,
541                                     struct kvm_memory_slot *memslot)
542 {
543         int i;
544         gfn_t cur_gfn, last_gfn;
545         unsigned long gaddr, vmaddr;
546         struct gmap *gmap = kvm->arch.gmap;
547         DECLARE_BITMAP(bitmap, _PAGE_ENTRIES);
548 
549         /* Loop over all guest segments */
550         cur_gfn = memslot->base_gfn;
551         last_gfn = memslot->base_gfn + memslot->npages;
552         for (; cur_gfn <= last_gfn; cur_gfn += _PAGE_ENTRIES) {
553                 gaddr = gfn_to_gpa(cur_gfn);
554                 vmaddr = gfn_to_hva_memslot(memslot, cur_gfn);
555                 if (kvm_is_error_hva(vmaddr))
556                         continue;
557 
558                 bitmap_zero(bitmap, _PAGE_ENTRIES);
559                 gmap_sync_dirty_log_pmd(gmap, bitmap, gaddr, vmaddr);
560                 for (i = 0; i < _PAGE_ENTRIES; i++) {
561                         if (test_bit(i, bitmap))
562                                 mark_page_dirty(kvm, cur_gfn + i);
563                 }
564 
565                 if (fatal_signal_pending(current))
566                         return;
567                 cond_resched();
568         }
569 }
570 
571 /* Section: vm related */
572 static void sca_del_vcpu(struct kvm_vcpu *vcpu);
573 
574 /*
575  * Get (and clear) the dirty memory log for a memory slot.
576  */
577 int kvm_vm_ioctl_get_dirty_log(struct kvm *kvm,
578                                struct kvm_dirty_log *log)
579 {
580         int r;
581         unsigned long n;
582         struct kvm_memslots *slots;
583         struct kvm_memory_slot *memslot;
584         int is_dirty = 0;
585 
586         if (kvm_is_ucontrol(kvm))
587                 return -EINVAL;
588 
589         mutex_lock(&kvm->slots_lock);
590 
591         r = -EINVAL;
592         if (log->slot >= KVM_USER_MEM_SLOTS)
593                 goto out;
594 
595         slots = kvm_memslots(kvm);
596         memslot = id_to_memslot(slots, log->slot);
597         r = -ENOENT;
598         if (!memslot->dirty_bitmap)
599                 goto out;
600 
601         kvm_s390_sync_dirty_log(kvm, memslot);
602         r = kvm_get_dirty_log(kvm, log, &is_dirty);
603         if (r)
604                 goto out;
605 
606         /* Clear the dirty log */
607         if (is_dirty) {
608                 n = kvm_dirty_bitmap_bytes(memslot);
609                 memset(memslot->dirty_bitmap, 0, n);
610         }
611         r = 0;
612 out:
613         mutex_unlock(&kvm->slots_lock);
614         return r;
615 }
616 
617 static void icpt_operexc_on_all_vcpus(struct kvm *kvm)
618 {
619         unsigned int i;
620         struct kvm_vcpu *vcpu;
621 
622         kvm_for_each_vcpu(i, vcpu, kvm) {
623                 kvm_s390_sync_request(KVM_REQ_ICPT_OPEREXC, vcpu);
624         }
625 }
626 
627 int kvm_vm_ioctl_enable_cap(struct kvm *kvm, struct kvm_enable_cap *cap)
628 {
629         int r;
630 
631         if (cap->flags)
632                 return -EINVAL;
633 
634         switch (cap->cap) {
635         case KVM_CAP_S390_IRQCHIP:
636                 VM_EVENT(kvm, 3, "%s", "ENABLE: CAP_S390_IRQCHIP");
637                 kvm->arch.use_irqchip = 1;
638                 r = 0;
639                 break;
640         case KVM_CAP_S390_USER_SIGP:
641                 VM_EVENT(kvm, 3, "%s", "ENABLE: CAP_S390_USER_SIGP");
642                 kvm->arch.user_sigp = 1;
643                 r = 0;
644                 break;
645         case KVM_CAP_S390_VECTOR_REGISTERS:
646                 mutex_lock(&kvm->lock);
647                 if (kvm->created_vcpus) {
648                         r = -EBUSY;
649                 } else if (MACHINE_HAS_VX) {
650                         set_kvm_facility(kvm->arch.model.fac_mask, 129);
651                         set_kvm_facility(kvm->arch.model.fac_list, 129);
652                         if (test_facility(134)) {
653                                 set_kvm_facility(kvm->arch.model.fac_mask, 134);
654                                 set_kvm_facility(kvm->arch.model.fac_list, 134);
655                         }
656                         if (test_facility(135)) {
657                                 set_kvm_facility(kvm->arch.model.fac_mask, 135);
658                                 set_kvm_facility(kvm->arch.model.fac_list, 135);
659                         }
660                         r = 0;
661                 } else
662                         r = -EINVAL;
663                 mutex_unlock(&kvm->lock);
664                 VM_EVENT(kvm, 3, "ENABLE: CAP_S390_VECTOR_REGISTERS %s",
665                          r ? "(not available)" : "(success)");
666                 break;
667         case KVM_CAP_S390_RI:
668                 r = -EINVAL;
669                 mutex_lock(&kvm->lock);
670                 if (kvm->created_vcpus) {
671                         r = -EBUSY;
672                 } else if (test_facility(64)) {
673                         set_kvm_facility(kvm->arch.model.fac_mask, 64);
674                         set_kvm_facility(kvm->arch.model.fac_list, 64);
675                         r = 0;
676                 }
677                 mutex_unlock(&kvm->lock);
678                 VM_EVENT(kvm, 3, "ENABLE: CAP_S390_RI %s",
679                          r ? "(not available)" : "(success)");
680                 break;
681         case KVM_CAP_S390_AIS:
682                 mutex_lock(&kvm->lock);
683                 if (kvm->created_vcpus) {
684                         r = -EBUSY;
685                 } else {
686                         set_kvm_facility(kvm->arch.model.fac_mask, 72);
687                         set_kvm_facility(kvm->arch.model.fac_list, 72);
688                         r = 0;
689                 }
690                 mutex_unlock(&kvm->lock);
691                 VM_EVENT(kvm, 3, "ENABLE: AIS %s",
692                          r ? "(not available)" : "(success)");
693                 break;
694         case KVM_CAP_S390_GS:
695                 r = -EINVAL;
696                 mutex_lock(&kvm->lock);
697                 if (kvm->created_vcpus) {
698                         r = -EBUSY;
699                 } else if (test_facility(133)) {
700                         set_kvm_facility(kvm->arch.model.fac_mask, 133);
701                         set_kvm_facility(kvm->arch.model.fac_list, 133);
702                         r = 0;
703                 }
704                 mutex_unlock(&kvm->lock);
705                 VM_EVENT(kvm, 3, "ENABLE: CAP_S390_GS %s",
706                          r ? "(not available)" : "(success)");
707                 break;
708         case KVM_CAP_S390_HPAGE_1M:
709                 mutex_lock(&kvm->lock);
710                 if (kvm->created_vcpus)
711                         r = -EBUSY;
712                 else if (!hpage || kvm->arch.use_cmma || kvm_is_ucontrol(kvm))
713                         r = -EINVAL;
714                 else {
715                         r = 0;
716                         down_write(&kvm->mm->mmap_sem);
717                         kvm->mm->context.allow_gmap_hpage_1m = 1;
718                         up_write(&kvm->mm->mmap_sem);
719                         /*
720                          * We might have to create fake 4k page
721                          * tables. To avoid that the hardware works on
722                          * stale PGSTEs, we emulate these instructions.
723                          */
724                         kvm->arch.use_skf = 0;
725                         kvm->arch.use_pfmfi = 0;
726                 }
727                 mutex_unlock(&kvm->lock);
728                 VM_EVENT(kvm, 3, "ENABLE: CAP_S390_HPAGE %s",
729                          r ? "(not available)" : "(success)");
730                 break;
731         case KVM_CAP_S390_USER_STSI:
732                 VM_EVENT(kvm, 3, "%s", "ENABLE: CAP_S390_USER_STSI");
733                 kvm->arch.user_stsi = 1;
734                 r = 0;
735                 break;
736         case KVM_CAP_S390_USER_INSTR0:
737                 VM_EVENT(kvm, 3, "%s", "ENABLE: CAP_S390_USER_INSTR0");
738                 kvm->arch.user_instr0 = 1;
739                 icpt_operexc_on_all_vcpus(kvm);
740                 r = 0;
741                 break;
742         default:
743                 r = -EINVAL;
744                 break;
745         }
746         return r;
747 }
748 
749 static int kvm_s390_get_mem_control(struct kvm *kvm, struct kvm_device_attr *attr)
750 {
751         int ret;
752 
753         switch (attr->attr) {
754         case KVM_S390_VM_MEM_LIMIT_SIZE:
755                 ret = 0;
756                 VM_EVENT(kvm, 3, "QUERY: max guest memory: %lu bytes",
757                          kvm->arch.mem_limit);
758                 if (put_user(kvm->arch.mem_limit, (u64 __user *)attr->addr))
759                         ret = -EFAULT;
760                 break;
761         default:
762                 ret = -ENXIO;
763                 break;
764         }
765         return ret;
766 }
767 
768 static int kvm_s390_set_mem_control(struct kvm *kvm, struct kvm_device_attr *attr)
769 {
770         int ret;
771         unsigned int idx;
772         switch (attr->attr) {
773         case KVM_S390_VM_MEM_ENABLE_CMMA:
774                 ret = -ENXIO;
775                 if (!sclp.has_cmma)
776                         break;
777 
778                 VM_EVENT(kvm, 3, "%s", "ENABLE: CMMA support");
779                 mutex_lock(&kvm->lock);
780                 if (kvm->created_vcpus)
781                         ret = -EBUSY;
782                 else if (kvm->mm->context.allow_gmap_hpage_1m)
783                         ret = -EINVAL;
784                 else {
785                         kvm->arch.use_cmma = 1;
786                         /* Not compatible with cmma. */
787                         kvm->arch.use_pfmfi = 0;
788                         ret = 0;
789                 }
790                 mutex_unlock(&kvm->lock);
791                 break;
792         case KVM_S390_VM_MEM_CLR_CMMA:
793                 ret = -ENXIO;
794                 if (!sclp.has_cmma)
795                         break;
796                 ret = -EINVAL;
797                 if (!kvm->arch.use_cmma)
798                         break;
799 
800                 VM_EVENT(kvm, 3, "%s", "RESET: CMMA states");
801                 mutex_lock(&kvm->lock);
802                 idx = srcu_read_lock(&kvm->srcu);
803                 s390_reset_cmma(kvm->arch.gmap->mm);
804                 srcu_read_unlock(&kvm->srcu, idx);
805                 mutex_unlock(&kvm->lock);
806                 ret = 0;
807                 break;
808         case KVM_S390_VM_MEM_LIMIT_SIZE: {
809                 unsigned long new_limit;
810 
811                 if (kvm_is_ucontrol(kvm))
812                         return -EINVAL;
813 
814                 if (get_user(new_limit, (u64 __user *)attr->addr))
815                         return -EFAULT;
816 
817                 if (kvm->arch.mem_limit != KVM_S390_NO_MEM_LIMIT &&
818                     new_limit > kvm->arch.mem_limit)
819                         return -E2BIG;
820 
821                 if (!new_limit)
822                         return -EINVAL;
823 
824                 /* gmap_create takes last usable address */
825                 if (new_limit != KVM_S390_NO_MEM_LIMIT)
826                         new_limit -= 1;
827 
828                 ret = -EBUSY;
829                 mutex_lock(&kvm->lock);
830                 if (!kvm->created_vcpus) {
831                         /* gmap_create will round the limit up */
832                         struct gmap *new = gmap_create(current->mm, new_limit);
833 
834                         if (!new) {
835                                 ret = -ENOMEM;
836                         } else {
837                                 gmap_remove(kvm->arch.gmap);
838                                 new->private = kvm;
839                                 kvm->arch.gmap = new;
840                                 ret = 0;
841                         }
842                 }
843                 mutex_unlock(&kvm->lock);
844                 VM_EVENT(kvm, 3, "SET: max guest address: %lu", new_limit);
845                 VM_EVENT(kvm, 3, "New guest asce: 0x%pK",
846                          (void *) kvm->arch.gmap->asce);
847                 break;
848         }
849         default:
850                 ret = -ENXIO;
851                 break;
852         }
853         return ret;
854 }
855 
856 static void kvm_s390_vcpu_crypto_setup(struct kvm_vcpu *vcpu);
857 
858 void kvm_s390_vcpu_crypto_reset_all(struct kvm *kvm)
859 {
860         struct kvm_vcpu *vcpu;
861         int i;
862 
863         kvm_s390_vcpu_block_all(kvm);
864 
865         kvm_for_each_vcpu(i, vcpu, kvm) {
866                 kvm_s390_vcpu_crypto_setup(vcpu);
867                 /* recreate the shadow crycb by leaving the VSIE handler */
868                 kvm_s390_sync_request(KVM_REQ_VSIE_RESTART, vcpu);
869         }
870 
871         kvm_s390_vcpu_unblock_all(kvm);
872 }
873 
874 static int kvm_s390_vm_set_crypto(struct kvm *kvm, struct kvm_device_attr *attr)
875 {
876         mutex_lock(&kvm->lock);
877         switch (attr->attr) {
878         case KVM_S390_VM_CRYPTO_ENABLE_AES_KW:
879                 if (!test_kvm_facility(kvm, 76)) {
880                         mutex_unlock(&kvm->lock);
881                         return -EINVAL;
882                 }
883                 get_random_bytes(
884                         kvm->arch.crypto.crycb->aes_wrapping_key_mask,
885                         sizeof(kvm->arch.crypto.crycb->aes_wrapping_key_mask));
886                 kvm->arch.crypto.aes_kw = 1;
887                 VM_EVENT(kvm, 3, "%s", "ENABLE: AES keywrapping support");
888                 break;
889         case KVM_S390_VM_CRYPTO_ENABLE_DEA_KW:
890                 if (!test_kvm_facility(kvm, 76)) {
891                         mutex_unlock(&kvm->lock);
892                         return -EINVAL;
893                 }
894                 get_random_bytes(
895                         kvm->arch.crypto.crycb->dea_wrapping_key_mask,
896                         sizeof(kvm->arch.crypto.crycb->dea_wrapping_key_mask));
897                 kvm->arch.crypto.dea_kw = 1;
898                 VM_EVENT(kvm, 3, "%s", "ENABLE: DEA keywrapping support");
899                 break;
900         case KVM_S390_VM_CRYPTO_DISABLE_AES_KW:
901                 if (!test_kvm_facility(kvm, 76)) {
902                         mutex_unlock(&kvm->lock);
903                         return -EINVAL;
904                 }
905                 kvm->arch.crypto.aes_kw = 0;
906                 memset(kvm->arch.crypto.crycb->aes_wrapping_key_mask, 0,
907                         sizeof(kvm->arch.crypto.crycb->aes_wrapping_key_mask));
908                 VM_EVENT(kvm, 3, "%s", "DISABLE: AES keywrapping support");
909                 break;
910         case KVM_S390_VM_CRYPTO_DISABLE_DEA_KW:
911                 if (!test_kvm_facility(kvm, 76)) {
912                         mutex_unlock(&kvm->lock);
913                         return -EINVAL;
914                 }
915                 kvm->arch.crypto.dea_kw = 0;
916                 memset(kvm->arch.crypto.crycb->dea_wrapping_key_mask, 0,
917                         sizeof(kvm->arch.crypto.crycb->dea_wrapping_key_mask));
918                 VM_EVENT(kvm, 3, "%s", "DISABLE: DEA keywrapping support");
919                 break;
920         case KVM_S390_VM_CRYPTO_ENABLE_APIE:
921                 if (!ap_instructions_available()) {
922                         mutex_unlock(&kvm->lock);
923                         return -EOPNOTSUPP;
924                 }
925                 kvm->arch.crypto.apie = 1;
926                 break;
927         case KVM_S390_VM_CRYPTO_DISABLE_APIE:
928                 if (!ap_instructions_available()) {
929                         mutex_unlock(&kvm->lock);
930                         return -EOPNOTSUPP;
931                 }
932                 kvm->arch.crypto.apie = 0;
933                 break;
934         default:
935                 mutex_unlock(&kvm->lock);
936                 return -ENXIO;
937         }
938 
939         kvm_s390_vcpu_crypto_reset_all(kvm);
940         mutex_unlock(&kvm->lock);
941         return 0;
942 }
943 
944 static void kvm_s390_sync_request_broadcast(struct kvm *kvm, int req)
945 {
946         int cx;
947         struct kvm_vcpu *vcpu;
948 
949         kvm_for_each_vcpu(cx, vcpu, kvm)
950                 kvm_s390_sync_request(req, vcpu);
951 }
952 
953 /*
954  * Must be called with kvm->srcu held to avoid races on memslots, and with
955  * kvm->slots_lock to avoid races with ourselves and kvm_s390_vm_stop_migration.
956  */
957 static int kvm_s390_vm_start_migration(struct kvm *kvm)
958 {
959         struct kvm_memory_slot *ms;
960         struct kvm_memslots *slots;
961         unsigned long ram_pages = 0;
962         int slotnr;
963 
964         /* migration mode already enabled */
965         if (kvm->arch.migration_mode)
966                 return 0;
967         slots = kvm_memslots(kvm);
968         if (!slots || !slots->used_slots)
969                 return -EINVAL;
970 
971         if (!kvm->arch.use_cmma) {
972                 kvm->arch.migration_mode = 1;
973                 return 0;
974         }
975         /* mark all the pages in active slots as dirty */
976         for (slotnr = 0; slotnr < slots->used_slots; slotnr++) {
977                 ms = slots->memslots + slotnr;
978                 /*
979                  * The second half of the bitmap is only used on x86,
980                  * and would be wasted otherwise, so we put it to good
981                  * use here to keep track of the state of the storage
982                  * attributes.
983                  */
984                 memset(kvm_second_dirty_bitmap(ms), 0xff, kvm_dirty_bitmap_bytes(ms));
985                 ram_pages += ms->npages;
986         }
987         atomic64_set(&kvm->arch.cmma_dirty_pages, ram_pages);
988         kvm->arch.migration_mode = 1;
989         kvm_s390_sync_request_broadcast(kvm, KVM_REQ_START_MIGRATION);
990         return 0;
991 }
992 
993 /*
994  * Must be called with kvm->slots_lock to avoid races with ourselves and
995  * kvm_s390_vm_start_migration.
996  */
997 static int kvm_s390_vm_stop_migration(struct kvm *kvm)
998 {
999         /* migration mode already disabled */
1000         if (!kvm->arch.migration_mode)
1001                 return 0;
1002         kvm->arch.migration_mode = 0;
1003         if (kvm->arch.use_cmma)
1004                 kvm_s390_sync_request_broadcast(kvm, KVM_REQ_STOP_MIGRATION);
1005         return 0;
1006 }
1007 
1008 static int kvm_s390_vm_set_migration(struct kvm *kvm,
1009                                      struct kvm_device_attr *attr)
1010 {
1011         int res = -ENXIO;
1012 
1013         mutex_lock(&kvm->slots_lock);
1014         switch (attr->attr) {
1015         case KVM_S390_VM_MIGRATION_START:
1016                 res = kvm_s390_vm_start_migration(kvm);
1017                 break;
1018         case KVM_S390_VM_MIGRATION_STOP:
1019                 res = kvm_s390_vm_stop_migration(kvm);
1020                 break;
1021         default:
1022                 break;
1023         }
1024         mutex_unlock(&kvm->slots_lock);
1025 
1026         return res;
1027 }
1028 
1029 static int kvm_s390_vm_get_migration(struct kvm *kvm,
1030                                      struct kvm_device_attr *attr)
1031 {
1032         u64 mig = kvm->arch.migration_mode;
1033 
1034         if (attr->attr != KVM_S390_VM_MIGRATION_STATUS)
1035                 return -ENXIO;
1036 
1037         if (copy_to_user((void __user *)attr->addr, &mig, sizeof(mig)))
1038                 return -EFAULT;
1039         return 0;
1040 }
1041 
1042 static int kvm_s390_set_tod_ext(struct kvm *kvm, struct kvm_device_attr *attr)
1043 {
1044         struct kvm_s390_vm_tod_clock gtod;
1045 
1046         if (copy_from_user(&gtod, (void __user *)attr->addr, sizeof(gtod)))
1047                 return -EFAULT;
1048 
1049         if (!test_kvm_facility(kvm, 139) && gtod.epoch_idx)
1050                 return -EINVAL;
1051         kvm_s390_set_tod_clock(kvm, &gtod);
1052 
1053         VM_EVENT(kvm, 3, "SET: TOD extension: 0x%x, TOD base: 0x%llx",
1054                 gtod.epoch_idx, gtod.tod);
1055 
1056         return 0;
1057 }
1058 
1059 static int kvm_s390_set_tod_high(struct kvm *kvm, struct kvm_device_attr *attr)
1060 {
1061         u8 gtod_high;
1062 
1063         if (copy_from_user(&gtod_high, (void __user *)attr->addr,
1064                                            sizeof(gtod_high)))
1065                 return -EFAULT;
1066 
1067         if (gtod_high != 0)
1068                 return -EINVAL;
1069         VM_EVENT(kvm, 3, "SET: TOD extension: 0x%x", gtod_high);
1070 
1071         return 0;
1072 }
1073 
1074 static int kvm_s390_set_tod_low(struct kvm *kvm, struct kvm_device_attr *attr)
1075 {
1076         struct kvm_s390_vm_tod_clock gtod = { 0 };
1077 
1078         if (copy_from_user(&gtod.tod, (void __user *)attr->addr,
1079                            sizeof(gtod.tod)))
1080                 return -EFAULT;
1081 
1082         kvm_s390_set_tod_clock(kvm, &gtod);
1083         VM_EVENT(kvm, 3, "SET: TOD base: 0x%llx", gtod.tod);
1084         return 0;
1085 }
1086 
1087 static int kvm_s390_set_tod(struct kvm *kvm, struct kvm_device_attr *attr)
1088 {
1089         int ret;
1090 
1091         if (attr->flags)
1092                 return -EINVAL;
1093 
1094         switch (attr->attr) {
1095         case KVM_S390_VM_TOD_EXT:
1096                 ret = kvm_s390_set_tod_ext(kvm, attr);
1097                 break;
1098         case KVM_S390_VM_TOD_HIGH:
1099                 ret = kvm_s390_set_tod_high(kvm, attr);
1100                 break;
1101         case KVM_S390_VM_TOD_LOW:
1102                 ret = kvm_s390_set_tod_low(kvm, attr);
1103                 break;
1104         default:
1105                 ret = -ENXIO;
1106                 break;
1107         }
1108         return ret;
1109 }
1110 
1111 static void kvm_s390_get_tod_clock(struct kvm *kvm,
1112                                    struct kvm_s390_vm_tod_clock *gtod)
1113 {
1114         struct kvm_s390_tod_clock_ext htod;
1115 
1116         preempt_disable();
1117 
1118         get_tod_clock_ext((char *)&htod);
1119 
1120         gtod->tod = htod.tod + kvm->arch.epoch;
1121         gtod->epoch_idx = 0;
1122         if (test_kvm_facility(kvm, 139)) {
1123                 gtod->epoch_idx = htod.epoch_idx + kvm->arch.epdx;
1124                 if (gtod->tod < htod.tod)
1125                         gtod->epoch_idx += 1;
1126         }
1127 
1128         preempt_enable();
1129 }
1130 
1131 static int kvm_s390_get_tod_ext(struct kvm *kvm, struct kvm_device_attr *attr)
1132 {
1133         struct kvm_s390_vm_tod_clock gtod;
1134 
1135         memset(&gtod, 0, sizeof(gtod));
1136         kvm_s390_get_tod_clock(kvm, &gtod);
1137         if (copy_to_user((void __user *)attr->addr, &gtod, sizeof(gtod)))
1138                 return -EFAULT;
1139 
1140         VM_EVENT(kvm, 3, "QUERY: TOD extension: 0x%x, TOD base: 0x%llx",
1141                 gtod.epoch_idx, gtod.tod);
1142         return 0;
1143 }
1144 
1145 static int kvm_s390_get_tod_high(struct kvm *kvm, struct kvm_device_attr *attr)
1146 {
1147         u8 gtod_high = 0;
1148 
1149         if (copy_to_user((void __user *)attr->addr, &gtod_high,
1150                                          sizeof(gtod_high)))
1151                 return -EFAULT;
1152         VM_EVENT(kvm, 3, "QUERY: TOD extension: 0x%x", gtod_high);
1153 
1154         return 0;
1155 }
1156 
1157 static int kvm_s390_get_tod_low(struct kvm *kvm, struct kvm_device_attr *attr)
1158 {
1159         u64 gtod;
1160 
1161         gtod = kvm_s390_get_tod_clock_fast(kvm);
1162         if (copy_to_user((void __user *)attr->addr, &gtod, sizeof(gtod)))
1163                 return -EFAULT;
1164         VM_EVENT(kvm, 3, "QUERY: TOD base: 0x%llx", gtod);
1165 
1166         return 0;
1167 }
1168 
1169 static int kvm_s390_get_tod(struct kvm *kvm, struct kvm_device_attr *attr)
1170 {
1171         int ret;
1172 
1173         if (attr->flags)
1174                 return -EINVAL;
1175 
1176         switch (attr->attr) {
1177         case KVM_S390_VM_TOD_EXT:
1178                 ret = kvm_s390_get_tod_ext(kvm, attr);
1179                 break;
1180         case KVM_S390_VM_TOD_HIGH:
1181                 ret = kvm_s390_get_tod_high(kvm, attr);
1182                 break;
1183         case KVM_S390_VM_TOD_LOW:
1184                 ret = kvm_s390_get_tod_low(kvm, attr);
1185                 break;
1186         default:
1187                 ret = -ENXIO;
1188                 break;
1189         }
1190         return ret;
1191 }
1192 
1193 static int kvm_s390_set_processor(struct kvm *kvm, struct kvm_device_attr *attr)
1194 {
1195         struct kvm_s390_vm_cpu_processor *proc;
1196         u16 lowest_ibc, unblocked_ibc;
1197         int ret = 0;
1198 
1199         mutex_lock(&kvm->lock);
1200         if (kvm->created_vcpus) {
1201                 ret = -EBUSY;
1202                 goto out;
1203         }
1204         proc = kzalloc(sizeof(*proc), GFP_KERNEL);
1205         if (!proc) {
1206                 ret = -ENOMEM;
1207                 goto out;
1208         }
1209         if (!copy_from_user(proc, (void __user *)attr->addr,
1210                             sizeof(*proc))) {
1211                 kvm->arch.model.cpuid = proc->cpuid;
1212                 lowest_ibc = sclp.ibc >> 16 & 0xfff;
1213                 unblocked_ibc = sclp.ibc & 0xfff;
1214                 if (lowest_ibc && proc->ibc) {
1215                         if (proc->ibc > unblocked_ibc)
1216                                 kvm->arch.model.ibc = unblocked_ibc;
1217                         else if (proc->ibc < lowest_ibc)
1218                                 kvm->arch.model.ibc = lowest_ibc;
1219                         else
1220                                 kvm->arch.model.ibc = proc->ibc;
1221                 }
1222                 memcpy(kvm->arch.model.fac_list, proc->fac_list,
1223                        S390_ARCH_FAC_LIST_SIZE_BYTE);
1224                 VM_EVENT(kvm, 3, "SET: guest ibc: 0x%4.4x, guest cpuid: 0x%16.16llx",
1225                          kvm->arch.model.ibc,
1226                          kvm->arch.model.cpuid);
1227                 VM_EVENT(kvm, 3, "SET: guest faclist: 0x%16.16llx.%16.16llx.%16.16llx",
1228                          kvm->arch.model.fac_list[0],
1229                          kvm->arch.model.fac_list[1],
1230                          kvm->arch.model.fac_list[2]);
1231         } else
1232                 ret = -EFAULT;
1233         kfree(proc);
1234 out:
1235         mutex_unlock(&kvm->lock);
1236         return ret;
1237 }
1238 
1239 static int kvm_s390_set_processor_feat(struct kvm *kvm,
1240                                        struct kvm_device_attr *attr)
1241 {
1242         struct kvm_s390_vm_cpu_feat data;
1243 
1244         if (copy_from_user(&data, (void __user *)attr->addr, sizeof(data)))
1245                 return -EFAULT;
1246         if (!bitmap_subset((unsigned long *) data.feat,
1247                            kvm_s390_available_cpu_feat,
1248                            KVM_S390_VM_CPU_FEAT_NR_BITS))
1249                 return -EINVAL;
1250 
1251         mutex_lock(&kvm->lock);
1252         if (kvm->created_vcpus) {
1253                 mutex_unlock(&kvm->lock);
1254                 return -EBUSY;
1255         }
1256         bitmap_copy(kvm->arch.cpu_feat, (unsigned long *) data.feat,
1257                     KVM_S390_VM_CPU_FEAT_NR_BITS);
1258         mutex_unlock(&kvm->lock);
1259         VM_EVENT(kvm, 3, "SET: guest feat: 0x%16.16llx.0x%16.16llx.0x%16.16llx",
1260                          data.feat[0],
1261                          data.feat[1],
1262                          data.feat[2]);
1263         return 0;
1264 }
1265 
1266 static int kvm_s390_set_processor_subfunc(struct kvm *kvm,
1267                                           struct kvm_device_attr *attr)
1268 {
1269         mutex_lock(&kvm->lock);
1270         if (kvm->created_vcpus) {
1271                 mutex_unlock(&kvm->lock);
1272                 return -EBUSY;
1273         }
1274 
1275         if (copy_from_user(&kvm->arch.model.subfuncs, (void __user *)attr->addr,
1276                            sizeof(struct kvm_s390_vm_cpu_subfunc))) {
1277                 mutex_unlock(&kvm->lock);
1278                 return -EFAULT;
1279         }
1280         mutex_unlock(&kvm->lock);
1281 
1282         VM_EVENT(kvm, 3, "SET: guest PLO    subfunc 0x%16.16lx.%16.16lx.%16.16lx.%16.16lx",
1283                  ((unsigned long *) &kvm->arch.model.subfuncs.plo)[0],
1284                  ((unsigned long *) &kvm->arch.model.subfuncs.plo)[1],
1285                  ((unsigned long *) &kvm->arch.model.subfuncs.plo)[2],
1286                  ((unsigned long *) &kvm->arch.model.subfuncs.plo)[3]);
1287         VM_EVENT(kvm, 3, "SET: guest PTFF   subfunc 0x%16.16lx.%16.16lx",
1288                  ((unsigned long *) &kvm->arch.model.subfuncs.ptff)[0],
1289                  ((unsigned long *) &kvm->arch.model.subfuncs.ptff)[1]);
1290         VM_EVENT(kvm, 3, "SET: guest KMAC   subfunc 0x%16.16lx.%16.16lx",
1291                  ((unsigned long *) &kvm->arch.model.subfuncs.kmac)[0],
1292                  ((unsigned long *) &kvm->arch.model.subfuncs.kmac)[1]);
1293         VM_EVENT(kvm, 3, "SET: guest KMC    subfunc 0x%16.16lx.%16.16lx",
1294                  ((unsigned long *) &kvm->arch.model.subfuncs.kmc)[0],
1295                  ((unsigned long *) &kvm->arch.model.subfuncs.kmc)[1]);
1296         VM_EVENT(kvm, 3, "SET: guest KM     subfunc 0x%16.16lx.%16.16lx",
1297                  ((unsigned long *) &kvm->arch.model.subfuncs.km)[0],
1298                  ((unsigned long *) &kvm->arch.model.subfuncs.km)[1]);
1299         VM_EVENT(kvm, 3, "SET: guest KIMD   subfunc 0x%16.16lx.%16.16lx",
1300                  ((unsigned long *) &kvm->arch.model.subfuncs.kimd)[0],
1301                  ((unsigned long *) &kvm->arch.model.subfuncs.kimd)[1]);
1302         VM_EVENT(kvm, 3, "SET: guest KLMD   subfunc 0x%16.16lx.%16.16lx",
1303                  ((unsigned long *) &kvm->arch.model.subfuncs.klmd)[0],
1304                  ((unsigned long *) &kvm->arch.model.subfuncs.klmd)[1]);
1305         VM_EVENT(kvm, 3, "SET: guest PCKMO  subfunc 0x%16.16lx.%16.16lx",
1306                  ((unsigned long *) &kvm->arch.model.subfuncs.pckmo)[0],
1307                  ((unsigned long *) &kvm->arch.model.subfuncs.pckmo)[1]);
1308         VM_EVENT(kvm, 3, "SET: guest KMCTR  subfunc 0x%16.16lx.%16.16lx",
1309                  ((unsigned long *) &kvm->arch.model.subfuncs.kmctr)[0],
1310                  ((unsigned long *) &kvm->arch.model.subfuncs.kmctr)[1]);
1311         VM_EVENT(kvm, 3, "SET: guest KMF    subfunc 0x%16.16lx.%16.16lx",
1312                  ((unsigned long *) &kvm->arch.model.subfuncs.kmf)[0],
1313                  ((unsigned long *) &kvm->arch.model.subfuncs.kmf)[1]);
1314         VM_EVENT(kvm, 3, "SET: guest KMO    subfunc 0x%16.16lx.%16.16lx",
1315                  ((unsigned long *) &kvm->arch.model.subfuncs.kmo)[0],
1316                  ((unsigned long *) &kvm->arch.model.subfuncs.kmo)[1]);
1317         VM_EVENT(kvm, 3, "SET: guest PCC    subfunc 0x%16.16lx.%16.16lx",
1318                  ((unsigned long *) &kvm->arch.model.subfuncs.pcc)[0],
1319                  ((unsigned long *) &kvm->arch.model.subfuncs.pcc)[1]);
1320         VM_EVENT(kvm, 3, "SET: guest PPNO   subfunc 0x%16.16lx.%16.16lx",
1321                  ((unsigned long *) &kvm->arch.model.subfuncs.ppno)[0],
1322                  ((unsigned long *) &kvm->arch.model.subfuncs.ppno)[1]);
1323         VM_EVENT(kvm, 3, "SET: guest KMA    subfunc 0x%16.16lx.%16.16lx",
1324                  ((unsigned long *) &kvm->arch.model.subfuncs.kma)[0],
1325                  ((unsigned long *) &kvm->arch.model.subfuncs.kma)[1]);
1326 
1327         return 0;
1328 }
1329 
1330 static int kvm_s390_set_cpu_model(struct kvm *kvm, struct kvm_device_attr *attr)
1331 {
1332         int ret = -ENXIO;
1333 
1334         switch (attr->attr) {
1335         case KVM_S390_VM_CPU_PROCESSOR:
1336                 ret = kvm_s390_set_processor(kvm, attr);
1337                 break;
1338         case KVM_S390_VM_CPU_PROCESSOR_FEAT:
1339                 ret = kvm_s390_set_processor_feat(kvm, attr);
1340                 break;
1341         case KVM_S390_VM_CPU_PROCESSOR_SUBFUNC:
1342                 ret = kvm_s390_set_processor_subfunc(kvm, attr);
1343                 break;
1344         }
1345         return ret;
1346 }
1347 
1348 static int kvm_s390_get_processor(struct kvm *kvm, struct kvm_device_attr *attr)
1349 {
1350         struct kvm_s390_vm_cpu_processor *proc;
1351         int ret = 0;
1352 
1353         proc = kzalloc(sizeof(*proc), GFP_KERNEL);
1354         if (!proc) {
1355                 ret = -ENOMEM;
1356                 goto out;
1357         }
1358         proc->cpuid = kvm->arch.model.cpuid;
1359         proc->ibc = kvm->arch.model.ibc;
1360         memcpy(&proc->fac_list, kvm->arch.model.fac_list,
1361                S390_ARCH_FAC_LIST_SIZE_BYTE);
1362         VM_EVENT(kvm, 3, "GET: guest ibc: 0x%4.4x, guest cpuid: 0x%16.16llx",
1363                  kvm->arch.model.ibc,
1364                  kvm->arch.model.cpuid);
1365         VM_EVENT(kvm, 3, "GET: guest faclist: 0x%16.16llx.%16.16llx.%16.16llx",
1366                  kvm->arch.model.fac_list[0],
1367                  kvm->arch.model.fac_list[1],
1368                  kvm->arch.model.fac_list[2]);
1369         if (copy_to_user((void __user *)attr->addr, proc, sizeof(*proc)))
1370                 ret = -EFAULT;
1371         kfree(proc);
1372 out:
1373         return ret;
1374 }
1375 
1376 static int kvm_s390_get_machine(struct kvm *kvm, struct kvm_device_attr *attr)
1377 {
1378         struct kvm_s390_vm_cpu_machine *mach;
1379         int ret = 0;
1380 
1381         mach = kzalloc(sizeof(*mach), GFP_KERNEL);
1382         if (!mach) {
1383                 ret = -ENOMEM;
1384                 goto out;
1385         }
1386         get_cpu_id((struct cpuid *) &mach->cpuid);
1387         mach->ibc = sclp.ibc;
1388         memcpy(&mach->fac_mask, kvm->arch.model.fac_mask,
1389                S390_ARCH_FAC_LIST_SIZE_BYTE);
1390         memcpy((unsigned long *)&mach->fac_list, S390_lowcore.stfle_fac_list,
1391                sizeof(S390_lowcore.stfle_fac_list));
1392         VM_EVENT(kvm, 3, "GET: host ibc:  0x%4.4x, host cpuid:  0x%16.16llx",
1393                  kvm->arch.model.ibc,
1394                  kvm->arch.model.cpuid);
1395         VM_EVENT(kvm, 3, "GET: host facmask:  0x%16.16llx.%16.16llx.%16.16llx",
1396                  mach->fac_mask[0],
1397                  mach->fac_mask[1],
1398                  mach->fac_mask[2]);
1399         VM_EVENT(kvm, 3, "GET: host faclist:  0x%16.16llx.%16.16llx.%16.16llx",
1400                  mach->fac_list[0],
1401                  mach->fac_list[1],
1402                  mach->fac_list[2]);
1403         if (copy_to_user((void __user *)attr->addr, mach, sizeof(*mach)))
1404                 ret = -EFAULT;
1405         kfree(mach);
1406 out:
1407         return ret;
1408 }
1409 
1410 static int kvm_s390_get_processor_feat(struct kvm *kvm,
1411                                        struct kvm_device_attr *attr)
1412 {
1413         struct kvm_s390_vm_cpu_feat data;
1414 
1415         bitmap_copy((unsigned long *) data.feat, kvm->arch.cpu_feat,
1416                     KVM_S390_VM_CPU_FEAT_NR_BITS);
1417         if (copy_to_user((void __user *)attr->addr, &data, sizeof(data)))
1418                 return -EFAULT;
1419         VM_EVENT(kvm, 3, "GET: guest feat: 0x%16.16llx.0x%16.16llx.0x%16.16llx",
1420                          data.feat[0],
1421                          data.feat[1],
1422                          data.feat[2]);
1423         return 0;
1424 }
1425 
1426 static int kvm_s390_get_machine_feat(struct kvm *kvm,
1427                                      struct kvm_device_attr *attr)
1428 {
1429         struct kvm_s390_vm_cpu_feat data;
1430 
1431         bitmap_copy((unsigned long *) data.feat,
1432                     kvm_s390_available_cpu_feat,
1433                     KVM_S390_VM_CPU_FEAT_NR_BITS);
1434         if (copy_to_user((void __user *)attr->addr, &data, sizeof(data)))
1435                 return -EFAULT;
1436         VM_EVENT(kvm, 3, "GET: host feat:  0x%16.16llx.0x%16.16llx.0x%16.16llx",
1437                          data.feat[0],
1438                          data.feat[1],
1439                          data.feat[2]);
1440         return 0;
1441 }
1442 
1443 static int kvm_s390_get_processor_subfunc(struct kvm *kvm,
1444                                           struct kvm_device_attr *attr)
1445 {
1446         if (copy_to_user((void __user *)attr->addr, &kvm->arch.model.subfuncs,
1447             sizeof(struct kvm_s390_vm_cpu_subfunc)))
1448                 return -EFAULT;
1449 
1450         VM_EVENT(kvm, 3, "GET: guest PLO    subfunc 0x%16.16lx.%16.16lx.%16.16lx.%16.16lx",
1451                  ((unsigned long *) &kvm->arch.model.subfuncs.plo)[0],
1452                  ((unsigned long *) &kvm->arch.model.subfuncs.plo)[1],
1453                  ((unsigned long *) &kvm->arch.model.subfuncs.plo)[2],
1454                  ((unsigned long *) &kvm->arch.model.subfuncs.plo)[3]);
1455         VM_EVENT(kvm, 3, "GET: guest PTFF   subfunc 0x%16.16lx.%16.16lx",
1456                  ((unsigned long *) &kvm->arch.model.subfuncs.ptff)[0],
1457                  ((unsigned long *) &kvm->arch.model.subfuncs.ptff)[1]);
1458         VM_EVENT(kvm, 3, "GET: guest KMAC   subfunc 0x%16.16lx.%16.16lx",
1459                  ((unsigned long *) &kvm->arch.model.subfuncs.kmac)[0],
1460                  ((unsigned long *) &kvm->arch.model.subfuncs.kmac)[1]);
1461         VM_EVENT(kvm, 3, "GET: guest KMC    subfunc 0x%16.16lx.%16.16lx",
1462                  ((unsigned long *) &kvm->arch.model.subfuncs.kmc)[0],
1463                  ((unsigned long *) &kvm->arch.model.subfuncs.kmc)[1]);
1464         VM_EVENT(kvm, 3, "GET: guest KM     subfunc 0x%16.16lx.%16.16lx",
1465                  ((unsigned long *) &kvm->arch.model.subfuncs.km)[0],
1466                  ((unsigned long *) &kvm->arch.model.subfuncs.km)[1]);
1467         VM_EVENT(kvm, 3, "GET: guest KIMD   subfunc 0x%16.16lx.%16.16lx",
1468                  ((unsigned long *) &kvm->arch.model.subfuncs.kimd)[0],
1469                  ((unsigned long *) &kvm->arch.model.subfuncs.kimd)[1]);
1470         VM_EVENT(kvm, 3, "GET: guest KLMD   subfunc 0x%16.16lx.%16.16lx",
1471                  ((unsigned long *) &kvm->arch.model.subfuncs.klmd)[0],
1472                  ((unsigned long *) &kvm->arch.model.subfuncs.klmd)[1]);
1473         VM_EVENT(kvm, 3, "GET: guest PCKMO  subfunc 0x%16.16lx.%16.16lx",
1474                  ((unsigned long *) &kvm->arch.model.subfuncs.pckmo)[0],
1475                  ((unsigned long *) &kvm->arch.model.subfuncs.pckmo)[1]);
1476         VM_EVENT(kvm, 3, "GET: guest KMCTR  subfunc 0x%16.16lx.%16.16lx",
1477                  ((unsigned long *) &kvm->arch.model.subfuncs.kmctr)[0],
1478                  ((unsigned long *) &kvm->arch.model.subfuncs.kmctr)[1]);
1479         VM_EVENT(kvm, 3, "GET: guest KMF    subfunc 0x%16.16lx.%16.16lx",
1480                  ((unsigned long *) &kvm->arch.model.subfuncs.kmf)[0],
1481                  ((unsigned long *) &kvm->arch.model.subfuncs.kmf)[1]);
1482         VM_EVENT(kvm, 3, "GET: guest KMO    subfunc 0x%16.16lx.%16.16lx",
1483                  ((unsigned long *) &kvm->arch.model.subfuncs.kmo)[0],
1484                  ((unsigned long *) &kvm->arch.model.subfuncs.kmo)[1]);
1485         VM_EVENT(kvm, 3, "GET: guest PCC    subfunc 0x%16.16lx.%16.16lx",
1486                  ((unsigned long *) &kvm->arch.model.subfuncs.pcc)[0],
1487                  ((unsigned long *) &kvm->arch.model.subfuncs.pcc)[1]);
1488         VM_EVENT(kvm, 3, "GET: guest PPNO   subfunc 0x%16.16lx.%16.16lx",
1489                  ((unsigned long *) &kvm->arch.model.subfuncs.ppno)[0],
1490                  ((unsigned long *) &kvm->arch.model.subfuncs.ppno)[1]);
1491         VM_EVENT(kvm, 3, "GET: guest KMA    subfunc 0x%16.16lx.%16.16lx",
1492                  ((unsigned long *) &kvm->arch.model.subfuncs.kma)[0],
1493                  ((unsigned long *) &kvm->arch.model.subfuncs.kma)[1]);
1494 
1495         return 0;
1496 }
1497 
1498 static int kvm_s390_get_machine_subfunc(struct kvm *kvm,
1499                                         struct kvm_device_attr *attr)
1500 {
1501         if (copy_to_user((void __user *)attr->addr, &kvm_s390_available_subfunc,
1502             sizeof(struct kvm_s390_vm_cpu_subfunc)))
1503                 return -EFAULT;
1504 
1505         VM_EVENT(kvm, 3, "GET: host  PLO    subfunc 0x%16.16lx.%16.16lx.%16.16lx.%16.16lx",
1506                  ((unsigned long *) &kvm_s390_available_subfunc.plo)[0],
1507                  ((unsigned long *) &kvm_s390_available_subfunc.plo)[1],
1508                  ((unsigned long *) &kvm_s390_available_subfunc.plo)[2],
1509                  ((unsigned long *) &kvm_s390_available_subfunc.plo)[3]);
1510         VM_EVENT(kvm, 3, "GET: host  PTFF   subfunc 0x%16.16lx.%16.16lx",
1511                  ((unsigned long *) &kvm_s390_available_subfunc.ptff)[0],
1512                  ((unsigned long *) &kvm_s390_available_subfunc.ptff)[1]);
1513         VM_EVENT(kvm, 3, "GET: host  KMAC   subfunc 0x%16.16lx.%16.16lx",
1514                  ((unsigned long *) &kvm_s390_available_subfunc.kmac)[0],
1515                  ((unsigned long *) &kvm_s390_available_subfunc.kmac)[1]);
1516         VM_EVENT(kvm, 3, "GET: host  KMC    subfunc 0x%16.16lx.%16.16lx",
1517                  ((unsigned long *) &kvm_s390_available_subfunc.kmc)[0],
1518                  ((unsigned long *) &kvm_s390_available_subfunc.kmc)[1]);
1519         VM_EVENT(kvm, 3, "GET: host  KM     subfunc 0x%16.16lx.%16.16lx",
1520                  ((unsigned long *) &kvm_s390_available_subfunc.km)[0],
1521                  ((unsigned long *) &kvm_s390_available_subfunc.km)[1]);
1522         VM_EVENT(kvm, 3, "GET: host  KIMD   subfunc 0x%16.16lx.%16.16lx",
1523                  ((unsigned long *) &kvm_s390_available_subfunc.kimd)[0],
1524                  ((unsigned long *) &kvm_s390_available_subfunc.kimd)[1]);
1525         VM_EVENT(kvm, 3, "GET: host  KLMD   subfunc 0x%16.16lx.%16.16lx",
1526                  ((unsigned long *) &kvm_s390_available_subfunc.klmd)[0],
1527                  ((unsigned long *) &kvm_s390_available_subfunc.klmd)[1]);
1528         VM_EVENT(kvm, 3, "GET: host  PCKMO  subfunc 0x%16.16lx.%16.16lx",
1529                  ((unsigned long *) &kvm_s390_available_subfunc.pckmo)[0],
1530                  ((unsigned long *) &kvm_s390_available_subfunc.pckmo)[1]);
1531         VM_EVENT(kvm, 3, "GET: host  KMCTR  subfunc 0x%16.16lx.%16.16lx",
1532                  ((unsigned long *) &kvm_s390_available_subfunc.kmctr)[0],
1533                  ((unsigned long *) &kvm_s390_available_subfunc.kmctr)[1]);
1534         VM_EVENT(kvm, 3, "GET: host  KMF    subfunc 0x%16.16lx.%16.16lx",
1535                  ((unsigned long *) &kvm_s390_available_subfunc.kmf)[0],
1536                  ((unsigned long *) &kvm_s390_available_subfunc.kmf)[1]);
1537         VM_EVENT(kvm, 3, "GET: host  KMO    subfunc 0x%16.16lx.%16.16lx",
1538                  ((unsigned long *) &kvm_s390_available_subfunc.kmo)[0],
1539                  ((unsigned long *) &kvm_s390_available_subfunc.kmo)[1]);
1540         VM_EVENT(kvm, 3, "GET: host  PCC    subfunc 0x%16.16lx.%16.16lx",
1541                  ((unsigned long *) &kvm_s390_available_subfunc.pcc)[0],
1542                  ((unsigned long *) &kvm_s390_available_subfunc.pcc)[1]);
1543         VM_EVENT(kvm, 3, "GET: host  PPNO   subfunc 0x%16.16lx.%16.16lx",
1544                  ((unsigned long *) &kvm_s390_available_subfunc.ppno)[0],
1545                  ((unsigned long *) &kvm_s390_available_subfunc.ppno)[1]);
1546         VM_EVENT(kvm, 3, "GET: host  KMA    subfunc 0x%16.16lx.%16.16lx",
1547                  ((unsigned long *) &kvm_s390_available_subfunc.kma)[0],
1548                  ((unsigned long *) &kvm_s390_available_subfunc.kma)[1]);
1549 
1550         return 0;
1551 }
1552 
1553 static int kvm_s390_get_cpu_model(struct kvm *kvm, struct kvm_device_attr *attr)
1554 {
1555         int ret = -ENXIO;
1556 
1557         switch (attr->attr) {
1558         case KVM_S390_VM_CPU_PROCESSOR:
1559                 ret = kvm_s390_get_processor(kvm, attr);
1560                 break;
1561         case KVM_S390_VM_CPU_MACHINE:
1562                 ret = kvm_s390_get_machine(kvm, attr);
1563                 break;
1564         case KVM_S390_VM_CPU_PROCESSOR_FEAT:
1565                 ret = kvm_s390_get_processor_feat(kvm, attr);
1566                 break;
1567         case KVM_S390_VM_CPU_MACHINE_FEAT:
1568                 ret = kvm_s390_get_machine_feat(kvm, attr);
1569                 break;
1570         case KVM_S390_VM_CPU_PROCESSOR_SUBFUNC:
1571                 ret = kvm_s390_get_processor_subfunc(kvm, attr);
1572                 break;
1573         case KVM_S390_VM_CPU_MACHINE_SUBFUNC:
1574                 ret = kvm_s390_get_machine_subfunc(kvm, attr);
1575                 break;
1576         }
1577         return ret;
1578 }
1579 
1580 static int kvm_s390_vm_set_attr(struct kvm *kvm, struct kvm_device_attr *attr)
1581 {
1582         int ret;
1583 
1584         switch (attr->group) {
1585         case KVM_S390_VM_MEM_CTRL:
1586                 ret = kvm_s390_set_mem_control(kvm, attr);
1587                 break;
1588         case KVM_S390_VM_TOD:
1589                 ret = kvm_s390_set_tod(kvm, attr);
1590                 break;
1591         case KVM_S390_VM_CPU_MODEL:
1592                 ret = kvm_s390_set_cpu_model(kvm, attr);
1593                 break;
1594         case KVM_S390_VM_CRYPTO:
1595                 ret = kvm_s390_vm_set_crypto(kvm, attr);
1596                 break;
1597         case KVM_S390_VM_MIGRATION:
1598                 ret = kvm_s390_vm_set_migration(kvm, attr);
1599                 break;
1600         default:
1601                 ret = -ENXIO;
1602                 break;
1603         }
1604 
1605         return ret;
1606 }
1607 
1608 static int kvm_s390_vm_get_attr(struct kvm *kvm, struct kvm_device_attr *attr)
1609 {
1610         int ret;
1611 
1612         switch (attr->group) {
1613         case KVM_S390_VM_MEM_CTRL:
1614                 ret = kvm_s390_get_mem_control(kvm, attr);
1615                 break;
1616         case KVM_S390_VM_TOD:
1617                 ret = kvm_s390_get_tod(kvm, attr);
1618                 break;
1619         case KVM_S390_VM_CPU_MODEL:
1620                 ret = kvm_s390_get_cpu_model(kvm, attr);
1621                 break;
1622         case KVM_S390_VM_MIGRATION:
1623                 ret = kvm_s390_vm_get_migration(kvm, attr);
1624                 break;
1625         default:
1626                 ret = -ENXIO;
1627                 break;
1628         }
1629 
1630         return ret;
1631 }
1632 
1633 static int kvm_s390_vm_has_attr(struct kvm *kvm, struct kvm_device_attr *attr)
1634 {
1635         int ret;
1636 
1637         switch (attr->group) {
1638         case KVM_S390_VM_MEM_CTRL:
1639                 switch (attr->attr) {
1640                 case KVM_S390_VM_MEM_ENABLE_CMMA:
1641                 case KVM_S390_VM_MEM_CLR_CMMA:
1642                         ret = sclp.has_cmma ? 0 : -ENXIO;
1643                         break;
1644                 case KVM_S390_VM_MEM_LIMIT_SIZE:
1645                         ret = 0;
1646                         break;
1647                 default:
1648                         ret = -ENXIO;
1649                         break;
1650                 }
1651                 break;
1652         case KVM_S390_VM_TOD:
1653                 switch (attr->attr) {
1654                 case KVM_S390_VM_TOD_LOW:
1655                 case KVM_S390_VM_TOD_HIGH:
1656                         ret = 0;
1657                         break;
1658                 default:
1659                         ret = -ENXIO;
1660                         break;
1661                 }
1662                 break;
1663         case KVM_S390_VM_CPU_MODEL:
1664                 switch (attr->attr) {
1665                 case KVM_S390_VM_CPU_PROCESSOR:
1666                 case KVM_S390_VM_CPU_MACHINE:
1667                 case KVM_S390_VM_CPU_PROCESSOR_FEAT:
1668                 case KVM_S390_VM_CPU_MACHINE_FEAT:
1669                 case KVM_S390_VM_CPU_MACHINE_SUBFUNC:
1670                 case KVM_S390_VM_CPU_PROCESSOR_SUBFUNC:
1671                         ret = 0;
1672                         break;
1673                 default:
1674                         ret = -ENXIO;
1675                         break;
1676                 }
1677                 break;
1678         case KVM_S390_VM_CRYPTO:
1679                 switch (attr->attr) {
1680                 case KVM_S390_VM_CRYPTO_ENABLE_AES_KW:
1681                 case KVM_S390_VM_CRYPTO_ENABLE_DEA_KW:
1682                 case KVM_S390_VM_CRYPTO_DISABLE_AES_KW:
1683                 case KVM_S390_VM_CRYPTO_DISABLE_DEA_KW:
1684                         ret = 0;
1685                         break;
1686                 case KVM_S390_VM_CRYPTO_ENABLE_APIE:
1687                 case KVM_S390_VM_CRYPTO_DISABLE_APIE:
1688                         ret = ap_instructions_available() ? 0 : -ENXIO;
1689                         break;
1690                 default:
1691                         ret = -ENXIO;
1692                         break;
1693                 }
1694                 break;
1695         case KVM_S390_VM_MIGRATION:
1696                 ret = 0;
1697                 break;
1698         default:
1699                 ret = -ENXIO;
1700                 break;
1701         }
1702 
1703         return ret;
1704 }
1705 
1706 static long kvm_s390_get_skeys(struct kvm *kvm, struct kvm_s390_skeys *args)
1707 {
1708         uint8_t *keys;
1709         uint64_t hva;
1710         int srcu_idx, i, r = 0;
1711 
1712         if (args->flags != 0)
1713                 return -EINVAL;
1714 
1715         /* Is this guest using storage keys? */
1716         if (!mm_uses_skeys(current->mm))
1717                 return KVM_S390_GET_SKEYS_NONE;
1718 
1719         /* Enforce sane limit on memory allocation */
1720         if (args->count < 1 || args->count > KVM_S390_SKEYS_MAX)
1721                 return -EINVAL;
1722 
1723         keys = kvmalloc_array(args->count, sizeof(uint8_t), GFP_KERNEL);
1724         if (!keys)
1725                 return -ENOMEM;
1726 
1727         down_read(&current->mm->mmap_sem);
1728         srcu_idx = srcu_read_lock(&kvm->srcu);
1729         for (i = 0; i < args->count; i++) {
1730                 hva = gfn_to_hva(kvm, args->start_gfn + i);
1731                 if (kvm_is_error_hva(hva)) {
1732                         r = -EFAULT;
1733                         break;
1734                 }
1735 
1736                 r = get_guest_storage_key(current->mm, hva, &keys[i]);
1737                 if (r)
1738                         break;
1739         }
1740         srcu_read_unlock(&kvm->srcu, srcu_idx);
1741         up_read(&current->mm->mmap_sem);
1742 
1743         if (!r) {
1744                 r = copy_to_user((uint8_t __user *)args->skeydata_addr, keys,
1745                                  sizeof(uint8_t) * args->count);
1746                 if (r)
1747                         r = -EFAULT;
1748         }
1749 
1750         kvfree(keys);
1751         return r;
1752 }
1753 
1754 static long kvm_s390_set_skeys(struct kvm *kvm, struct kvm_s390_skeys *args)
1755 {
1756         uint8_t *keys;
1757         uint64_t hva;
1758         int srcu_idx, i, r = 0;
1759         bool unlocked;
1760 
1761         if (args->flags != 0)
1762                 return -EINVAL;
1763 
1764         /* Enforce sane limit on memory allocation */
1765         if (args->count < 1 || args->count > KVM_S390_SKEYS_MAX)
1766                 return -EINVAL;
1767 
1768         keys = kvmalloc_array(args->count, sizeof(uint8_t), GFP_KERNEL);
1769         if (!keys)
1770                 return -ENOMEM;
1771 
1772         r = copy_from_user(keys, (uint8_t __user *)args->skeydata_addr,
1773                            sizeof(uint8_t) * args->count);
1774         if (r) {
1775                 r = -EFAULT;
1776                 goto out;
1777         }
1778 
1779         /* Enable storage key handling for the guest */
1780         r = s390_enable_skey();
1781         if (r)
1782                 goto out;
1783 
1784         i = 0;
1785         down_read(&current->mm->mmap_sem);
1786         srcu_idx = srcu_read_lock(&kvm->srcu);
1787         while (i < args->count) {
1788                 unlocked = false;
1789                 hva = gfn_to_hva(kvm, args->start_gfn + i);
1790                 if (kvm_is_error_hva(hva)) {
1791                         r = -EFAULT;
1792                         break;
1793                 }
1794 
1795                 /* Lowest order bit is reserved */
1796                 if (keys[i] & 0x01) {
1797                         r = -EINVAL;
1798                         break;
1799                 }
1800 
1801                 r = set_guest_storage_key(current->mm, hva, keys[i], 0);
1802                 if (r) {
1803                         r = fixup_user_fault(current, current->mm, hva,
1804                                              FAULT_FLAG_WRITE, &unlocked);
1805                         if (r)
1806                                 break;
1807                 }
1808                 if (!r)
1809                         i++;
1810         }
1811         srcu_read_unlock(&kvm->srcu, srcu_idx);
1812         up_read(&current->mm->mmap_sem);
1813 out:
1814         kvfree(keys);
1815         return r;
1816 }
1817 
1818 /*
1819  * Base address and length must be sent at the start of each block, therefore
1820  * it's cheaper to send some clean data, as long as it's less than the size of
1821  * two longs.
1822  */
1823 #define KVM_S390_MAX_BIT_DISTANCE (2 * sizeof(void *))
1824 /* for consistency */
1825 #define KVM_S390_CMMA_SIZE_MAX ((u32)KVM_S390_SKEYS_MAX)
1826 
1827 /*
1828  * Similar to gfn_to_memslot, but returns the index of a memslot also when the
1829  * address falls in a hole. In that case the index of one of the memslots
1830  * bordering the hole is returned.
1831  */
1832 static int gfn_to_memslot_approx(struct kvm_memslots *slots, gfn_t gfn)
1833 {
1834         int start = 0, end = slots->used_slots;
1835         int slot = atomic_read(&slots->lru_slot);
1836         struct kvm_memory_slot *memslots = slots->memslots;
1837 
1838         if (gfn >= memslots[slot].base_gfn &&
1839             gfn < memslots[slot].base_gfn + memslots[slot].npages)
1840                 return slot;
1841 
1842         while (start < end) {
1843                 slot = start + (end - start) / 2;
1844 
1845                 if (gfn >= memslots[slot].base_gfn)
1846                         end = slot;
1847                 else
1848                         start = slot + 1;
1849         }
1850 
1851         if (gfn >= memslots[start].base_gfn &&
1852             gfn < memslots[start].base_gfn + memslots[start].npages) {
1853                 atomic_set(&slots->lru_slot, start);
1854         }
1855 
1856         return start;
1857 }
1858 
1859 static int kvm_s390_peek_cmma(struct kvm *kvm, struct kvm_s390_cmma_log *args,
1860                               u8 *res, unsigned long bufsize)
1861 {
1862         unsigned long pgstev, hva, cur_gfn = args->start_gfn;
1863 
1864         args->count = 0;
1865         while (args->count < bufsize) {
1866                 hva = gfn_to_hva(kvm, cur_gfn);
1867                 /*
1868                  * We return an error if the first value was invalid, but we
1869                  * return successfully if at least one value was copied.
1870                  */
1871                 if (kvm_is_error_hva(hva))
1872                         return args->count ? 0 : -EFAULT;
1873                 if (get_pgste(kvm->mm, hva, &pgstev) < 0)
1874                         pgstev = 0;
1875                 res[args->count++] = (pgstev >> 24) & 0x43;
1876                 cur_gfn++;
1877         }
1878 
1879         return 0;
1880 }
1881 
1882 static unsigned long kvm_s390_next_dirty_cmma(struct kvm_memslots *slots,
1883                                               unsigned long cur_gfn)
1884 {
1885         int slotidx = gfn_to_memslot_approx(slots, cur_gfn);
1886         struct kvm_memory_slot *ms = slots->memslots + slotidx;
1887         unsigned long ofs = cur_gfn - ms->base_gfn;
1888 
1889         if (ms->base_gfn + ms->npages <= cur_gfn) {
1890                 slotidx--;
1891                 /* If we are above the highest slot, wrap around */
1892                 if (slotidx < 0)
1893                         slotidx = slots->used_slots - 1;
1894 
1895                 ms = slots->memslots + slotidx;
1896                 ofs = 0;
1897         }
1898         ofs = find_next_bit(kvm_second_dirty_bitmap(ms), ms->npages, ofs);
1899         while ((slotidx > 0) && (ofs >= ms->npages)) {
1900                 slotidx--;
1901                 ms = slots->memslots + slotidx;
1902                 ofs = find_next_bit(kvm_second_dirty_bitmap(ms), ms->npages, 0);
1903         }
1904         return ms->base_gfn + ofs;
1905 }
1906 
1907 static int kvm_s390_get_cmma(struct kvm *kvm, struct kvm_s390_cmma_log *args,
1908                              u8 *res, unsigned long bufsize)
1909 {
1910         unsigned long mem_end, cur_gfn, next_gfn, hva, pgstev;
1911         struct kvm_memslots *slots = kvm_memslots(kvm);
1912         struct kvm_memory_slot *ms;
1913 
1914         cur_gfn = kvm_s390_next_dirty_cmma(slots, args->start_gfn);
1915         ms = gfn_to_memslot(kvm, cur_gfn);
1916         args->count = 0;
1917         args->start_gfn = cur_gfn;
1918         if (!ms)
1919                 return 0;
1920         next_gfn = kvm_s390_next_dirty_cmma(slots, cur_gfn + 1);
1921         mem_end = slots->memslots[0].base_gfn + slots->memslots[0].npages;
1922 
1923         while (args->count < bufsize) {
1924                 hva = gfn_to_hva(kvm, cur_gfn);
1925                 if (kvm_is_error_hva(hva))
1926                         return 0;
1927                 /* Decrement only if we actually flipped the bit to 0 */
1928                 if (test_and_clear_bit(cur_gfn - ms->base_gfn, kvm_second_dirty_bitmap(ms)))
1929                         atomic64_dec(&kvm->arch.cmma_dirty_pages);
1930                 if (get_pgste(kvm->mm, hva, &pgstev) < 0)
1931                         pgstev = 0;
1932                 /* Save the value */
1933                 res[args->count++] = (pgstev >> 24) & 0x43;
1934                 /* If the next bit is too far away, stop. */
1935                 if (next_gfn > cur_gfn + KVM_S390_MAX_BIT_DISTANCE)
1936                         return 0;
1937                 /* If we reached the previous "next", find the next one */
1938                 if (cur_gfn == next_gfn)
1939                         next_gfn = kvm_s390_next_dirty_cmma(slots, cur_gfn + 1);
1940                 /* Reached the end of memory or of the buffer, stop */
1941                 if ((next_gfn >= mem_end) ||
1942                     (next_gfn - args->start_gfn >= bufsize))
1943                         return 0;
1944                 cur_gfn++;
1945                 /* Reached the end of the current memslot, take the next one. */
1946                 if (cur_gfn - ms->base_gfn >= ms->npages) {
1947                         ms = gfn_to_memslot(kvm, cur_gfn);
1948                         if (!ms)
1949                                 return 0;
1950                 }
1951         }
1952         return 0;
1953 }
1954 
1955 /*
1956  * This function searches for the next page with dirty CMMA attributes, and
1957  * saves the attributes in the buffer up to either the end of the buffer or
1958  * until a block of at least KVM_S390_MAX_BIT_DISTANCE clean bits is found;
1959  * no trailing clean bytes are saved.
1960  * In case no dirty bits were found, or if CMMA was not enabled or used, the
1961  * output buffer will indicate 0 as length.
1962  */
1963 static int kvm_s390_get_cmma_bits(struct kvm *kvm,
1964                                   struct kvm_s390_cmma_log *args)
1965 {
1966         unsigned long bufsize;
1967         int srcu_idx, peek, ret;
1968         u8 *values;
1969 
1970         if (!kvm->arch.use_cmma)
1971                 return -ENXIO;
1972         /* Invalid/unsupported flags were specified */
1973         if (args->flags & ~KVM_S390_CMMA_PEEK)
1974                 return -EINVAL;
1975         /* Migration mode query, and we are not doing a migration */
1976         peek = !!(args->flags & KVM_S390_CMMA_PEEK);
1977         if (!peek && !kvm->arch.migration_mode)
1978                 return -EINVAL;
1979         /* CMMA is disabled or was not used, or the buffer has length zero */
1980         bufsize = min(args->count, KVM_S390_CMMA_SIZE_MAX);
1981         if (!bufsize || !kvm->mm->context.uses_cmm) {
1982                 memset(args, 0, sizeof(*args));
1983                 return 0;
1984         }
1985         /* We are not peeking, and there are no dirty pages */
1986         if (!peek && !atomic64_read(&kvm->arch.cmma_dirty_pages)) {
1987                 memset(args, 0, sizeof(*args));
1988                 return 0;
1989         }
1990 
1991         values = vmalloc(bufsize);
1992         if (!values)
1993                 return -ENOMEM;
1994 
1995         down_read(&kvm->mm->mmap_sem);
1996         srcu_idx = srcu_read_lock(&kvm->srcu);
1997         if (peek)
1998                 ret = kvm_s390_peek_cmma(kvm, args, values, bufsize);
1999         else
2000                 ret = kvm_s390_get_cmma(kvm, args, values, bufsize);
2001         srcu_read_unlock(&kvm->srcu, srcu_idx);
2002         up_read(&kvm->mm->mmap_sem);
2003 
2004         if (kvm->arch.migration_mode)
2005                 args->remaining = atomic64_read(&kvm->arch.cmma_dirty_pages);
2006         else
2007                 args->remaining = 0;
2008 
2009         if (copy_to_user((void __user *)args->values, values, args->count))
2010                 ret = -EFAULT;
2011 
2012         vfree(values);
2013         return ret;
2014 }
2015 
2016 /*
2017  * This function sets the CMMA attributes for the given pages. If the input
2018  * buffer has zero length, no action is taken, otherwise the attributes are
2019  * set and the mm->context.uses_cmm flag is set.
2020  */
2021 static int kvm_s390_set_cmma_bits(struct kvm *kvm,
2022                                   const struct kvm_s390_cmma_log *args)
2023 {
2024         unsigned long hva, mask, pgstev, i;
2025         uint8_t *bits;
2026         int srcu_idx, r = 0;
2027 
2028         mask = args->mask;
2029 
2030         if (!kvm->arch.use_cmma)
2031                 return -ENXIO;
2032         /* invalid/unsupported flags */
2033         if (args->flags != 0)
2034                 return -EINVAL;
2035         /* Enforce sane limit on memory allocation */
2036         if (args->count > KVM_S390_CMMA_SIZE_MAX)
2037                 return -EINVAL;
2038         /* Nothing to do */
2039         if (args->count == 0)
2040                 return 0;
2041 
2042         bits = vmalloc(array_size(sizeof(*bits), args->count));
2043         if (!bits)
2044                 return -ENOMEM;
2045 
2046         r = copy_from_user(bits, (void __user *)args->values, args->count);
2047         if (r) {
2048                 r = -EFAULT;
2049                 goto out;
2050         }
2051 
2052         down_read(&kvm->mm->mmap_sem);
2053         srcu_idx = srcu_read_lock(&kvm->srcu);
2054         for (i = 0; i < args->count; i++) {
2055                 hva = gfn_to_hva(kvm, args->start_gfn + i);
2056                 if (kvm_is_error_hva(hva)) {
2057                         r = -EFAULT;
2058                         break;
2059                 }
2060 
2061                 pgstev = bits[i];
2062                 pgstev = pgstev << 24;
2063                 mask &= _PGSTE_GPS_USAGE_MASK | _PGSTE_GPS_NODAT;
2064                 set_pgste_bits(kvm->mm, hva, mask, pgstev);
2065         }
2066         srcu_read_unlock(&kvm->srcu, srcu_idx);
2067         up_read(&kvm->mm->mmap_sem);
2068 
2069         if (!kvm->mm->context.uses_cmm) {
2070                 down_write(&kvm->mm->mmap_sem);
2071                 kvm->mm->context.uses_cmm = 1;
2072                 up_write(&kvm->mm->mmap_sem);
2073         }
2074 out:
2075         vfree(bits);
2076         return r;
2077 }
2078 
2079 long kvm_arch_vm_ioctl(struct file *filp,
2080                        unsigned int ioctl, unsigned long arg)
2081 {
2082         struct kvm *kvm = filp->private_data;
2083         void __user *argp = (void __user *)arg;
2084         struct kvm_device_attr attr;
2085         int r;
2086 
2087         switch (ioctl) {
2088         case KVM_S390_INTERRUPT: {
2089                 struct kvm_s390_interrupt s390int;
2090 
2091                 r = -EFAULT;
2092                 if (copy_from_user(&s390int, argp, sizeof(s390int)))
2093                         break;
2094                 r = kvm_s390_inject_vm(kvm, &s390int);
2095                 break;
2096         }
2097         case KVM_CREATE_IRQCHIP: {
2098                 struct kvm_irq_routing_entry routing;
2099 
2100                 r = -EINVAL;
2101                 if (kvm->arch.use_irqchip) {
2102                         /* Set up dummy routing. */
2103                         memset(&routing, 0, sizeof(routing));
2104                         r = kvm_set_irq_routing(kvm, &routing, 0, 0);
2105                 }
2106                 break;
2107         }
2108         case KVM_SET_DEVICE_ATTR: {
2109                 r = -EFAULT;
2110                 if (copy_from_user(&attr, (void __user *)arg, sizeof(attr)))
2111                         break;
2112                 r = kvm_s390_vm_set_attr(kvm, &attr);
2113                 break;
2114         }
2115         case KVM_GET_DEVICE_ATTR: {
2116                 r = -EFAULT;
2117                 if (copy_from_user(&attr, (void __user *)arg, sizeof(attr)))
2118                         break;
2119                 r = kvm_s390_vm_get_attr(kvm, &attr);
2120                 break;
2121         }
2122         case KVM_HAS_DEVICE_ATTR: {
2123                 r = -EFAULT;
2124                 if (copy_from_user(&attr, (void __user *)arg, sizeof(attr)))
2125                         break;
2126                 r = kvm_s390_vm_has_attr(kvm, &attr);
2127                 break;
2128         }
2129         case KVM_S390_GET_SKEYS: {
2130                 struct kvm_s390_skeys args;
2131 
2132                 r = -EFAULT;
2133                 if (copy_from_user(&args, argp,
2134                                    sizeof(struct kvm_s390_skeys)))
2135                         break;
2136                 r = kvm_s390_get_skeys(kvm, &args);
2137                 break;
2138         }
2139         case KVM_S390_SET_SKEYS: {
2140                 struct kvm_s390_skeys args;
2141 
2142                 r = -EFAULT;
2143                 if (copy_from_user(&args, argp,
2144                                    sizeof(struct kvm_s390_skeys)))
2145                         break;
2146                 r = kvm_s390_set_skeys(kvm, &args);
2147                 break;
2148         }
2149         case KVM_S390_GET_CMMA_BITS: {
2150                 struct kvm_s390_cmma_log args;
2151 
2152                 r = -EFAULT;
2153                 if (copy_from_user(&args, argp, sizeof(args)))
2154                         break;
2155                 mutex_lock(&kvm->slots_lock);
2156                 r = kvm_s390_get_cmma_bits(kvm, &args);
2157                 mutex_unlock(&kvm->slots_lock);
2158                 if (!r) {
2159                         r = copy_to_user(argp, &args, sizeof(args));
2160                         if (r)
2161                                 r = -EFAULT;
2162                 }
2163                 break;
2164         }
2165         case KVM_S390_SET_CMMA_BITS: {
2166                 struct kvm_s390_cmma_log args;
2167 
2168                 r = -EFAULT;
2169                 if (copy_from_user(&args, argp, sizeof(args)))
2170                         break;
2171                 mutex_lock(&kvm->slots_lock);
2172                 r = kvm_s390_set_cmma_bits(kvm, &args);
2173                 mutex_unlock(&kvm->slots_lock);
2174                 break;
2175         }
2176         default:
2177                 r = -ENOTTY;
2178         }
2179 
2180         return r;
2181 }
2182 
2183 static int kvm_s390_apxa_installed(void)
2184 {
2185         struct ap_config_info info;
2186 
2187         if (ap_instructions_available()) {
2188                 if (ap_qci(&info) == 0)
2189                         return info.apxa;
2190         }
2191 
2192         return 0;
2193 }
2194 
2195 /*
2196  * The format of the crypto control block (CRYCB) is specified in the 3 low
2197  * order bits of the CRYCB designation (CRYCBD) field as follows:
2198  * Format 0: Neither the message security assist extension 3 (MSAX3) nor the
2199  *           AP extended addressing (APXA) facility are installed.
2200  * Format 1: The APXA facility is not installed but the MSAX3 facility is.
2201  * Format 2: Both the APXA and MSAX3 facilities are installed
2202  */
2203 static void kvm_s390_set_crycb_format(struct kvm *kvm)
2204 {
2205         kvm->arch.crypto.crycbd = (__u32)(unsigned long) kvm->arch.crypto.crycb;
2206 
2207         /* Clear the CRYCB format bits - i.e., set format 0 by default */
2208         kvm->arch.crypto.crycbd &= ~(CRYCB_FORMAT_MASK);
2209 
2210         /* Check whether MSAX3 is installed */
2211         if (!test_kvm_facility(kvm, 76))
2212                 return;
2213 
2214         if (kvm_s390_apxa_installed())
2215                 kvm->arch.crypto.crycbd |= CRYCB_FORMAT2;
2216         else
2217                 kvm->arch.crypto.crycbd |= CRYCB_FORMAT1;
2218 }
2219 
2220 void kvm_arch_crypto_set_masks(struct kvm *kvm, unsigned long *apm,
2221                                unsigned long *aqm, unsigned long *adm)
2222 {
2223         struct kvm_s390_crypto_cb *crycb = kvm->arch.crypto.crycb;
2224 
2225         mutex_lock(&kvm->lock);
2226         kvm_s390_vcpu_block_all(kvm);
2227 
2228         switch (kvm->arch.crypto.crycbd & CRYCB_FORMAT_MASK) {
2229         case CRYCB_FORMAT2: /* APCB1 use 256 bits */
2230                 memcpy(crycb->apcb1.apm, apm, 32);
2231                 VM_EVENT(kvm, 3, "SET CRYCB: apm %016lx %016lx %016lx %016lx",
2232                          apm[0], apm[1], apm[2], apm[3]);
2233                 memcpy(crycb->apcb1.aqm, aqm, 32);
2234                 VM_EVENT(kvm, 3, "SET CRYCB: aqm %016lx %016lx %016lx %016lx",
2235                          aqm[0], aqm[1], aqm[2], aqm[3]);
2236                 memcpy(crycb->apcb1.adm, adm, 32);
2237                 VM_EVENT(kvm, 3, "SET CRYCB: adm %016lx %016lx %016lx %016lx",
2238                          adm[0], adm[1], adm[2], adm[3]);
2239                 break;
2240         case CRYCB_FORMAT1:
2241         case CRYCB_FORMAT0: /* Fall through both use APCB0 */
2242                 memcpy(crycb->apcb0.apm, apm, 8);
2243                 memcpy(crycb->apcb0.aqm, aqm, 2);
2244                 memcpy(crycb->apcb0.adm, adm, 2);
2245                 VM_EVENT(kvm, 3, "SET CRYCB: apm %016lx aqm %04x adm %04x",
2246                          apm[0], *((unsigned short *)aqm),
2247                          *((unsigned short *)adm));
2248                 break;
2249         default:        /* Can not happen */
2250                 break;
2251         }
2252 
2253         /* recreate the shadow crycb for each vcpu */
2254         kvm_s390_sync_request_broadcast(kvm, KVM_REQ_VSIE_RESTART);
2255         kvm_s390_vcpu_unblock_all(kvm);
2256         mutex_unlock(&kvm->lock);
2257 }
2258 EXPORT_SYMBOL_GPL(kvm_arch_crypto_set_masks);
2259 
2260 void kvm_arch_crypto_clear_masks(struct kvm *kvm)
2261 {
2262         mutex_lock(&kvm->lock);
2263         kvm_s390_vcpu_block_all(kvm);
2264 
2265         memset(&kvm->arch.crypto.crycb->apcb0, 0,
2266                sizeof(kvm->arch.crypto.crycb->apcb0));
2267         memset(&kvm->arch.crypto.crycb->apcb1, 0,
2268                sizeof(kvm->arch.crypto.crycb->apcb1));
2269 
2270         VM_EVENT(kvm, 3, "%s", "CLR CRYCB:");
2271         /* recreate the shadow crycb for each vcpu */
2272         kvm_s390_sync_request_broadcast(kvm, KVM_REQ_VSIE_RESTART);
2273         kvm_s390_vcpu_unblock_all(kvm);
2274         mutex_unlock(&kvm->lock);
2275 }
2276 EXPORT_SYMBOL_GPL(kvm_arch_crypto_clear_masks);
2277 
2278 static u64 kvm_s390_get_initial_cpuid(void)
2279 {
2280         struct cpuid cpuid;
2281 
2282         get_cpu_id(&cpuid);
2283         cpuid.version = 0xff;
2284         return *((u64 *) &cpuid);
2285 }
2286 
2287 static void kvm_s390_crypto_init(struct kvm *kvm)
2288 {
2289         kvm->arch.crypto.crycb = &kvm->arch.sie_page2->crycb;
2290         kvm_s390_set_crycb_format(kvm);
2291 
2292         if (!test_kvm_facility(kvm, 76))
2293                 return;
2294 
2295         /* Enable AES/DEA protected key functions by default */
2296         kvm->arch.crypto.aes_kw = 1;
2297         kvm->arch.crypto.dea_kw = 1;
2298         get_random_bytes(kvm->arch.crypto.crycb->aes_wrapping_key_mask,
2299                          sizeof(kvm->arch.crypto.crycb->aes_wrapping_key_mask));
2300         get_random_bytes(kvm->arch.crypto.crycb->dea_wrapping_key_mask,
2301                          sizeof(kvm->arch.crypto.crycb->dea_wrapping_key_mask));
2302 }
2303 
2304 static void sca_dispose(struct kvm *kvm)
2305 {
2306         if (kvm->arch.use_esca)
2307                 free_pages_exact(kvm->arch.sca, sizeof(struct esca_block));
2308         else
2309                 free_page((unsigned long)(kvm->arch.sca));
2310         kvm->arch.sca = NULL;
2311 }
2312 
2313 int kvm_arch_init_vm(struct kvm *kvm, unsigned long type)
2314 {
2315         gfp_t alloc_flags = GFP_KERNEL;
2316         int i, rc;
2317         char debug_name[16];
2318         static unsigned long sca_offset;
2319 
2320         rc = -EINVAL;
2321 #ifdef CONFIG_KVM_S390_UCONTROL
2322         if (type & ~KVM_VM_S390_UCONTROL)
2323                 goto out_err;
2324         if ((type & KVM_VM_S390_UCONTROL) && (!capable(CAP_SYS_ADMIN)))
2325                 goto out_err;
2326 #else
2327         if (type)
2328                 goto out_err;
2329 #endif
2330 
2331         rc = s390_enable_sie();
2332         if (rc)
2333                 goto out_err;
2334 
2335         rc = -ENOMEM;
2336 
2337         if (!sclp.has_64bscao)
2338                 alloc_flags |= GFP_DMA;
2339         rwlock_init(&kvm->arch.sca_lock);
2340         /* start with basic SCA */
2341         kvm->arch.sca = (struct bsca_block *) get_zeroed_page(alloc_flags);
2342         if (!kvm->arch.sca)
2343                 goto out_err;
2344         spin_lock(&kvm_lock);
2345         sca_offset += 16;
2346         if (sca_offset + sizeof(struct bsca_block) > PAGE_SIZE)
2347                 sca_offset = 0;
2348         kvm->arch.sca = (struct bsca_block *)
2349                         ((char *) kvm->arch.sca + sca_offset);
2350         spin_unlock(&kvm_lock);
2351 
2352         sprintf(debug_name, "kvm-%u", current->pid);
2353 
2354         kvm->arch.dbf = debug_register(debug_name, 32, 1, 7 * sizeof(long));
2355         if (!kvm->arch.dbf)
2356                 goto out_err;
2357 
2358         BUILD_BUG_ON(sizeof(struct sie_page2) != 4096);
2359         kvm->arch.sie_page2 =
2360              (struct sie_page2 *) get_zeroed_page(GFP_KERNEL | GFP_DMA);
2361         if (!kvm->arch.sie_page2)
2362                 goto out_err;
2363 
2364         kvm->arch.sie_page2->kvm = kvm;
2365         kvm->arch.model.fac_list = kvm->arch.sie_page2->fac_list;
2366 
2367         for (i = 0; i < kvm_s390_fac_size(); i++) {
2368                 kvm->arch.model.fac_mask[i] = S390_lowcore.stfle_fac_list[i] &
2369                                               (kvm_s390_fac_base[i] |
2370                                                kvm_s390_fac_ext[i]);
2371                 kvm->arch.model.fac_list[i] = S390_lowcore.stfle_fac_list[i] &
2372                                               kvm_s390_fac_base[i];
2373         }
2374         kvm->arch.model.subfuncs = kvm_s390_available_subfunc;
2375 
2376         /* we are always in czam mode - even on pre z14 machines */
2377         set_kvm_facility(kvm->arch.model.fac_mask, 138);
2378         set_kvm_facility(kvm->arch.model.fac_list, 138);
2379         /* we emulate STHYI in kvm */
2380         set_kvm_facility(kvm->arch.model.fac_mask, 74);
2381         set_kvm_facility(kvm->arch.model.fac_list, 74);
2382         if (MACHINE_HAS_TLB_GUEST) {
2383                 set_kvm_facility(kvm->arch.model.fac_mask, 147);
2384                 set_kvm_facility(kvm->arch.model.fac_list, 147);
2385         }
2386 
2387         kvm->arch.model.cpuid = kvm_s390_get_initial_cpuid();
2388         kvm->arch.model.ibc = sclp.ibc & 0x0fff;
2389 
2390         kvm_s390_crypto_init(kvm);
2391 
2392         mutex_init(&kvm->arch.float_int.ais_lock);
2393         spin_lock_init(&kvm->arch.float_int.lock);
2394         for (i = 0; i < FIRQ_LIST_COUNT; i++)
2395                 INIT_LIST_HEAD(&kvm->arch.float_int.lists[i]);
2396         init_waitqueue_head(&kvm->arch.ipte_wq);
2397         mutex_init(&kvm->arch.ipte_mutex);
2398 
2399         debug_register_view(kvm->arch.dbf, &debug_sprintf_view);
2400         VM_EVENT(kvm, 3, "vm created with type %lu", type);
2401 
2402         if (type & KVM_VM_S390_UCONTROL) {
2403                 kvm->arch.gmap = NULL;
2404                 kvm->arch.mem_limit = KVM_S390_NO_MEM_LIMIT;
2405         } else {
2406                 if (sclp.hamax == U64_MAX)
2407                         kvm->arch.mem_limit = TASK_SIZE_MAX;
2408                 else
2409                         kvm->arch.mem_limit = min_t(unsigned long, TASK_SIZE_MAX,
2410                                                     sclp.hamax + 1);
2411                 kvm->arch.gmap = gmap_create(current->mm, kvm->arch.mem_limit - 1);
2412                 if (!kvm->arch.gmap)
2413                         goto out_err;
2414                 kvm->arch.gmap->private = kvm;
2415                 kvm->arch.gmap->pfault_enabled = 0;
2416         }
2417 
2418         kvm->arch.use_pfmfi = sclp.has_pfmfi;
2419         kvm->arch.use_skf = sclp.has_skey;
2420         spin_lock_init(&kvm->arch.start_stop_lock);
2421         kvm_s390_vsie_init(kvm);
2422         kvm_s390_gisa_init(kvm);
2423         KVM_EVENT(3, "vm 0x%pK created by pid %u", kvm, current->pid);
2424 
2425         return 0;
2426 out_err:
2427         free_page((unsigned long)kvm->arch.sie_page2);
2428         debug_unregister(kvm->arch.dbf);
2429         sca_dispose(kvm);
2430         KVM_EVENT(3, "creation of vm failed: %d", rc);
2431         return rc;
2432 }
2433 
2434 bool kvm_arch_has_vcpu_debugfs(void)
2435 {
2436         return false;
2437 }
2438 
2439 int kvm_arch_create_vcpu_debugfs(struct kvm_vcpu *vcpu)
2440 {
2441         return 0;
2442 }
2443 
2444 void kvm_arch_vcpu_destroy(struct kvm_vcpu *vcpu)
2445 {
2446         VCPU_EVENT(vcpu, 3, "%s", "free cpu");
2447         trace_kvm_s390_destroy_vcpu(vcpu->vcpu_id);
2448         kvm_s390_clear_local_irqs(vcpu);
2449         kvm_clear_async_pf_completion_queue(vcpu);
2450         if (!kvm_is_ucontrol(vcpu->kvm))
2451                 sca_del_vcpu(vcpu);
2452 
2453         if (kvm_is_ucontrol(vcpu->kvm))
2454                 gmap_remove(vcpu->arch.gmap);
2455 
2456         if (vcpu->kvm->arch.use_cmma)
2457                 kvm_s390_vcpu_unsetup_cmma(vcpu);
2458         free_page((unsigned long)(vcpu->arch.sie_block));
2459 
2460         kvm_vcpu_uninit(vcpu);
2461         kmem_cache_free(kvm_vcpu_cache, vcpu);
2462 }
2463 
2464 static void kvm_free_vcpus(struct kvm *kvm)
2465 {
2466         unsigned int i;
2467         struct kvm_vcpu *vcpu;
2468 
2469         kvm_for_each_vcpu(i, vcpu, kvm)
2470                 kvm_arch_vcpu_destroy(vcpu);
2471 
2472         mutex_lock(&kvm->lock);
2473         for (i = 0; i < atomic_read(&kvm->online_vcpus); i++)
2474                 kvm->vcpus[i] = NULL;
2475 
2476         atomic_set(&kvm->online_vcpus, 0);
2477         mutex_unlock(&kvm->lock);
2478 }
2479 
2480 void kvm_arch_destroy_vm(struct kvm *kvm)
2481 {
2482         kvm_free_vcpus(kvm);
2483         sca_dispose(kvm);
2484         debug_unregister(kvm->arch.dbf);
2485         kvm_s390_gisa_destroy(kvm);
2486         free_page((unsigned long)kvm->arch.sie_page2);
2487         if (!kvm_is_ucontrol(kvm))
2488                 gmap_remove(kvm->arch.gmap);
2489         kvm_s390_destroy_adapters(kvm);
2490         kvm_s390_clear_float_irqs(kvm);
2491         kvm_s390_vsie_destroy(kvm);
2492         KVM_EVENT(3, "vm 0x%pK destroyed", kvm);
2493 }
2494 
2495 /* Section: vcpu related */
2496 static int __kvm_ucontrol_vcpu_init(struct kvm_vcpu *vcpu)
2497 {
2498         vcpu->arch.gmap = gmap_create(current->mm, -1UL);
2499         if (!vcpu->arch.gmap)
2500                 return -ENOMEM;
2501         vcpu->arch.gmap->private = vcpu->kvm;
2502 
2503         return 0;
2504 }
2505 
2506 static void sca_del_vcpu(struct kvm_vcpu *vcpu)
2507 {
2508         if (!kvm_s390_use_sca_entries())
2509                 return;
2510         read_lock(&vcpu->kvm->arch.sca_lock);
2511         if (vcpu->kvm->arch.use_esca) {
2512                 struct esca_block *sca = vcpu->kvm->arch.sca;
2513 
2514                 clear_bit_inv(vcpu->vcpu_id, (unsigned long *) sca->mcn);
2515                 sca->cpu[vcpu->vcpu_id].sda = 0;
2516         } else {
2517                 struct bsca_block *sca = vcpu->kvm->arch.sca;
2518 
2519                 clear_bit_inv(vcpu->vcpu_id, (unsigned long *) &sca->mcn);
2520                 sca->cpu[vcpu->vcpu_id].sda = 0;
2521         }
2522         read_unlock(&vcpu->kvm->arch.sca_lock);
2523 }
2524 
2525 static void sca_add_vcpu(struct kvm_vcpu *vcpu)
2526 {
2527         if (!kvm_s390_use_sca_entries()) {
2528                 struct bsca_block *sca = vcpu->kvm->arch.sca;
2529 
2530                 /* we still need the basic sca for the ipte control */
2531                 vcpu->arch.sie_block->scaoh = (__u32)(((__u64)sca) >> 32);
2532                 vcpu->arch.sie_block->scaol = (__u32)(__u64)sca;
2533                 return;
2534         }
2535         read_lock(&vcpu->kvm->arch.sca_lock);
2536         if (vcpu->kvm->arch.use_esca) {
2537                 struct esca_block *sca = vcpu->kvm->arch.sca;
2538 
2539                 sca->cpu[vcpu->vcpu_id].sda = (__u64) vcpu->arch.sie_block;
2540                 vcpu->arch.sie_block->scaoh = (__u32)(((__u64)sca) >> 32);
2541                 vcpu->arch.sie_block->scaol = (__u32)(__u64)sca & ~0x3fU;
2542                 vcpu->arch.sie_block->ecb2 |= ECB2_ESCA;
2543                 set_bit_inv(vcpu->vcpu_id, (unsigned long *) sca->mcn);
2544         } else {
2545                 struct bsca_block *sca = vcpu->kvm->arch.sca;
2546 
2547                 sca->cpu[vcpu->vcpu_id].sda = (__u64) vcpu->arch.sie_block;
2548                 vcpu->arch.sie_block->scaoh = (__u32)(((__u64)sca) >> 32);
2549                 vcpu->arch.sie_block->scaol = (__u32)(__u64)sca;
2550                 set_bit_inv(vcpu->vcpu_id, (unsigned long *) &sca->mcn);
2551         }
2552         read_unlock(&vcpu->kvm->arch.sca_lock);
2553 }
2554 
2555 /* Basic SCA to Extended SCA data copy routines */
2556 static inline void sca_copy_entry(struct esca_entry *d, struct bsca_entry *s)
2557 {
2558         d->sda = s->sda;
2559         d->sigp_ctrl.c = s->sigp_ctrl.c;
2560         d->sigp_ctrl.scn = s->sigp_ctrl.scn;
2561 }
2562 
2563 static void sca_copy_b_to_e(struct esca_block *d, struct bsca_block *s)
2564 {
2565         int i;
2566 
2567         d->ipte_control = s->ipte_control;
2568         d->mcn[0] = s->mcn;
2569         for (i = 0; i < KVM_S390_BSCA_CPU_SLOTS; i++)
2570                 sca_copy_entry(&d->cpu[i], &s->cpu[i]);
2571 }
2572 
2573 static int sca_switch_to_extended(struct kvm *kvm)
2574 {
2575         struct bsca_block *old_sca = kvm->arch.sca;
2576         struct esca_block *new_sca;
2577         struct kvm_vcpu *vcpu;
2578         unsigned int vcpu_idx;
2579         u32 scaol, scaoh;
2580 
2581         new_sca = alloc_pages_exact(sizeof(*new_sca), GFP_KERNEL|__GFP_ZERO);
2582         if (!new_sca)
2583                 return -ENOMEM;
2584 
2585         scaoh = (u32)((u64)(new_sca) >> 32);
2586         scaol = (u32)(u64)(new_sca) & ~0x3fU;
2587 
2588         kvm_s390_vcpu_block_all(kvm);
2589         write_lock(&kvm->arch.sca_lock);
2590 
2591         sca_copy_b_to_e(new_sca, old_sca);
2592 
2593         kvm_for_each_vcpu(vcpu_idx, vcpu, kvm) {
2594                 vcpu->arch.sie_block->scaoh = scaoh;
2595                 vcpu->arch.sie_block->scaol = scaol;
2596                 vcpu->arch.sie_block->ecb2 |= ECB2_ESCA;
2597         }
2598         kvm->arch.sca = new_sca;
2599         kvm->arch.use_esca = 1;
2600 
2601         write_unlock(&kvm->arch.sca_lock);
2602         kvm_s390_vcpu_unblock_all(kvm);
2603 
2604         free_page((unsigned long)old_sca);
2605 
2606         VM_EVENT(kvm, 2, "Switched to ESCA (0x%pK -> 0x%pK)",
2607                  old_sca, kvm->arch.sca);
2608         return 0;
2609 }
2610 
2611 static int sca_can_add_vcpu(struct kvm *kvm, unsigned int id)
2612 {
2613         int rc;
2614 
2615         if (!kvm_s390_use_sca_entries()) {
2616                 if (id < KVM_MAX_VCPUS)
2617                         return true;
2618                 return false;
2619         }
2620         if (id < KVM_S390_BSCA_CPU_SLOTS)
2621                 return true;
2622         if (!sclp.has_esca || !sclp.has_64bscao)
2623                 return false;
2624 
2625         mutex_lock(&kvm->lock);
2626         rc = kvm->arch.use_esca ? 0 : sca_switch_to_extended(kvm);
2627         mutex_unlock(&kvm->lock);
2628 
2629         return rc == 0 && id < KVM_S390_ESCA_CPU_SLOTS;
2630 }
2631 
2632 int kvm_arch_vcpu_init(struct kvm_vcpu *vcpu)
2633 {
2634         vcpu->arch.pfault_token = KVM_S390_PFAULT_TOKEN_INVALID;
2635         kvm_clear_async_pf_completion_queue(vcpu);
2636         vcpu->run->kvm_valid_regs = KVM_SYNC_PREFIX |
2637                                     KVM_SYNC_GPRS |
2638                                     KVM_SYNC_ACRS |
2639                                     KVM_SYNC_CRS |
2640                                     KVM_SYNC_ARCH0 |
2641                                     KVM_SYNC_PFAULT;
2642         kvm_s390_set_prefix(vcpu, 0);
2643         if (test_kvm_facility(vcpu->kvm, 64))
2644                 vcpu->run->kvm_valid_regs |= KVM_SYNC_RICCB;
2645         if (test_kvm_facility(vcpu->kvm, 82))
2646                 vcpu->run->kvm_valid_regs |= KVM_SYNC_BPBC;
2647         if (test_kvm_facility(vcpu->kvm, 133))
2648                 vcpu->run->kvm_valid_regs |= KVM_SYNC_GSCB;
2649         if (test_kvm_facility(vcpu->kvm, 156))
2650                 vcpu->run->kvm_valid_regs |= KVM_SYNC_ETOKEN;
2651         /* fprs can be synchronized via vrs, even if the guest has no vx. With
2652          * MACHINE_HAS_VX, (load|store)_fpu_regs() will work with vrs format.
2653          */
2654         if (MACHINE_HAS_VX)
2655                 vcpu->run->kvm_valid_regs |= KVM_SYNC_VRS;
2656         else
2657                 vcpu->run->kvm_valid_regs |= KVM_SYNC_FPRS;
2658 
2659         if (kvm_is_ucontrol(vcpu->kvm))
2660                 return __kvm_ucontrol_vcpu_init(vcpu);
2661 
2662         return 0;
2663 }
2664 
2665 /* needs disabled preemption to protect from TOD sync and vcpu_load/put */
2666 static void __start_cpu_timer_accounting(struct kvm_vcpu *vcpu)
2667 {
2668         WARN_ON_ONCE(vcpu->arch.cputm_start != 0);
2669         raw_write_seqcount_begin(&vcpu->arch.cputm_seqcount);
2670         vcpu->arch.cputm_start = get_tod_clock_fast();
2671         raw_write_seqcount_end(&vcpu->arch.cputm_seqcount);
2672 }
2673 
2674 /* needs disabled preemption to protect from TOD sync and vcpu_load/put */
2675 static void __stop_cpu_timer_accounting(struct kvm_vcpu *vcpu)
2676 {
2677         WARN_ON_ONCE(vcpu->arch.cputm_start == 0);
2678         raw_write_seqcount_begin(&vcpu->arch.cputm_seqcount);
2679         vcpu->arch.sie_block->cputm -= get_tod_clock_fast() - vcpu->arch.cputm_start;
2680         vcpu->arch.cputm_start = 0;
2681         raw_write_seqcount_end(&vcpu->arch.cputm_seqcount);
2682 }
2683 
2684 /* needs disabled preemption to protect from TOD sync and vcpu_load/put */
2685 static void __enable_cpu_timer_accounting(struct kvm_vcpu *vcpu)
2686 {
2687         WARN_ON_ONCE(vcpu->arch.cputm_enabled);
2688         vcpu->arch.cputm_enabled = true;
2689         __start_cpu_timer_accounting(vcpu);
2690 }
2691 
2692 /* needs disabled preemption to protect from TOD sync and vcpu_load/put */
2693 static void __disable_cpu_timer_accounting(struct kvm_vcpu *vcpu)
2694 {
2695         WARN_ON_ONCE(!vcpu->arch.cputm_enabled);
2696         __stop_cpu_timer_accounting(vcpu);
2697         vcpu->arch.cputm_enabled = false;
2698 }
2699 
2700 static void enable_cpu_timer_accounting(struct kvm_vcpu *vcpu)
2701 {
2702         preempt_disable(); /* protect from TOD sync and vcpu_load/put */
2703         __enable_cpu_timer_accounting(vcpu);
2704         preempt_enable();
2705 }
2706 
2707 static void disable_cpu_timer_accounting(struct kvm_vcpu *vcpu)
2708 {
2709         preempt_disable(); /* protect from TOD sync and vcpu_load/put */
2710         __disable_cpu_timer_accounting(vcpu);
2711         preempt_enable();
2712 }
2713 
2714 /* set the cpu timer - may only be called from the VCPU thread itself */
2715 void kvm_s390_set_cpu_timer(struct kvm_vcpu *vcpu, __u64 cputm)
2716 {
2717         preempt_disable(); /* protect from TOD sync and vcpu_load/put */
2718         raw_write_seqcount_begin(&vcpu->arch.cputm_seqcount);
2719         if (vcpu->arch.cputm_enabled)
2720                 vcpu->arch.cputm_start = get_tod_clock_fast();
2721         vcpu->arch.sie_block->cputm = cputm;
2722         raw_write_seqcount_end(&vcpu->arch.cputm_seqcount);
2723         preempt_enable();
2724 }
2725 
2726 /* update and get the cpu timer - can also be called from other VCPU threads */
2727 __u64 kvm_s390_get_cpu_timer(struct kvm_vcpu *vcpu)
2728 {
2729         unsigned int seq;
2730         __u64 value;
2731 
2732         if (unlikely(!vcpu->arch.cputm_enabled))
2733                 return vcpu->arch.sie_block->cputm;
2734 
2735         preempt_disable(); /* protect from TOD sync and vcpu_load/put */
2736         do {
2737                 seq = raw_read_seqcount(&vcpu->arch.cputm_seqcount);
2738                 /*
2739                  * If the writer would ever execute a read in the critical
2740                  * section, e.g. in irq context, we have a deadlock.
2741                  */
2742                 WARN_ON_ONCE((seq & 1) && smp_processor_id() == vcpu->cpu);
2743                 value = vcpu->arch.sie_block->cputm;
2744                 /* if cputm_start is 0, accounting is being started/stopped */
2745                 if (likely(vcpu->arch.cputm_start))
2746                         value -= get_tod_clock_fast() - vcpu->arch.cputm_start;
2747         } while (read_seqcount_retry(&vcpu->arch.cputm_seqcount, seq & ~1));
2748         preempt_enable();
2749         return value;
2750 }
2751 
2752 void kvm_arch_vcpu_load(struct kvm_vcpu *vcpu, int cpu)
2753 {
2754 
2755         gmap_enable(vcpu->arch.enabled_gmap);
2756         kvm_s390_set_cpuflags(vcpu, CPUSTAT_RUNNING);
2757         if (vcpu->arch.cputm_enabled && !is_vcpu_idle(vcpu))
2758                 __start_cpu_timer_accounting(vcpu);
2759         vcpu->cpu = cpu;
2760 }
2761 
2762 void kvm_arch_vcpu_put(struct kvm_vcpu *vcpu)
2763 {
2764         vcpu->cpu = -1;
2765         if (vcpu->arch.cputm_enabled && !is_vcpu_idle(vcpu))
2766                 __stop_cpu_timer_accounting(vcpu);
2767         kvm_s390_clear_cpuflags(vcpu, CPUSTAT_RUNNING);
2768         vcpu->arch.enabled_gmap = gmap_get_enabled();
2769         gmap_disable(vcpu->arch.enabled_gmap);
2770 
2771 }
2772 
2773 static void kvm_s390_vcpu_initial_reset(struct kvm_vcpu *vcpu)
2774 {
2775         /* this equals initial cpu reset in pop, but we don't switch to ESA */
2776         vcpu->arch.sie_block->gpsw.mask = 0UL;
2777         vcpu->arch.sie_block->gpsw.addr = 0UL;
2778         kvm_s390_set_prefix(vcpu, 0);
2779         kvm_s390_set_cpu_timer(vcpu, 0);
2780         vcpu->arch.sie_block->ckc       = 0UL;
2781         vcpu->arch.sie_block->todpr     = 0;
2782         memset(vcpu->arch.sie_block->gcr, 0, 16 * sizeof(__u64));
2783         vcpu->arch.sie_block->gcr[0]  = CR0_UNUSED_56 |
2784                                         CR0_INTERRUPT_KEY_SUBMASK |
2785                                         CR0_MEASUREMENT_ALERT_SUBMASK;
2786         vcpu->arch.sie_block->gcr[14] = CR14_UNUSED_32 |
2787                                         CR14_UNUSED_33 |
2788                                         CR14_EXTERNAL_DAMAGE_SUBMASK;
2789         /* make sure the new fpc will be lazily loaded */
2790         save_fpu_regs();
2791         current->thread.fpu.fpc = 0;
2792         vcpu->arch.sie_block->gbea = 1;
2793         vcpu->arch.sie_block->pp = 0;
2794         vcpu->arch.sie_block->fpf &= ~FPF_BPBC;
2795         vcpu->arch.pfault_token = KVM_S390_PFAULT_TOKEN_INVALID;
2796         kvm_clear_async_pf_completion_queue(vcpu);
2797         if (!kvm_s390_user_cpu_state_ctrl(vcpu->kvm))
2798                 kvm_s390_vcpu_stop(vcpu);
2799         kvm_s390_clear_local_irqs(vcpu);
2800 }
2801 
2802 void kvm_arch_vcpu_postcreate(struct kvm_vcpu *vcpu)
2803 {
2804         mutex_lock(&vcpu->kvm->lock);
2805         preempt_disable();
2806         vcpu->arch.sie_block->epoch = vcpu->kvm->arch.epoch;
2807         vcpu->arch.sie_block->epdx = vcpu->kvm->arch.epdx;
2808         preempt_enable();
2809         mutex_unlock(&vcpu->kvm->lock);
2810         if (!kvm_is_ucontrol(vcpu->kvm)) {
2811                 vcpu->arch.gmap = vcpu->kvm->arch.gmap;
2812                 sca_add_vcpu(vcpu);
2813         }
2814         if (test_kvm_facility(vcpu->kvm, 74) || vcpu->kvm->arch.user_instr0)
2815                 vcpu->arch.sie_block->ictl |= ICTL_OPEREXC;
2816         /* make vcpu_load load the right gmap on the first trigger */
2817         vcpu->arch.enabled_gmap = vcpu->arch.gmap;
2818 }
2819 
2820 static void kvm_s390_vcpu_crypto_setup(struct kvm_vcpu *vcpu)
2821 {
2822         /*
2823          * If the AP instructions are not being interpreted and the MSAX3
2824          * facility is not configured for the guest, there is nothing to set up.
2825          */
2826         if (!vcpu->kvm->arch.crypto.apie && !test_kvm_facility(vcpu->kvm, 76))
2827                 return;
2828 
2829         vcpu->arch.sie_block->crycbd = vcpu->kvm->arch.crypto.crycbd;
2830         vcpu->arch.sie_block->ecb3 &= ~(ECB3_AES | ECB3_DEA);
2831         vcpu->arch.sie_block->eca &= ~ECA_APIE;
2832 
2833         if (vcpu->kvm->arch.crypto.apie)
2834                 vcpu->arch.sie_block->eca |= ECA_APIE;
2835 
2836         /* Set up protected key support */
2837         if (vcpu->kvm->arch.crypto.aes_kw)
2838                 vcpu->arch.sie_block->ecb3 |= ECB3_AES;
2839         if (vcpu->kvm->arch.crypto.dea_kw)
2840                 vcpu->arch.sie_block->ecb3 |= ECB3_DEA;
2841 }
2842 
2843 void kvm_s390_vcpu_unsetup_cmma(struct kvm_vcpu *vcpu)
2844 {
2845         free_page(vcpu->arch.sie_block->cbrlo);
2846         vcpu->arch.sie_block->cbrlo = 0;
2847 }
2848 
2849 int kvm_s390_vcpu_setup_cmma(struct kvm_vcpu *vcpu)
2850 {
2851         vcpu->arch.sie_block->cbrlo = get_zeroed_page(GFP_KERNEL);
2852         if (!vcpu->arch.sie_block->cbrlo)
2853                 return -ENOMEM;
2854         return 0;
2855 }
2856 
2857 static void kvm_s390_vcpu_setup_model(struct kvm_vcpu *vcpu)
2858 {
2859         struct kvm_s390_cpu_model *model = &vcpu->kvm->arch.model;
2860 
2861         vcpu->arch.sie_block->ibc = model->ibc;
2862         if (test_kvm_facility(vcpu->kvm, 7))
2863                 vcpu->arch.sie_block->fac = (u32)(u64) model->fac_list;
2864 }
2865 
2866 int kvm_arch_vcpu_setup(struct kvm_vcpu *vcpu)
2867 {
2868         int rc = 0;
2869 
2870         atomic_set(&vcpu->arch.sie_block->cpuflags, CPUSTAT_ZARCH |
2871                                                     CPUSTAT_SM |
2872                                                     CPUSTAT_STOPPED);
2873 
2874         if (test_kvm_facility(vcpu->kvm, 78))
2875                 kvm_s390_set_cpuflags(vcpu, CPUSTAT_GED2);
2876         else if (test_kvm_facility(vcpu->kvm, 8))
2877                 kvm_s390_set_cpuflags(vcpu, CPUSTAT_GED);
2878 
2879         kvm_s390_vcpu_setup_model(vcpu);
2880 
2881         /* pgste_set_pte has special handling for !MACHINE_HAS_ESOP */
2882         if (MACHINE_HAS_ESOP)
2883                 vcpu->arch.sie_block->ecb |= ECB_HOSTPROTINT;
2884         if (test_kvm_facility(vcpu->kvm, 9))
2885                 vcpu->arch.sie_block->ecb |= ECB_SRSI;
2886         if (test_kvm_facility(vcpu->kvm, 73))
2887                 vcpu->arch.sie_block->ecb |= ECB_TE;
2888 
2889         if (test_kvm_facility(vcpu->kvm, 8) && vcpu->kvm->arch.use_pfmfi)
2890                 vcpu->arch.sie_block->ecb2 |= ECB2_PFMFI;
2891         if (test_kvm_facility(vcpu->kvm, 130))
2892                 vcpu->arch.sie_block->ecb2 |= ECB2_IEP;
2893         vcpu->arch.sie_block->eca = ECA_MVPGI | ECA_PROTEXCI;
2894         if (sclp.has_cei)
2895                 vcpu->arch.sie_block->eca |= ECA_CEI;
2896         if (sclp.has_ib)
2897                 vcpu->arch.sie_block->eca |= ECA_IB;
2898         if (sclp.has_siif)
2899                 vcpu->arch.sie_block->eca |= ECA_SII;
2900         if (sclp.has_sigpif)
2901                 vcpu->arch.sie_block->eca |= ECA_SIGPI;
2902         if (test_kvm_facility(vcpu->kvm, 129)) {
2903                 vcpu->arch.sie_block->eca |= ECA_VX;
2904                 vcpu->arch.sie_block->ecd |= ECD_HOSTREGMGMT;
2905         }
2906         if (test_kvm_facility(vcpu->kvm, 139))
2907                 vcpu->arch.sie_block->ecd |= ECD_MEF;
2908         if (test_kvm_facility(vcpu->kvm, 156))
2909                 vcpu->arch.sie_block->ecd |= ECD_ETOKENF;
2910         if (vcpu->arch.sie_block->gd) {
2911                 vcpu->arch.sie_block->eca |= ECA_AIV;
2912                 VCPU_EVENT(vcpu, 3, "AIV gisa format-%u enabled for cpu %03u",
2913                            vcpu->arch.sie_block->gd & 0x3, vcpu->vcpu_id);
2914         }
2915         vcpu->arch.sie_block->sdnxo = ((unsigned long) &vcpu->run->s.regs.sdnx)
2916                                         | SDNXC;
2917         vcpu->arch.sie_block->riccbd = (unsigned long) &vcpu->run->s.regs.riccb;
2918 
2919         if (sclp.has_kss)
2920                 kvm_s390_set_cpuflags(vcpu, CPUSTAT_KSS);
2921         else
2922                 vcpu->arch.sie_block->ictl |= ICTL_ISKE | ICTL_SSKE | ICTL_RRBE;
2923 
2924         if (vcpu->kvm->arch.use_cmma) {
2925                 rc = kvm_s390_vcpu_setup_cmma(vcpu);
2926                 if (rc)
2927                         return rc;
2928         }
2929         hrtimer_init(&vcpu->arch.ckc_timer, CLOCK_MONOTONIC, HRTIMER_MODE_REL);
2930         vcpu->arch.ckc_timer.function = kvm_s390_idle_wakeup;
2931 
2932         vcpu->arch.sie_block->hpid = HPID_KVM;
2933 
2934         kvm_s390_vcpu_crypto_setup(vcpu);
2935 
2936         return rc;
2937 }
2938 
2939 struct kvm_vcpu *kvm_arch_vcpu_create(struct kvm *kvm,
2940                                       unsigned int id)
2941 {
2942         struct kvm_vcpu *vcpu;
2943         struct sie_page *sie_page;
2944         int rc = -EINVAL;
2945 
2946         if (!kvm_is_ucontrol(kvm) && !sca_can_add_vcpu(kvm, id))
2947                 goto out;
2948 
2949         rc = -ENOMEM;
2950 
2951         vcpu = kmem_cache_zalloc(kvm_vcpu_cache, GFP_KERNEL);
2952         if (!vcpu)
2953                 goto out;
2954 
2955         BUILD_BUG_ON(sizeof(struct sie_page) != 4096);
2956         sie_page = (struct sie_page *) get_zeroed_page(GFP_KERNEL);
2957         if (!sie_page)
2958                 goto out_free_cpu;
2959 
2960         vcpu->arch.sie_block = &sie_page->sie_block;
2961         vcpu->arch.sie_block->itdba = (unsigned long) &sie_page->itdb;
2962 
2963         /* the real guest size will always be smaller than msl */
2964         vcpu->arch.sie_block->mso = 0;
2965         vcpu->arch.sie_block->msl = sclp.hamax;
2966 
2967         vcpu->arch.sie_block->icpua = id;
2968         spin_lock_init(&vcpu->arch.local_int.lock);
2969         vcpu->arch.sie_block->gd = (u32)(u64)kvm->arch.gisa_int.origin;
2970         if (vcpu->arch.sie_block->gd && sclp.has_gisaf)
2971                 vcpu->arch.sie_block->gd |= GISA_FORMAT1;
2972         seqcount_init(&vcpu->arch.cputm_seqcount);
2973 
2974         rc = kvm_vcpu_init(vcpu, kvm, id);
2975         if (rc)
2976                 goto out_free_sie_block;
2977         VM_EVENT(kvm, 3, "create cpu %d at 0x%pK, sie block at 0x%pK", id, vcpu,
2978                  vcpu->arch.sie_block);
2979         trace_kvm_s390_create_vcpu(id, vcpu, vcpu->arch.sie_block);
2980 
2981         return vcpu;
2982 out_free_sie_block:
2983         free_page((unsigned long)(vcpu->arch.sie_block));
2984 out_free_cpu:
2985         kmem_cache_free(kvm_vcpu_cache, vcpu);
2986 out:
2987         return ERR_PTR(rc);
2988 }
2989 
2990 int kvm_arch_vcpu_runnable(struct kvm_vcpu *vcpu)
2991 {
2992         return kvm_s390_vcpu_has_irq(vcpu, 0);
2993 }
2994 
2995 bool kvm_arch_vcpu_in_kernel(struct kvm_vcpu *vcpu)
2996 {
2997         return !(vcpu->arch.sie_block->gpsw.mask & PSW_MASK_PSTATE);
2998 }
2999 
3000 void kvm_s390_vcpu_block(struct kvm_vcpu *vcpu)
3001 {
3002         atomic_or(PROG_BLOCK_SIE, &vcpu->arch.sie_block->prog20);
3003         exit_sie(vcpu);
3004 }
3005 
3006 void kvm_s390_vcpu_unblock(struct kvm_vcpu *vcpu)
3007 {
3008         atomic_andnot(PROG_BLOCK_SIE, &vcpu->arch.sie_block->prog20);
3009 }
3010 
3011 static void kvm_s390_vcpu_request(struct kvm_vcpu *vcpu)
3012 {
3013         atomic_or(PROG_REQUEST, &vcpu->arch.sie_block->prog20);
3014         exit_sie(vcpu);
3015 }
3016 
3017 bool kvm_s390_vcpu_sie_inhibited(struct kvm_vcpu *vcpu)
3018 {
3019         return atomic_read(&vcpu->arch.sie_block->prog20) &
3020                (PROG_BLOCK_SIE | PROG_REQUEST);
3021 }
3022 
3023 static void kvm_s390_vcpu_request_handled(struct kvm_vcpu *vcpu)
3024 {
3025         atomic_andnot(PROG_REQUEST, &vcpu->arch.sie_block->prog20);
3026 }
3027 
3028 /*
3029  * Kick a guest cpu out of (v)SIE and wait until (v)SIE is not running.
3030  * If the CPU is not running (e.g. waiting as idle) the function will
3031  * return immediately. */
3032 void exit_sie(struct kvm_vcpu *vcpu)
3033 {
3034         kvm_s390_set_cpuflags(vcpu, CPUSTAT_STOP_INT);
3035         kvm_s390_vsie_kick(vcpu);
3036         while (vcpu->arch.sie_block->prog0c & PROG_IN_SIE)
3037                 cpu_relax();
3038 }
3039 
3040 /* Kick a guest cpu out of SIE to process a request synchronously */
3041 void kvm_s390_sync_request(int req, struct kvm_vcpu *vcpu)
3042 {
3043         kvm_make_request(req, vcpu);
3044         kvm_s390_vcpu_request(vcpu);
3045 }
3046 
3047 static void kvm_gmap_notifier(struct gmap *gmap, unsigned long start,
3048                               unsigned long end)
3049 {
3050         struct kvm *kvm = gmap->private;
3051         struct kvm_vcpu *vcpu;
3052         unsigned long prefix;
3053         int i;
3054 
3055         if (gmap_is_shadow(gmap))
3056                 return;
3057         if (start >= 1UL << 31)
3058                 /* We are only interested in prefix pages */
3059                 return;
3060         kvm_for_each_vcpu(i, vcpu, kvm) {
3061                 /* match against both prefix pages */
3062                 prefix = kvm_s390_get_prefix(vcpu);
3063                 if (prefix <= end && start <= prefix + 2*PAGE_SIZE - 1) {
3064                         VCPU_EVENT(vcpu, 2, "gmap notifier for %lx-%lx",
3065                                    start, end);
3066                         kvm_s390_sync_request(KVM_REQ_MMU_RELOAD, vcpu);
3067                 }
3068         }
3069 }
3070 
3071 int kvm_arch_vcpu_should_kick(struct kvm_vcpu *vcpu)
3072 {
3073         /* kvm common code refers to this, but never calls it */
3074         BUG();
3075         return 0;
3076 }
3077 
3078 static int kvm_arch_vcpu_ioctl_get_one_reg(struct kvm_vcpu *vcpu,
3079                                            struct kvm_one_reg *reg)
3080 {
3081         int r = -EINVAL;
3082 
3083         switch (reg->id) {
3084         case KVM_REG_S390_TODPR:
3085                 r = put_user(vcpu->arch.sie_block->todpr,
3086                              (u32 __user *)reg->addr);
3087                 break;
3088         case KVM_REG_S390_EPOCHDIFF:
3089                 r = put_user(vcpu->arch.sie_block->epoch,
3090                              (u64 __user *)reg->addr);
3091                 break;
3092         case KVM_REG_S390_CPU_TIMER:
3093                 r = put_user(kvm_s390_get_cpu_timer(vcpu),
3094                              (u64 __user *)reg->addr);
3095                 break;
3096         case KVM_REG_S390_CLOCK_COMP:
3097                 r = put_user(vcpu->arch.sie_block->ckc,
3098                              (u64 __user *)reg->addr);
3099                 break;
3100         case KVM_REG_S390_PFTOKEN:
3101                 r = put_user(vcpu->arch.pfault_token,
3102                              (u64 __user *)reg->addr);
3103                 break;
3104         case KVM_REG_S390_PFCOMPARE:
3105                 r = put_user(vcpu->arch.pfault_compare,
3106                              (u64 __user *)reg->addr);
3107                 break;
3108         case KVM_REG_S390_PFSELECT:
3109                 r = put_user(vcpu->arch.pfault_select,
3110                              (u64 __user *)reg->addr);
3111                 break;
3112         case KVM_REG_S390_PP:
3113                 r = put_user(vcpu->arch.sie_block->pp,
3114                              (u64 __user *)reg->addr);
3115                 break;
3116         case KVM_REG_S390_GBEA:
3117                 r = put_user(vcpu->arch.sie_block->gbea,
3118                              (u64 __user *)reg->addr);
3119                 break;
3120         default:
3121                 break;
3122         }
3123 
3124         return r;
3125 }
3126 
3127 static int kvm_arch_vcpu_ioctl_set_one_reg(struct kvm_vcpu *vcpu,
3128                                            struct kvm_one_reg *reg)
3129 {
3130         int r = -EINVAL;
3131         __u64 val;
3132 
3133         switch (reg->id) {
3134         case KVM_REG_S390_TODPR:
3135                 r = get_user(vcpu->arch.sie_block->todpr,
3136                              (u32 __user *)reg->addr);
3137                 break;
3138         case KVM_REG_S390_EPOCHDIFF:
3139                 r = get_user(vcpu->arch.sie_block->epoch,
3140                              (u64 __user *)reg->addr);
3141                 break;
3142         case KVM_REG_S390_CPU_TIMER:
3143                 r = get_user(val, (u64 __user *)reg->addr);
3144                 if (!r)
3145                         kvm_s390_set_cpu_timer(vcpu, val);
3146                 break;
3147         case KVM_REG_S390_CLOCK_COMP:
3148                 r = get_user(vcpu->arch.sie_block->ckc,
3149                              (u64 __user *)reg->addr);
3150                 break;
3151         case KVM_REG_S390_PFTOKEN:
3152                 r = get_user(vcpu->arch.pfault_token,
3153                              (u64 __user *)reg->addr);
3154                 if (vcpu->arch.pfault_token == KVM_S390_PFAULT_TOKEN_INVALID)
3155                         kvm_clear_async_pf_completion_queue(vcpu);
3156                 break;
3157         case KVM_REG_S390_PFCOMPARE:
3158                 r = get_user(vcpu->arch.pfault_compare,
3159                              (u64 __user *)reg->addr);
3160                 break;
3161         case KVM_REG_S390_PFSELECT:
3162                 r = get_user(vcpu->arch.pfault_select,
3163                              (u64 __user *)reg->addr);
3164                 break;
3165         case KVM_REG_S390_PP:
3166                 r = get_user(vcpu->arch.sie_block->pp,
3167                              (u64 __user *)reg->addr);
3168                 break;
3169         case KVM_REG_S390_GBEA:
3170                 r = get_user(vcpu->arch.sie_block->gbea,
3171                              (u64 __user *)reg->addr);
3172                 break;
3173         default:
3174                 break;
3175         }
3176 
3177         return r;
3178 }
3179 
3180 static int kvm_arch_vcpu_ioctl_initial_reset(struct kvm_vcpu *vcpu)
3181 {
3182         kvm_s390_vcpu_initial_reset(vcpu);
3183         return 0;
3184 }
3185 
3186 int kvm_arch_vcpu_ioctl_set_regs(struct kvm_vcpu *vcpu, struct kvm_regs *regs)
3187 {
3188         vcpu_load(vcpu);
3189         memcpy(&vcpu->run->s.regs.gprs, &regs->gprs, sizeof(regs->gprs));
3190         vcpu_put(vcpu);
3191         return 0;
3192 }
3193 
3194 int kvm_arch_vcpu_ioctl_get_regs(struct kvm_vcpu *vcpu, struct kvm_regs *regs)
3195 {
3196         vcpu_load(vcpu);
3197         memcpy(&regs->gprs, &vcpu->run->s.regs.gprs, sizeof(regs->gprs));
3198         vcpu_put(vcpu);
3199         return 0;
3200 }
3201 
3202 int kvm_arch_vcpu_ioctl_set_sregs(struct kvm_vcpu *vcpu,
3203                                   struct kvm_sregs *sregs)
3204 {
3205         vcpu_load(vcpu);
3206 
3207         memcpy(&vcpu->run->s.regs.acrs, &sregs->acrs, sizeof(sregs->acrs));
3208         memcpy(&vcpu->arch.sie_block->gcr, &sregs->crs, sizeof(sregs->crs));
3209 
3210         vcpu_put(vcpu);
3211         return 0;
3212 }
3213 
3214 int kvm_arch_vcpu_ioctl_get_sregs(struct kvm_vcpu *vcpu,
3215                                   struct kvm_sregs *sregs)
3216 {
3217         vcpu_load(vcpu);
3218 
3219         memcpy(&sregs->acrs, &vcpu->run->s.regs.acrs, sizeof(sregs->acrs));
3220         memcpy(&sregs->crs, &vcpu->arch.sie_block->gcr, sizeof(sregs->crs));
3221 
3222         vcpu_put(vcpu);
3223         return 0;
3224 }
3225 
3226 int kvm_arch_vcpu_ioctl_set_fpu(struct kvm_vcpu *vcpu, struct kvm_fpu *fpu)
3227 {
3228         int ret = 0;
3229 
3230         vcpu_load(vcpu);
3231 
3232         if (test_fp_ctl(fpu->fpc)) {
3233                 ret = -EINVAL;
3234                 goto out;
3235         }
3236         vcpu->run->s.regs.fpc = fpu->fpc;
3237         if (MACHINE_HAS_VX)
3238                 convert_fp_to_vx((__vector128 *) vcpu->run->s.regs.vrs,
3239                                  (freg_t *) fpu->fprs);
3240         else
3241                 memcpy(vcpu->run->s.regs.fprs, &fpu->fprs, sizeof(fpu->fprs));
3242 
3243 out:
3244         vcpu_put(vcpu);
3245         return ret;
3246 }
3247 
3248 int kvm_arch_vcpu_ioctl_get_fpu(struct kvm_vcpu *vcpu, struct kvm_fpu *fpu)
3249 {
3250         vcpu_load(vcpu);
3251 
3252         /* make sure we have the latest values */
3253         save_fpu_regs();
3254         if (MACHINE_HAS_VX)
3255                 convert_vx_to_fp((freg_t *) fpu->fprs,
3256                                  (__vector128 *) vcpu->run->s.regs.vrs);
3257         else
3258                 memcpy(fpu->fprs, vcpu->run->s.regs.fprs, sizeof(fpu->fprs));
3259         fpu->fpc = vcpu->run->s.regs.fpc;
3260 
3261         vcpu_put(vcpu);
3262         return 0;
3263 }
3264 
3265 static int kvm_arch_vcpu_ioctl_set_initial_psw(struct kvm_vcpu *vcpu, psw_t psw)
3266 {
3267         int rc = 0;
3268 
3269         if (!is_vcpu_stopped(vcpu))
3270                 rc = -EBUSY;
3271         else {
3272                 vcpu->run->psw_mask = psw.mask;
3273                 vcpu->run->psw_addr = psw.addr;
3274         }
3275         return rc;
3276 }
3277 
3278 int kvm_arch_vcpu_ioctl_translate(struct kvm_vcpu *vcpu,
3279                                   struct kvm_translation *tr)
3280 {
3281         return -EINVAL; /* not implemented yet */
3282 }
3283 
3284 #define VALID_GUESTDBG_FLAGS (KVM_GUESTDBG_SINGLESTEP | \
3285                               KVM_GUESTDBG_USE_HW_BP | \
3286                               KVM_GUESTDBG_ENABLE)
3287 
3288 int kvm_arch_vcpu_ioctl_set_guest_debug(struct kvm_vcpu *vcpu,
3289                                         struct kvm_guest_debug *dbg)
3290 {
3291         int rc = 0;
3292 
3293         vcpu_load(vcpu);
3294 
3295         vcpu->guest_debug = 0;
3296         kvm_s390_clear_bp_data(vcpu);
3297 
3298         if (dbg->control & ~VALID_GUESTDBG_FLAGS) {
3299                 rc = -EINVAL;
3300                 goto out;
3301         }
3302         if (!sclp.has_gpere) {
3303                 rc = -EINVAL;
3304                 goto out;
3305         }
3306 
3307         if (dbg->control & KVM_GUESTDBG_ENABLE) {
3308                 vcpu->guest_debug = dbg->control;
3309                 /* enforce guest PER */
3310                 kvm_s390_set_cpuflags(vcpu, CPUSTAT_P);
3311 
3312                 if (dbg->control & KVM_GUESTDBG_USE_HW_BP)
3313                         rc = kvm_s390_import_bp_data(vcpu, dbg);
3314         } else {
3315                 kvm_s390_clear_cpuflags(vcpu, CPUSTAT_P);
3316                 vcpu->arch.guestdbg.last_bp = 0;
3317         }
3318 
3319         if (rc) {
3320                 vcpu->guest_debug = 0;
3321                 kvm_s390_clear_bp_data(vcpu);
3322                 kvm_s390_clear_cpuflags(vcpu, CPUSTAT_P);
3323         }
3324 
3325 out:
3326         vcpu_put(vcpu);
3327         return rc;
3328 }
3329 
3330 int kvm_arch_vcpu_ioctl_get_mpstate(struct kvm_vcpu *vcpu,
3331                                     struct kvm_mp_state *mp_state)
3332 {
3333         int ret;
3334 
3335         vcpu_load(vcpu);
3336 
3337         /* CHECK_STOP and LOAD are not supported yet */
3338         ret = is_vcpu_stopped(vcpu) ? KVM_MP_STATE_STOPPED :
3339                                       KVM_MP_STATE_OPERATING;
3340 
3341         vcpu_put(vcpu);
3342         return ret;
3343 }
3344 
3345 int kvm_arch_vcpu_ioctl_set_mpstate(struct kvm_vcpu *vcpu,
3346                                     struct kvm_mp_state *mp_state)
3347 {
3348         int rc = 0;
3349 
3350         vcpu_load(vcpu);
3351 
3352         /* user space knows about this interface - let it control the state */
3353         vcpu->kvm->arch.user_cpu_state_ctrl = 1;
3354 
3355         switch (mp_state->mp_state) {
3356         case KVM_MP_STATE_STOPPED:
3357                 kvm_s390_vcpu_stop(vcpu);
3358                 break;
3359         case KVM_MP_STATE_OPERATING:
3360                 kvm_s390_vcpu_start(vcpu);
3361                 break;
3362         case KVM_MP_STATE_LOAD:
3363         case KVM_MP_STATE_CHECK_STOP:
3364                 /* fall through - CHECK_STOP and LOAD are not supported yet */
3365         default:
3366                 rc = -ENXIO;
3367         }
3368 
3369         vcpu_put(vcpu);
3370         return rc;
3371 }
3372 
3373 static bool ibs_enabled(struct kvm_vcpu *vcpu)
3374 {
3375         return kvm_s390_test_cpuflags(vcpu, CPUSTAT_IBS);
3376 }
3377 
3378 static int kvm_s390_handle_requests(struct kvm_vcpu *vcpu)
3379 {
3380 retry:
3381         kvm_s390_vcpu_request_handled(vcpu);
3382         if (!kvm_request_pending(vcpu))
3383                 return 0;
3384         /*
3385          * We use MMU_RELOAD just to re-arm the ipte notifier for the
3386          * guest prefix page. gmap_mprotect_notify will wait on the ptl lock.
3387          * This ensures that the ipte instruction for this request has
3388          * already finished. We might race against a second unmapper that
3389          * wants to set the blocking bit. Lets just retry the request loop.
3390          */
3391         if (kvm_check_request(KVM_REQ_MMU_RELOAD, vcpu)) {
3392                 int rc;
3393                 rc = gmap_mprotect_notify(vcpu->arch.gmap,
3394                                           kvm_s390_get_prefix(vcpu),
3395                                           PAGE_SIZE * 2, PROT_WRITE);
3396                 if (rc) {
3397                         kvm_make_request(KVM_REQ_MMU_RELOAD, vcpu);
3398                         return rc;
3399                 }
3400                 goto retry;
3401         }
3402 
3403         if (kvm_check_request(KVM_REQ_TLB_FLUSH, vcpu)) {
3404                 vcpu->arch.sie_block->ihcpu = 0xffff;
3405                 goto retry;
3406         }
3407 
3408         if (kvm_check_request(KVM_REQ_ENABLE_IBS, vcpu)) {
3409                 if (!ibs_enabled(vcpu)) {
3410                         trace_kvm_s390_enable_disable_ibs(vcpu->vcpu_id, 1);
3411                         kvm_s390_set_cpuflags(vcpu, CPUSTAT_IBS);
3412                 }
3413                 goto retry;
3414         }
3415 
3416         if (kvm_check_request(KVM_REQ_DISABLE_IBS, vcpu)) {
3417                 if (ibs_enabled(vcpu)) {
3418                         trace_kvm_s390_enable_disable_ibs(vcpu->vcpu_id, 0);
3419                         kvm_s390_clear_cpuflags(vcpu, CPUSTAT_IBS);
3420                 }
3421                 goto retry;
3422         }
3423 
3424         if (kvm_check_request(KVM_REQ_ICPT_OPEREXC, vcpu)) {
3425                 vcpu->arch.sie_block->ictl |= ICTL_OPEREXC;
3426                 goto retry;
3427         }
3428 
3429         if (kvm_check_request(KVM_REQ_START_MIGRATION, vcpu)) {
3430                 /*
3431                  * Disable CMM virtualization; we will emulate the ESSA
3432                  * instruction manually, in order to provide additional
3433                  * functionalities needed for live migration.
3434                  */
3435                 vcpu->arch.sie_block->ecb2 &= ~ECB2_CMMA;
3436                 goto retry;
3437         }
3438 
3439         if (kvm_check_request(KVM_REQ_STOP_MIGRATION, vcpu)) {
3440                 /*
3441                  * Re-enable CMM virtualization if CMMA is available and
3442                  * CMM has been used.
3443                  */
3444                 if ((vcpu->kvm->arch.use_cmma) &&
3445                     (vcpu->kvm->mm->context.uses_cmm))
3446                         vcpu->arch.sie_block->ecb2 |= ECB2_CMMA;
3447                 goto retry;
3448         }
3449 
3450         /* nothing to do, just clear the request */
3451         kvm_clear_request(KVM_REQ_UNHALT, vcpu);
3452         /* we left the vsie handler, nothing to do, just clear the request */
3453         kvm_clear_request(KVM_REQ_VSIE_RESTART, vcpu);
3454 
3455         return 0;
3456 }
3457 
3458 void kvm_s390_set_tod_clock(struct kvm *kvm,
3459                             const struct kvm_s390_vm_tod_clock *gtod)
3460 {
3461         struct kvm_vcpu *vcpu;
3462         struct kvm_s390_tod_clock_ext htod;
3463         int i;
3464 
3465         mutex_lock(&kvm->lock);
3466         preempt_disable();
3467 
3468         get_tod_clock_ext((char *)&htod);
3469 
3470         kvm->arch.epoch = gtod->tod - htod.tod;
3471         kvm->arch.epdx = 0;
3472         if (test_kvm_facility(kvm, 139)) {
3473                 kvm->arch.epdx = gtod->epoch_idx - htod.epoch_idx;
3474                 if (kvm->arch.epoch > gtod->tod)
3475                         kvm->arch.epdx -= 1;
3476         }
3477 
3478         kvm_s390_vcpu_block_all(kvm);
3479         kvm_for_each_vcpu(i, vcpu, kvm) {
3480                 vcpu->arch.sie_block->epoch = kvm->arch.epoch;
3481                 vcpu->arch.sie_block->epdx  = kvm->arch.epdx;
3482         }
3483 
3484         kvm_s390_vcpu_unblock_all(kvm);
3485         preempt_enable();
3486         mutex_unlock(&kvm->lock);
3487 }
3488 
3489 /**
3490  * kvm_arch_fault_in_page - fault-in guest page if necessary
3491  * @vcpu: The corresponding virtual cpu
3492  * @gpa: Guest physical address
3493  * @writable: Whether the page should be writable or not
3494  *
3495  * Make sure that a guest page has been faulted-in on the host.
3496  *
3497  * Return: Zero on success, negative error code otherwise.
3498  */
3499 long kvm_arch_fault_in_page(struct kvm_vcpu *vcpu, gpa_t gpa, int writable)
3500 {
3501         return gmap_fault(vcpu->arch.gmap, gpa,
3502                           writable ? FAULT_FLAG_WRITE : 0);
3503 }
3504 
3505 static void __kvm_inject_pfault_token(struct kvm_vcpu *vcpu, bool start_token,
3506                                       unsigned long token)
3507 {
3508         struct kvm_s390_interrupt inti;
3509         struct kvm_s390_irq irq;
3510 
3511         if (start_token) {
3512                 irq.u.ext.ext_params2 = token;
3513                 irq.type = KVM_S390_INT_PFAULT_INIT;
3514                 WARN_ON_ONCE(kvm_s390_inject_vcpu(vcpu, &irq));
3515         } else {
3516                 inti.type = KVM_S390_INT_PFAULT_DONE;
3517                 inti.parm64 = token;
3518                 WARN_ON_ONCE(kvm_s390_inject_vm(vcpu->kvm, &inti));
3519         }
3520 }
3521 
3522 void kvm_arch_async_page_not_present(struct kvm_vcpu *vcpu,
3523                                      struct kvm_async_pf *work)
3524 {
3525         trace_kvm_s390_pfault_init(vcpu, work->arch.pfault_token);
3526         __kvm_inject_pfault_token(vcpu, true, work->arch.pfault_token);
3527 }
3528 
3529 void kvm_arch_async_page_present(struct kvm_vcpu *vcpu,
3530                                  struct kvm_async_pf *work)
3531 {
3532         trace_kvm_s390_pfault_done(vcpu, work->arch.pfault_token);
3533         __kvm_inject_pfault_token(vcpu, false, work->arch.pfault_token);
3534 }
3535 
3536 void kvm_arch_async_page_ready(struct kvm_vcpu *vcpu,
3537                                struct kvm_async_pf *work)
3538 {
3539         /* s390 will always inject the page directly */
3540 }
3541 
3542 bool kvm_arch_can_inject_async_page_present(struct kvm_vcpu *vcpu)
3543 {
3544         /*
3545          * s390 will always inject the page directly,
3546          * but we still want check_async_completion to cleanup
3547          */
3548         return true;
3549 }
3550 
3551 static int kvm_arch_setup_async_pf(struct kvm_vcpu *vcpu)
3552 {
3553         hva_t hva;
3554         struct kvm_arch_async_pf arch;
3555         int rc;
3556 
3557         if (vcpu->arch.pfault_token == KVM_S390_PFAULT_TOKEN_INVALID)
3558                 return 0;
3559         if ((vcpu->arch.sie_block->gpsw.mask & vcpu->arch.pfault_select) !=
3560             vcpu->arch.pfault_compare)
3561                 return 0;
3562         if (psw_extint_disabled(vcpu))
3563                 return 0;
3564         if (kvm_s390_vcpu_has_irq(vcpu, 0))
3565                 return 0;
3566         if (!(vcpu->arch.sie_block->gcr[0] & CR0_SERVICE_SIGNAL_SUBMASK))
3567                 return 0;
3568         if (!vcpu->arch.gmap->pfault_enabled)
3569                 return 0;
3570 
3571         hva = gfn_to_hva(vcpu->kvm, gpa_to_gfn(current->thread.gmap_addr));
3572         hva += current->thread.gmap_addr & ~PAGE_MASK;
3573         if (read_guest_real(vcpu, vcpu->arch.pfault_token, &arch.pfault_token, 8))
3574                 return 0;
3575 
3576         rc = kvm_setup_async_pf(vcpu, current->thread.gmap_addr, hva, &arch);
3577         return rc;
3578 }
3579 
3580 static int vcpu_pre_run(struct kvm_vcpu *vcpu)
3581 {
3582         int rc, cpuflags;
3583 
3584         /*
3585          * On s390 notifications for arriving pages will be delivered directly
3586          * to the guest but the house keeping for completed pfaults is
3587          * handled outside the worker.
3588          */
3589         kvm_check_async_pf_completion(vcpu);
3590 
3591         vcpu->arch.sie_block->gg14 = vcpu->run->s.regs.gprs[14];
3592         vcpu->arch.sie_block->gg15 = vcpu->run->s.regs.gprs[15];
3593 
3594         if (need_resched())
3595                 schedule();
3596 
3597         if (test_cpu_flag(CIF_MCCK_PENDING))
3598                 s390_handle_mcck();
3599 
3600         if (!kvm_is_ucontrol(vcpu->kvm)) {
3601                 rc = kvm_s390_deliver_pending_interrupts(vcpu);
3602                 if (rc)
3603                         return rc;
3604         }
3605 
3606         rc = kvm_s390_handle_requests(vcpu);
3607         if (rc)
3608                 return rc;
3609 
3610         if (guestdbg_enabled(vcpu)) {
3611                 kvm_s390_backup_guest_per_regs(vcpu);
3612                 kvm_s390_patch_guest_per_regs(vcpu);
3613         }
3614 
3615         clear_bit(vcpu->vcpu_id, vcpu->kvm->arch.gisa_int.kicked_mask);
3616 
3617         vcpu->arch.sie_block->icptcode = 0;
3618         cpuflags = atomic_read(&vcpu->arch.sie_block->cpuflags);
3619         VCPU_EVENT(vcpu, 6, "entering sie flags %x", cpuflags);
3620         trace_kvm_s390_sie_enter(vcpu, cpuflags);
3621 
3622         return 0;
3623 }
3624 
3625 static int vcpu_post_run_fault_in_sie(struct kvm_vcpu *vcpu)
3626 {
3627         struct kvm_s390_pgm_info pgm_info = {
3628                 .code = PGM_ADDRESSING,
3629         };
3630         u8 opcode, ilen;
3631         int rc;
3632 
3633         VCPU_EVENT(vcpu, 3, "%s", "fault in sie instruction");
3634         trace_kvm_s390_sie_fault(vcpu);
3635 
3636         /*
3637          * We want to inject an addressing exception, which is defined as a
3638          * suppressing or terminating exception. However, since we came here
3639          * by a DAT access exception, the PSW still points to the faulting
3640          * instruction since DAT exceptions are nullifying. So we've got
3641          * to look up the current opcode to get the length of the instruction
3642          * to be able to forward the PSW.
3643          */
3644         rc = read_guest_instr(vcpu, vcpu->arch.sie_block->gpsw.addr, &opcode, 1);
3645         ilen = insn_length(opcode);
3646         if (rc < 0) {
3647                 return rc;
3648         } else if (rc) {
3649                 /* Instruction-Fetching Exceptions - we can't detect the ilen.
3650                  * Forward by arbitrary ilc, injection will take care of
3651                  * nullification if necessary.
3652                  */
3653                 pgm_info = vcpu->arch.pgm;
3654                 ilen = 4;
3655         }
3656         pgm_info.flags = ilen | KVM_S390_PGM_FLAGS_ILC_VALID;
3657         kvm_s390_forward_psw(vcpu, ilen);
3658         return kvm_s390_inject_prog_irq(vcpu, &pgm_info);
3659 }
3660 
3661 static int vcpu_post_run(struct kvm_vcpu *vcpu, int exit_reason)
3662 {
3663         struct mcck_volatile_info *mcck_info;
3664         struct sie_page *sie_page;
3665 
3666         VCPU_EVENT(vcpu, 6, "exit sie icptcode %d",
3667                    vcpu->arch.sie_block->icptcode);
3668         trace_kvm_s390_sie_exit(vcpu, vcpu->arch.sie_block->icptcode);
3669 
3670         if (guestdbg_enabled(vcpu))
3671                 kvm_s390_restore_guest_per_regs(vcpu);
3672 
3673         vcpu->run->s.regs.gprs[14] = vcpu->arch.sie_block->gg14;
3674         vcpu->run->s.regs.gprs[15] = vcpu->arch.sie_block->gg15;
3675 
3676         if (exit_reason == -EINTR) {
3677                 VCPU_EVENT(vcpu, 3, "%s", "machine check");
3678                 sie_page = container_of(vcpu->arch.sie_block,
3679                                         struct sie_page, sie_block);
3680                 mcck_info = &sie_page->mcck_info;
3681                 kvm_s390_reinject_machine_check(vcpu, mcck_info);
3682                 return 0;
3683         }
3684 
3685         if (vcpu->arch.sie_block->icptcode > 0) {
3686                 int rc = kvm_handle_sie_intercept(vcpu);
3687 
3688                 if (rc != -EOPNOTSUPP)
3689                         return rc;
3690                 vcpu->run->exit_reason = KVM_EXIT_S390_SIEIC;
3691                 vcpu->run->s390_sieic.icptcode = vcpu->arch.sie_block->icptcode;
3692                 vcpu->run->s390_sieic.ipa = vcpu->arch.sie_block->ipa;
3693                 vcpu->run->s390_sieic.ipb = vcpu->arch.sie_block->ipb;
3694                 return -EREMOTE;
3695         } else if (exit_reason != -EFAULT) {
3696                 vcpu->stat.exit_null++;
3697                 return 0;
3698         } else if (kvm_is_ucontrol(vcpu->kvm)) {
3699                 vcpu->run->exit_reason = KVM_EXIT_S390_UCONTROL;
3700                 vcpu->run->s390_ucontrol.trans_exc_code =
3701                                                 current->thread.gmap_addr;
3702                 vcpu->run->s390_ucontrol.pgm_code = 0x10;
3703                 return -EREMOTE;
3704         } else if (current->thread.gmap_pfault) {
3705                 trace_kvm_s390_major_guest_pfault(vcpu);
3706                 current->thread.gmap_pfault = 0;
3707                 if (kvm_arch_setup_async_pf(vcpu))
3708                         return 0;
3709                 return kvm_arch_fault_in_page(vcpu, current->thread.gmap_addr, 1);
3710         }
3711         return vcpu_post_run_fault_in_sie(vcpu);
3712 }
3713 
3714 static int __vcpu_run(struct kvm_vcpu *vcpu)
3715 {
3716         int rc, exit_reason;
3717 
3718         /*
3719          * We try to hold kvm->srcu during most of vcpu_run (except when run-
3720          * ning the guest), so that memslots (and other stuff) are protected
3721          */
3722         vcpu->srcu_idx = srcu_read_lock(&vcpu->kvm->srcu);
3723 
3724         do {
3725                 rc = vcpu_pre_run(vcpu);
3726                 if (rc)
3727                         break;
3728 
3729                 srcu_read_unlock(&vcpu->kvm->srcu, vcpu->srcu_idx);
3730                 /*
3731                  * As PF_VCPU will be used in fault handler, between
3732                  * guest_enter and guest_exit should be no uaccess.
3733                  */
3734                 local_irq_disable();
3735                 guest_enter_irqoff();
3736                 __disable_cpu_timer_accounting(vcpu);
3737                 local_irq_enable();
3738                 exit_reason = sie64a(vcpu->arch.sie_block,
3739                                      vcpu->run->s.regs.gprs);
3740                 local_irq_disable();
3741                 __enable_cpu_timer_accounting(vcpu);
3742                 guest_exit_irqoff();
3743                 local_irq_enable();
3744                 vcpu->srcu_idx = srcu_read_lock(&vcpu->kvm->srcu);
3745 
3746                 rc = vcpu_post_run(vcpu, exit_reason);
3747         } while (!signal_pending(current) && !guestdbg_exit_pending(vcpu) && !rc);
3748 
3749         srcu_read_unlock(&vcpu->kvm->srcu, vcpu->srcu_idx);
3750         return rc;
3751 }
3752 
3753 static void sync_regs(struct kvm_vcpu *vcpu, struct kvm_run *kvm_run)
3754 {
3755         struct runtime_instr_cb *riccb;
3756         struct gs_cb *gscb;
3757 
3758         riccb = (struct runtime_instr_cb *) &kvm_run->s.regs.riccb;
3759         gscb = (struct gs_cb *) &kvm_run->s.regs.gscb;
3760         vcpu->arch.sie_block->gpsw.mask = kvm_run->psw_mask;
3761         vcpu->arch.sie_block->gpsw.addr = kvm_run->psw_addr;
3762         if (kvm_run->kvm_dirty_regs & KVM_SYNC_PREFIX)
3763                 kvm_s390_set_prefix(vcpu, kvm_run->s.regs.prefix);
3764         if (kvm_run->kvm_dirty_regs & KVM_SYNC_CRS) {
3765                 memcpy(&vcpu->arch.sie_block->gcr, &kvm_run->s.regs.crs, 128);
3766                 /* some control register changes require a tlb flush */
3767                 kvm_make_request(KVM_REQ_TLB_FLUSH, vcpu);
3768         }
3769         if (kvm_run->kvm_dirty_regs & KVM_SYNC_ARCH0) {
3770                 kvm_s390_set_cpu_timer(vcpu, kvm_run->s.regs.cputm);
3771                 vcpu->arch.sie_block->ckc = kvm_run->s.regs.ckc;
3772                 vcpu->arch.sie_block->todpr = kvm_run->s.regs.todpr;
3773                 vcpu->arch.sie_block->pp = kvm_run->s.regs.pp;
3774                 vcpu->arch.sie_block->gbea = kvm_run->s.regs.gbea;
3775         }
3776         if (kvm_run->kvm_dirty_regs & KVM_SYNC_PFAULT) {
3777                 vcpu->arch.pfault_token = kvm_run->s.regs.pft;
3778                 vcpu->arch.pfault_select = kvm_run->s.regs.pfs;
3779                 vcpu->arch.pfault_compare = kvm_run->s.regs.pfc;
3780                 if (vcpu->arch.pfault_token == KVM_S390_PFAULT_TOKEN_INVALID)
3781                         kvm_clear_async_pf_completion_queue(vcpu);
3782         }
3783         /*
3784          * If userspace sets the riccb (e.g. after migration) to a valid state,
3785          * we should enable RI here instead of doing the lazy enablement.
3786          */
3787         if ((kvm_run->kvm_dirty_regs & KVM_SYNC_RICCB) &&
3788             test_kvm_facility(vcpu->kvm, 64) &&
3789             riccb->v &&
3790             !(vcpu->arch.sie_block->ecb3 & ECB3_RI)) {
3791                 VCPU_EVENT(vcpu, 3, "%s", "ENABLE: RI (sync_regs)");
3792                 vcpu->arch.sie_block->ecb3 |= ECB3_RI;
3793         }
3794         /*
3795          * If userspace sets the gscb (e.g. after migration) to non-zero,
3796          * we should enable GS here instead of doing the lazy enablement.
3797          */
3798         if ((kvm_run->kvm_dirty_regs & KVM_SYNC_GSCB) &&
3799             test_kvm_facility(vcpu->kvm, 133) &&
3800             gscb->gssm &&
3801             !vcpu->arch.gs_enabled) {
3802                 VCPU_EVENT(vcpu, 3, "%s", "ENABLE: GS (sync_regs)");
3803                 vcpu->arch.sie_block->ecb |= ECB_GS;
3804                 vcpu->arch.sie_block->ecd |= ECD_HOSTREGMGMT;
3805                 vcpu->arch.gs_enabled = 1;
3806         }
3807         if ((kvm_run->kvm_dirty_regs & KVM_SYNC_BPBC) &&
3808             test_kvm_facility(vcpu->kvm, 82)) {
3809                 vcpu->arch.sie_block->fpf &= ~FPF_BPBC;
3810                 vcpu->arch.sie_block->fpf |= kvm_run->s.regs.bpbc ? FPF_BPBC : 0;
3811         }
3812         save_access_regs(vcpu->arch.host_acrs);
3813         restore_access_regs(vcpu->run->s.regs.acrs);
3814         /* save host (userspace) fprs/vrs */
3815         save_fpu_regs();
3816         vcpu->arch.host_fpregs.fpc = current->thread.fpu.fpc;
3817         vcpu->arch.host_fpregs.regs = current->thread.fpu.regs;
3818         if (MACHINE_HAS_VX)
3819                 current->thread.fpu.regs = vcpu->run->s.regs.vrs;
3820         else
3821                 current->thread.fpu.regs = vcpu->run->s.regs.fprs;
3822         current->thread.fpu.fpc = vcpu->run->s.regs.fpc;
3823         if (test_fp_ctl(current->thread.fpu.fpc))
3824                 /* User space provided an invalid FPC, let's clear it */
3825                 current->thread.fpu.fpc = 0;
3826         if (MACHINE_HAS_GS) {
3827                 preempt_disable();
3828                 __ctl_set_bit(2, 4);
3829                 if (current->thread.gs_cb) {
3830                         vcpu->arch.host_gscb = current->thread.gs_cb;
3831                         save_gs_cb(vcpu->arch.host_gscb);
3832                 }
3833                 if (vcpu->arch.gs_enabled) {
3834                         current->thread.gs_cb = (struct gs_cb *)
3835                                                 &vcpu->run->s.regs.gscb;
3836                         restore_gs_cb(current->thread.gs_cb);
3837                 }
3838                 preempt_enable();
3839         }
3840         /* SIE will load etoken directly from SDNX and therefore kvm_run */
3841 
3842         kvm_run->kvm_dirty_regs = 0;
3843 }
3844 
3845 static void store_regs(struct kvm_vcpu *vcpu, struct kvm_run *kvm_run)
3846 {
3847         kvm_run->psw_mask = vcpu->arch.sie_block->gpsw.mask;
3848         kvm_run->psw_addr = vcpu->arch.sie_block->gpsw.addr;
3849         kvm_run->s.regs.prefix = kvm_s390_get_prefix(vcpu);
3850         memcpy(&kvm_run->s.regs.crs, &vcpu->arch.sie_block->gcr, 128);
3851         kvm_run->s.regs.cputm = kvm_s390_get_cpu_timer(vcpu);
3852         kvm_run->s.regs.ckc = vcpu->arch.sie_block->ckc;
3853         kvm_run->s.regs.todpr = vcpu->arch.sie_block->todpr;
3854         kvm_run->s.regs.pp = vcpu->arch.sie_block->pp;
3855         kvm_run->s.regs.gbea = vcpu->arch.sie_block->gbea;
3856         kvm_run->s.regs.pft = vcpu->arch.pfault_token;
3857         kvm_run->s.regs.pfs = vcpu->arch.pfault_select;
3858         kvm_run->s.regs.pfc = vcpu->arch.pfault_compare;
3859         kvm_run->s.regs.bpbc = (vcpu->arch.sie_block->fpf & FPF_BPBC) == FPF_BPBC;
3860         save_access_regs(vcpu->run->s.regs.acrs);
3861         restore_access_regs(vcpu->arch.host_acrs);
3862         /* Save guest register state */
3863         save_fpu_regs();
3864         vcpu->run->s.regs.fpc = current->thread.fpu.fpc;
3865         /* Restore will be done lazily at return */
3866         current->thread.fpu.fpc = vcpu->arch.host_fpregs.fpc;
3867         current->thread.fpu.regs = vcpu->arch.host_fpregs.regs;
3868         if (MACHINE_HAS_GS) {
3869                 __ctl_set_bit(2, 4);
3870                 if (vcpu->arch.gs_enabled)
3871                         save_gs_cb(current->thread.gs_cb);
3872                 preempt_disable();
3873                 current->thread.gs_cb = vcpu->arch.host_gscb;
3874                 restore_gs_cb(vcpu->arch.host_gscb);
3875                 preempt_enable();
3876                 if (!vcpu->arch.host_gscb)
3877                         __ctl_clear_bit(2, 4);
3878                 vcpu->arch.host_gscb = NULL;
3879         }
3880         /* SIE will save etoken directly into SDNX and therefore kvm_run */
3881 }
3882 
3883 int kvm_arch_vcpu_ioctl_run(struct kvm_vcpu *vcpu, struct kvm_run *kvm_run)
3884 {
3885         int rc;
3886 
3887         if (kvm_run->immediate_exit)
3888                 return -EINTR;
3889 
3890         vcpu_load(vcpu);
3891 
3892         if (guestdbg_exit_pending(vcpu)) {
3893                 kvm_s390_prepare_debug_exit(vcpu);
3894                 rc = 0;
3895                 goto out;
3896         }
3897 
3898         kvm_sigset_activate(vcpu);
3899 
3900         if (!kvm_s390_user_cpu_state_ctrl(vcpu->kvm)) {
3901                 kvm_s390_vcpu_start(vcpu);
3902         } else if (is_vcpu_stopped(vcpu)) {
3903                 pr_err_ratelimited("can't run stopped vcpu %d\n",
3904                                    vcpu->vcpu_id);
3905                 rc = -EINVAL;
3906                 goto out;
3907         }
3908 
3909         sync_regs(vcpu, kvm_run);
3910         enable_cpu_timer_accounting(vcpu);
3911 
3912         might_fault();
3913         rc = __vcpu_run(vcpu);
3914 
3915         if (signal_pending(current) && !rc) {
3916                 kvm_run->exit_reason = KVM_EXIT_INTR;
3917                 rc = -EINTR;
3918         }
3919 
3920         if (guestdbg_exit_pending(vcpu) && !rc)  {
3921                 kvm_s390_prepare_debug_exit(vcpu);
3922                 rc = 0;
3923         }
3924 
3925         if (rc == -EREMOTE) {
3926                 /* userspace support is needed, kvm_run has been prepared */
3927                 rc = 0;
3928         }
3929 
3930         disable_cpu_timer_accounting(vcpu);
3931         store_regs(vcpu, kvm_run);
3932 
3933         kvm_sigset_deactivate(vcpu);
3934 
3935         vcpu->stat.exit_userspace++;
3936 out:
3937         vcpu_put(vcpu);
3938         return rc;
3939 }
3940 
3941 /*
3942  * store status at address
3943  * we use have two special cases:
3944  * KVM_S390_STORE_STATUS_NOADDR: -> 0x1200 on 64 bit
3945  * KVM_S390_STORE_STATUS_PREFIXED: -> prefix
3946  */
3947 int kvm_s390_store_status_unloaded(struct kvm_vcpu *vcpu, unsigned long gpa)
3948 {
3949         unsigned char archmode = 1;
3950         freg_t fprs[NUM_FPRS];
3951         unsigned int px;
3952         u64 clkcomp, cputm;
3953         int rc;
3954 
3955         px = kvm_s390_get_prefix(vcpu);
3956         if (gpa == KVM_S390_STORE_STATUS_NOADDR) {
3957                 if (write_guest_abs(vcpu, 163, &archmode, 1))
3958                         return -EFAULT;
3959                 gpa = 0;
3960         } else if (gpa == KVM_S390_STORE_STATUS_PREFIXED) {
3961                 if (write_guest_real(vcpu, 163, &archmode, 1))
3962                         return -EFAULT;
3963                 gpa = px;
3964         } else
3965                 gpa -= __LC_FPREGS_SAVE_AREA;
3966 
3967         /* manually convert vector registers if necessary */
3968         if (MACHINE_HAS_VX) {
3969                 convert_vx_to_fp(fprs, (__vector128 *) vcpu->run->s.regs.vrs);
3970                 rc = write_guest_abs(vcpu, gpa + __LC_FPREGS_SAVE_AREA,
3971                                      fprs, 128);
3972         } else {
3973                 rc = write_guest_abs(vcpu, gpa + __LC_FPREGS_SAVE_AREA,
3974                                      vcpu->run->s.regs.fprs, 128);
3975         }
3976         rc |= write_guest_abs(vcpu, gpa + __LC_GPREGS_SAVE_AREA,
3977                               vcpu->run->s.regs.gprs, 128);
3978         rc |= write_guest_abs(vcpu, gpa + __LC_PSW_SAVE_AREA,
3979                               &vcpu->arch.sie_block->gpsw, 16);
3980         rc |= write_guest_abs(vcpu, gpa + __LC_PREFIX_SAVE_AREA,
3981                               &px, 4);
3982         rc |= write_guest_abs(vcpu, gpa + __LC_FP_CREG_SAVE_AREA,
3983                               &vcpu->run->s.regs.fpc, 4);
3984         rc |= write_guest_abs(vcpu, gpa + __LC_TOD_PROGREG_SAVE_AREA,
3985                               &vcpu->arch.sie_block->todpr, 4);
3986         cputm = kvm_s390_get_cpu_timer(vcpu);
3987         rc |= write_guest_abs(vcpu, gpa + __LC_CPU_TIMER_SAVE_AREA,
3988                               &cputm, 8);
3989         clkcomp = vcpu->arch.sie_block->ckc >> 8;
3990         rc |= write_guest_abs(vcpu, gpa + __LC_CLOCK_COMP_SAVE_AREA,
3991                               &clkcomp, 8);
3992         rc |= write_guest_abs(vcpu, gpa + __LC_AREGS_SAVE_AREA,
3993                               &vcpu->run->s.regs.acrs, 64);
3994         rc |= write_guest_abs(vcpu, gpa + __LC_CREGS_SAVE_AREA,
3995                               &vcpu->arch.sie_block->gcr, 128);
3996         return rc ? -EFAULT : 0;
3997 }
3998 
3999 int kvm_s390_vcpu_store_status(struct kvm_vcpu *vcpu, unsigned long addr)
4000 {
4001         /*
4002          * The guest FPRS and ACRS are in the host FPRS/ACRS due to the lazy
4003          * switch in the run ioctl. Let's update our copies before we save
4004          * it into the save area
4005          */
4006         save_fpu_regs();
4007         vcpu->run->s.regs.fpc = current->thread.fpu.fpc;
4008         save_access_regs(vcpu->run->s.regs.acrs);
4009 
4010         return kvm_s390_store_status_unloaded(vcpu, addr);
4011 }
4012 
4013 static void __disable_ibs_on_vcpu(struct kvm_vcpu *vcpu)
4014 {
4015         kvm_check_request(KVM_REQ_ENABLE_IBS, vcpu);
4016         kvm_s390_sync_request(KVM_REQ_DISABLE_IBS, vcpu);
4017 }
4018 
4019 static void __disable_ibs_on_all_vcpus(struct kvm *kvm)
4020 {
4021         unsigned int i;
4022         struct kvm_vcpu *vcpu;
4023 
4024         kvm_for_each_vcpu(i, vcpu, kvm) {
4025                 __disable_ibs_on_vcpu(vcpu);
4026         }
4027 }
4028 
4029 static void __enable_ibs_on_vcpu(struct kvm_vcpu *vcpu)
4030 {
4031         if (!sclp.has_ibs)
4032                 return;
4033         kvm_check_request(KVM_REQ_DISABLE_IBS, vcpu);
4034         kvm_s390_sync_request(KVM_REQ_ENABLE_IBS, vcpu);
4035 }
4036 
4037 void kvm_s390_vcpu_start(struct kvm_vcpu *vcpu)
4038 {
4039         int i, online_vcpus, started_vcpus = 0;
4040 
4041         if (!is_vcpu_stopped(vcpu))
4042                 return;
4043 
4044         trace_kvm_s390_vcpu_start_stop(vcpu->vcpu_id, 1);
4045         /* Only one cpu at a time may enter/leave the STOPPED state. */
4046         spin_lock(&vcpu->kvm->arch.start_stop_lock);
4047         online_vcpus = atomic_read(&vcpu->kvm->online_vcpus);
4048 
4049         for (i = 0; i < online_vcpus; i++) {
4050                 if (!is_vcpu_stopped(vcpu->kvm->vcpus[i]))
4051                         started_vcpus++;
4052         }
4053 
4054         if (started_vcpus == 0) {
4055                 /* we're the only active VCPU -> speed it up */
4056                 __enable_ibs_on_vcpu(vcpu);
4057         } else if (started_vcpus == 1) {
4058                 /*
4059                  * As we are starting a second VCPU, we have to disable
4060                  * the IBS facility on all VCPUs to remove potentially
4061                  * oustanding ENABLE requests.
4062                  */
4063                 __disable_ibs_on_all_vcpus(vcpu->kvm);
4064         }
4065 
4066         kvm_s390_clear_cpuflags(vcpu, CPUSTAT_STOPPED);
4067         /*
4068          * Another VCPU might have used IBS while we were offline.
4069          * Let's play safe and flush the VCPU at startup.
4070          */
4071         kvm_make_request(KVM_REQ_TLB_FLUSH, vcpu);
4072         spin_unlock(&vcpu->kvm->arch.start_stop_lock);
4073         return;
4074 }
4075 
4076 void kvm_s390_vcpu_stop(struct kvm_vcpu *vcpu)
4077 {
4078         int i, online_vcpus, started_vcpus = 0;
4079         struct kvm_vcpu *started_vcpu = NULL;
4080 
4081         if (is_vcpu_stopped(vcpu))
4082                 return;
4083 
4084         trace_kvm_s390_vcpu_start_stop(vcpu->vcpu_id, 0);
4085         /* Only one cpu at a time may enter/leave the STOPPED state. */
4086         spin_lock(&vcpu->kvm->arch.start_stop_lock);
4087         online_vcpus = atomic_read(&vcpu->kvm->online_vcpus);
4088 
4089         /* SIGP STOP and SIGP STOP AND STORE STATUS has been fully processed */
4090         kvm_s390_clear_stop_irq(vcpu);
4091 
4092         kvm_s390_set_cpuflags(vcpu, CPUSTAT_STOPPED);
4093         __disable_ibs_on_vcpu(vcpu);
4094 
4095         for (i = 0; i < online_vcpus; i++) {
4096                 if (!is_vcpu_stopped(vcpu->kvm->vcpus[i])) {
4097                         started_vcpus++;
4098                         started_vcpu = vcpu->kvm->vcpus[i];
4099                 }
4100         }
4101 
4102         if (started_vcpus == 1) {
4103                 /*
4104                  * As we only have one VCPU left, we want to enable the
4105                  * IBS facility for that VCPU to speed it up.
4106                  */
4107                 __enable_ibs_on_vcpu(started_vcpu);
4108         }
4109 
4110         spin_unlock(&vcpu->kvm->arch.start_stop_lock);
4111         return;
4112 }
4113 
4114 static int kvm_vcpu_ioctl_enable_cap(struct kvm_vcpu *vcpu,
4115                                      struct kvm_enable_cap *cap)
4116 {
4117         int r;
4118 
4119         if (cap->flags)
4120                 return -EINVAL;
4121 
4122         switch (cap->cap) {
4123         case KVM_CAP_S390_CSS_SUPPORT:
4124                 if (!vcpu->kvm->arch.css_support) {
4125                         vcpu->kvm->arch.css_support = 1;
4126                         VM_EVENT(vcpu->kvm, 3, "%s", "ENABLE: CSS support");
4127                         trace_kvm_s390_enable_css(vcpu->kvm);
4128                 }
4129                 r = 0;
4130                 break;
4131         default:
4132                 r = -EINVAL;
4133                 break;
4134         }
4135         return r;
4136 }
4137 
4138 static long kvm_s390_guest_mem_op(struct kvm_vcpu *vcpu,
4139                                   struct kvm_s390_mem_op *mop)
4140 {
4141         void __user *uaddr = (void __user *)mop->buf;
4142         void *tmpbuf = NULL;
4143         int r, srcu_idx;
4144         const u64 supported_flags = KVM_S390_MEMOP_F_INJECT_EXCEPTION
4145                                     | KVM_S390_MEMOP_F_CHECK_ONLY;
4146 
4147         if (mop->flags & ~supported_flags)
4148                 return -EINVAL;
4149 
4150         if (mop->size > MEM_OP_MAX_SIZE)
4151                 return -E2BIG;
4152 
4153         if (!(mop->flags & KVM_S390_MEMOP_F_CHECK_ONLY)) {
4154                 tmpbuf = vmalloc(mop->size);
4155                 if (!tmpbuf)
4156                         return -ENOMEM;
4157         }
4158 
4159         srcu_idx = srcu_read_lock(&vcpu->kvm->srcu);
4160 
4161         switch (mop->op) {
4162         case KVM_S390_MEMOP_LOGICAL_READ:
4163                 if (mop->flags & KVM_S390_MEMOP_F_CHECK_ONLY) {
4164                         r = check_gva_range(vcpu, mop->gaddr, mop->ar,
4165                                             mop->size, GACC_FETCH);
4166                         break;
4167                 }
4168                 r = read_guest(vcpu, mop->gaddr, mop->ar, tmpbuf, mop->size);
4169                 if (r == 0) {
4170                         if (copy_to_user(uaddr, tmpbuf, mop->size))
4171                                 r = -EFAULT;
4172                 }
4173                 break;
4174         case KVM_S390_MEMOP_LOGICAL_WRITE:
4175                 if (mop->flags & KVM_S390_MEMOP_F_CHECK_ONLY) {
4176                         r = check_gva_range(vcpu, mop->gaddr, mop->ar,
4177                                             mop->size, GACC_STORE);
4178                         break;
4179                 }
4180                 if (copy_from_user(tmpbuf, uaddr, mop->size)) {
4181                         r = -EFAULT;
4182                         break;
4183                 }
4184                 r = write_guest(vcpu, mop->gaddr, mop->ar, tmpbuf, mop->size);
4185                 break;
4186         default:
4187                 r = -EINVAL;
4188         }
4189 
4190         srcu_read_unlock(&vcpu->kvm->srcu, srcu_idx);
4191 
4192         if (r > 0 && (mop->flags & KVM_S390_MEMOP_F_INJECT_EXCEPTION) != 0)
4193                 kvm_s390_inject_prog_irq(vcpu, &vcpu->arch.pgm);
4194 
4195         vfree(tmpbuf);
4196         return r;
4197 }
4198 
4199 long kvm_arch_vcpu_async_ioctl(struct file *filp,
4200                                unsigned int ioctl, unsigned long arg)
4201 {
4202         struct kvm_vcpu *vcpu = filp->private_data;
4203         void __user *argp = (void __user *)arg;
4204 
4205         switch (ioctl) {
4206         case KVM_S390_IRQ: {
4207                 struct kvm_s390_irq s390irq;
4208 
4209                 if (copy_from_user(&s390irq, argp, sizeof(s390irq)))
4210                         return -EFAULT;
4211                 return kvm_s390_inject_vcpu(vcpu, &s390irq);
4212         }
4213         case KVM_S390_INTERRUPT: {
4214                 struct kvm_s390_interrupt s390int;
4215                 struct kvm_s390_irq s390irq;
4216 
4217                 if (copy_from_user(&s390int, argp, sizeof(s390int)))
4218                         return -EFAULT;
4219                 if (s390int_to_s390irq(&s390int, &s390irq))
4220                         return -EINVAL;
4221                 return kvm_s390_inject_vcpu(vcpu, &s390irq);
4222         }
4223         }
4224         return -ENOIOCTLCMD;
4225 }
4226 
4227 long kvm_arch_vcpu_ioctl(struct file *filp,
4228                          unsigned int ioctl, unsigned long arg)
4229 {
4230         struct kvm_vcpu *vcpu = filp->private_data;
4231         void __user *argp = (void __user *)arg;
4232         int idx;
4233         long r;
4234 
4235         vcpu_load(vcpu);
4236 
4237         switch (ioctl) {
4238         case KVM_S390_STORE_STATUS:
4239                 idx = srcu_read_lock(&vcpu->kvm->srcu);
4240                 r = kvm_s390_vcpu_store_status(vcpu, arg);
4241                 srcu_read_unlock(&vcpu->kvm->srcu, idx);
4242                 break;
4243         case KVM_S390_SET_INITIAL_PSW: {
4244                 psw_t psw;
4245 
4246                 r = -EFAULT;
4247                 if (copy_from_user(&psw, argp, sizeof(psw)))
4248                         break;
4249                 r = kvm_arch_vcpu_ioctl_set_initial_psw(vcpu, psw);
4250                 break;
4251         }
4252         case KVM_S390_INITIAL_RESET:
4253                 r = kvm_arch_vcpu_ioctl_initial_reset(vcpu);
4254                 break;
4255         case KVM_SET_ONE_REG:
4256         case KVM_GET_ONE_REG: {
4257                 struct kvm_one_reg reg;
4258                 r = -EFAULT;
4259                 if (copy_from_user(&reg, argp, sizeof(reg)))
4260                         break;
4261                 if (ioctl == KVM_SET_ONE_REG)
4262                         r = kvm_arch_vcpu_ioctl_set_one_reg(vcpu, &reg);
4263                 else
4264                         r = kvm_arch_vcpu_ioctl_get_one_reg(vcpu, &reg);
4265                 break;
4266         }
4267 #ifdef CONFIG_KVM_S390_UCONTROL
4268         case KVM_S390_UCAS_MAP: {
4269                 struct kvm_s390_ucas_mapping ucasmap;
4270 
4271                 if (copy_from_user(&ucasmap, argp, sizeof(ucasmap))) {
4272                         r = -EFAULT;
4273                         break;
4274                 }
4275 
4276                 if (!kvm_is_ucontrol(vcpu->kvm)) {
4277                         r = -EINVAL;
4278                         break;
4279                 }
4280 
4281                 r = gmap_map_segment(vcpu->arch.gmap, ucasmap.user_addr,
4282                                      ucasmap.vcpu_addr, ucasmap.length);
4283                 break;
4284         }
4285         case KVM_S390_UCAS_UNMAP: {
4286                 struct kvm_s390_ucas_mapping ucasmap;
4287 
4288                 if (copy_from_user(&ucasmap, argp, sizeof(ucasmap))) {
4289                         r = -EFAULT;
4290                         break;
4291                 }
4292 
4293                 if (!kvm_is_ucontrol(vcpu->kvm)) {
4294                         r = -EINVAL;
4295                         break;
4296                 }
4297 
4298                 r = gmap_unmap_segment(vcpu->arch.gmap, ucasmap.vcpu_addr,
4299                         ucasmap.length);
4300                 break;
4301         }
4302 #endif
4303         case KVM_S390_VCPU_FAULT: {
4304                 r = gmap_fault(vcpu->arch.gmap, arg, 0);
4305                 break;
4306         }
4307         case KVM_ENABLE_CAP:
4308         {
4309                 struct kvm_enable_cap cap;
4310                 r = -EFAULT;
4311                 if (copy_from_user(&cap, argp, sizeof(cap)))
4312                         break;
4313                 r = kvm_vcpu_ioctl_enable_cap(vcpu, &cap);
4314                 break;
4315         }
4316         case KVM_S390_MEM_OP: {
4317                 struct kvm_s390_mem_op mem_op;
4318 
4319                 if (copy_from_user(&mem_op, argp, sizeof(mem_op)) == 0)
4320                         r = kvm_s390_guest_mem_op(vcpu, &mem_op);
4321                 else
4322                         r = -EFAULT;
4323                 break;
4324         }
4325         case KVM_S390_SET_IRQ_STATE: {
4326                 struct kvm_s390_irq_state irq_state;
4327 
4328                 r = -EFAULT;
4329                 if (copy_from_user(&irq_state, argp, sizeof(irq_state)))
4330                         break;
4331                 if (irq_state.len > VCPU_IRQS_MAX_BUF ||
4332                     irq_state.len == 0 ||
4333                     irq_state.len % sizeof(struct kvm_s390_irq) > 0) {
4334                         r = -EINVAL;
4335                         break;
4336                 }
4337                 /* do not use irq_state.flags, it will break old QEMUs */
4338                 r = kvm_s390_set_irq_state(vcpu,
4339                                            (void __user *) irq_state.buf,
4340                                            irq_state.len);
4341                 break;
4342         }
4343         case KVM_S390_GET_IRQ_STATE: {
4344                 struct kvm_s390_irq_state irq_state;
4345 
4346                 r = -EFAULT;
4347                 if (copy_from_user(&irq_state, argp, sizeof(irq_state)))
4348                         break;
4349                 if (irq_state.len == 0) {
4350                         r = -EINVAL;
4351                         break;
4352                 }
4353                 /* do not use irq_state.flags, it will break old QEMUs */
4354                 r = kvm_s390_get_irq_state(vcpu,
4355                                            (__u8 __user *)  irq_state.buf,
4356                                            irq_state.len);
4357                 break;
4358         }
4359         default:
4360                 r = -ENOTTY;
4361         }
4362 
4363         vcpu_put(vcpu);
4364         return r;
4365 }
4366 
4367 vm_fault_t kvm_arch_vcpu_fault(struct kvm_vcpu *vcpu, struct vm_fault *vmf)
4368 {
4369 #ifdef CONFIG_KVM_S390_UCONTROL
4370         if ((vmf->pgoff == KVM_S390_SIE_PAGE_OFFSET)
4371                  && (kvm_is_ucontrol(vcpu->kvm))) {
4372                 vmf->page = virt_to_page(vcpu->arch.sie_block);
4373                 get_page(vmf->page);
4374                 return 0;
4375         }
4376 #endif
4377         return VM_FAULT_SIGBUS;
4378 }
4379 
4380 int kvm_arch_create_memslot(struct kvm *kvm, struct kvm_memory_slot *slot,
4381                             unsigned long npages)
4382 {
4383         return 0;
4384 }
4385 
4386 /* Section: memory related */
4387 int kvm_arch_prepare_memory_region(struct kvm *kvm,
4388                                    struct kvm_memory_slot *memslot,
4389                                    const struct kvm_userspace_memory_region *mem,
4390                                    enum kvm_mr_change change)
4391 {
4392         /* A few sanity checks. We can have memory slots which have to be
4393            located/ended at a segment boundary (1MB). The memory in userland is
4394            ok to be fragmented into various different vmas. It is okay to mmap()
4395            and munmap() stuff in this slot after doing this call at any time */
4396 
4397         if (mem->userspace_addr & 0xffffful)
4398                 return -EINVAL;
4399 
4400         if (mem->memory_size & 0xffffful)
4401                 return -EINVAL;
4402 
4403         if (mem->guest_phys_addr + mem->memory_size > kvm->arch.mem_limit)
4404                 return -EINVAL;
4405 
4406         return 0;
4407 }
4408 
4409 void kvm_arch_commit_memory_region(struct kvm *kvm,
4410                                 const struct kvm_userspace_memory_region *mem,
4411                                 const struct kvm_memory_slot *old,
4412                                 const struct kvm_memory_slot *new,
4413                                 enum kvm_mr_change change)
4414 {
4415         int rc;
4416 
4417         /* If the basics of the memslot do not change, we do not want
4418          * to update the gmap. Every update causes several unnecessary
4419          * segment translation exceptions. This is usually handled just
4420          * fine by the normal fault handler + gmap, but it will also
4421          * cause faults on the prefix page of running guest CPUs.
4422          */
4423         if (old->userspace_addr == mem->userspace_addr &&
4424             old->base_gfn * PAGE_SIZE == mem->guest_phys_addr &&
4425             old->npages * PAGE_SIZE == mem->memory_size)
4426                 return;
4427 
4428         rc = gmap_map_segment(kvm->arch.gmap, mem->userspace_addr,
4429                 mem->guest_phys_addr, mem->memory_size);
4430         if (rc)
4431                 pr_warn("failed to commit memory region\n");
4432         return;
4433 }
4434 
4435 static inline unsigned long nonhyp_mask(int i)
4436 {
4437         unsigned int nonhyp_fai = (sclp.hmfai << i * 2) >> 30;
4438 
4439         return 0x0000ffffffffffffUL >> (nonhyp_fai << 4);
4440 }
4441 
4442 void kvm_arch_vcpu_block_finish(struct kvm_vcpu *vcpu)
4443 {
4444         vcpu->valid_wakeup = false;
4445 }
4446 
4447 static int __init kvm_s390_init(void)
4448 {
4449         int i;
4450 
4451         if (!sclp.has_sief2) {
4452                 pr_info("SIE is not available\n");
4453                 return -ENODEV;
4454         }
4455 
4456         if (nested && hpage) {
4457                 pr_info("A KVM host that supports nesting cannot back its KVM guests with huge pages\n");
4458                 return -EINVAL;
4459         }
4460 
4461         for (i = 0; i < 16; i++)
4462                 kvm_s390_fac_base[i] |=
4463                         S390_lowcore.stfle_fac_list[i] & nonhyp_mask(i);
4464 
4465         return kvm_init(NULL, sizeof(struct kvm_vcpu), 0, THIS_MODULE);
4466 }
4467 
4468 static void __exit kvm_s390_exit(void)
4469 {
4470         kvm_exit();
4471 }
4472 
4473 module_init(kvm_s390_init);
4474 module_exit(kvm_s390_exit);
4475 
4476 /*
4477  * Enable autoloading of the kvm module.
4478  * Note that we add the module alias here instead of virt/kvm/kvm_main.c
4479  * since x86 takes a different approach.
4480  */
4481 #include <linux/miscdevice.h>
4482 MODULE_ALIAS_MISCDEV(KVM_MINOR);
4483 MODULE_ALIAS("devname:kvm");
4484 

~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~

kernel.org | git.kernel.org | LWN.net | Project Home | Wiki (Japanese) | Wiki (English) | SVN repository | Mail admin

Linux® is a registered trademark of Linus Torvalds in the United States and other countries.
TOMOYO® is a registered trademark of NTT DATA CORPORATION.

osdn.jp