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

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

Version: ~ [ linux-5.12 ] ~ [ linux-5.11.16 ] ~ [ linux-5.10.32 ] ~ [ linux-5.9.16 ] ~ [ linux-5.8.18 ] ~ [ linux-5.7.19 ] ~ [ linux-5.6.19 ] ~ [ linux-5.5.19 ] ~ [ linux-5.4.114 ] ~ [ linux-5.3.18 ] ~ [ linux-5.2.21 ] ~ [ linux-5.1.21 ] ~ [ linux-5.0.21 ] ~ [ linux-4.20.17 ] ~ [ linux-4.19.188 ] ~ [ linux-4.18.20 ] ~ [ linux-4.17.19 ] ~ [ linux-4.16.18 ] ~ [ linux-4.15.18 ] ~ [ linux-4.14.231 ] ~ [ linux-4.13.16 ] ~ [ linux-4.12.14 ] ~ [ linux-4.11.12 ] ~ [ linux-4.10.17 ] ~ [ linux-4.9.267 ] ~ [ linux-4.8.17 ] ~ [ linux-4.7.10 ] ~ [ linux-4.6.7 ] ~ [ linux-4.5.7 ] ~ [ linux-4.4.267 ] ~ [ linux-4.3.6 ] ~ [ linux-4.2.8 ] ~ [ linux-4.1.52 ] ~ [ linux-4.0.9 ] ~ [ linux-3.18.140 ] ~ [ linux-3.16.85 ] ~ [ linux-3.14.79 ] ~ [ linux-3.12.74 ] ~ [ linux-3.10.108 ] ~ [ 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 /*
  2  * hosting zSeries kernel virtual machines
  3  *
  4  * Copyright IBM Corp. 2008, 2009
  5  *
  6  * This program is free software; you can redistribute it and/or modify
  7  * it under the terms of the GNU General Public License (version 2 only)
  8  * as published by the Free Software Foundation.
  9  *
 10  *    Author(s): Carsten Otte <cotte@de.ibm.com>
 11  *               Christian Borntraeger <borntraeger@de.ibm.com>
 12  *               Heiko Carstens <heiko.carstens@de.ibm.com>
 13  *               Christian Ehrhardt <ehrhardt@de.ibm.com>
 14  *               Jason J. Herne <jjherne@us.ibm.com>
 15  */
 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/random.h>
 27 #include <linux/slab.h>
 28 #include <linux/timer.h>
 29 #include <linux/vmalloc.h>
 30 #include <linux/bitmap.h>
 31 #include <asm/asm-offsets.h>
 32 #include <asm/lowcore.h>
 33 #include <asm/stp.h>
 34 #include <asm/pgtable.h>
 35 #include <asm/gmap.h>
 36 #include <asm/nmi.h>
 37 #include <asm/switch_to.h>
 38 #include <asm/isc.h>
 39 #include <asm/sclp.h>
 40 #include <asm/cpacf.h>
 41 #include <asm/timex.h>
 42 #include "kvm-s390.h"
 43 #include "gaccess.h"
 44 
 45 #define KMSG_COMPONENT "kvm-s390"
 46 #undef pr_fmt
 47 #define pr_fmt(fmt) KMSG_COMPONENT ": " fmt
 48 
 49 #define CREATE_TRACE_POINTS
 50 #include "trace.h"
 51 #include "trace-s390.h"
 52 
 53 #define MEM_OP_MAX_SIZE 65536   /* Maximum transfer size for KVM_S390_MEM_OP */
 54 #define LOCAL_IRQS 32
 55 #define VCPU_IRQS_MAX_BUF (sizeof(struct kvm_s390_irq) * \
 56                            (KVM_MAX_VCPUS + LOCAL_IRQS))
 57 
 58 #define VCPU_STAT(x) offsetof(struct kvm_vcpu, stat.x), KVM_STAT_VCPU
 59 
 60 struct kvm_stats_debugfs_item debugfs_entries[] = {
 61         { "userspace_handled", VCPU_STAT(exit_userspace) },
 62         { "exit_null", VCPU_STAT(exit_null) },
 63         { "exit_validity", VCPU_STAT(exit_validity) },
 64         { "exit_stop_request", VCPU_STAT(exit_stop_request) },
 65         { "exit_external_request", VCPU_STAT(exit_external_request) },
 66         { "exit_external_interrupt", VCPU_STAT(exit_external_interrupt) },
 67         { "exit_instruction", VCPU_STAT(exit_instruction) },
 68         { "exit_pei", VCPU_STAT(exit_pei) },
 69         { "exit_program_interruption", VCPU_STAT(exit_program_interruption) },
 70         { "exit_instr_and_program_int", VCPU_STAT(exit_instr_and_program) },
 71         { "exit_operation_exception", VCPU_STAT(exit_operation_exception) },
 72         { "halt_successful_poll", VCPU_STAT(halt_successful_poll) },
 73         { "halt_attempted_poll", VCPU_STAT(halt_attempted_poll) },
 74         { "halt_poll_invalid", VCPU_STAT(halt_poll_invalid) },
 75         { "halt_wakeup", VCPU_STAT(halt_wakeup) },
 76         { "instruction_lctlg", VCPU_STAT(instruction_lctlg) },
 77         { "instruction_lctl", VCPU_STAT(instruction_lctl) },
 78         { "instruction_stctl", VCPU_STAT(instruction_stctl) },
 79         { "instruction_stctg", VCPU_STAT(instruction_stctg) },
 80         { "deliver_emergency_signal", VCPU_STAT(deliver_emergency_signal) },
 81         { "deliver_external_call", VCPU_STAT(deliver_external_call) },
 82         { "deliver_service_signal", VCPU_STAT(deliver_service_signal) },
 83         { "deliver_virtio_interrupt", VCPU_STAT(deliver_virtio_interrupt) },
 84         { "deliver_stop_signal", VCPU_STAT(deliver_stop_signal) },
 85         { "deliver_prefix_signal", VCPU_STAT(deliver_prefix_signal) },
 86         { "deliver_restart_signal", VCPU_STAT(deliver_restart_signal) },
 87         { "deliver_program_interruption", VCPU_STAT(deliver_program_int) },
 88         { "exit_wait_state", VCPU_STAT(exit_wait_state) },
 89         { "instruction_pfmf", VCPU_STAT(instruction_pfmf) },
 90         { "instruction_stidp", VCPU_STAT(instruction_stidp) },
 91         { "instruction_spx", VCPU_STAT(instruction_spx) },
 92         { "instruction_stpx", VCPU_STAT(instruction_stpx) },
 93         { "instruction_stap", VCPU_STAT(instruction_stap) },
 94         { "instruction_storage_key", VCPU_STAT(instruction_storage_key) },
 95         { "instruction_ipte_interlock", VCPU_STAT(instruction_ipte_interlock) },
 96         { "instruction_stsch", VCPU_STAT(instruction_stsch) },
 97         { "instruction_chsc", VCPU_STAT(instruction_chsc) },
 98         { "instruction_essa", VCPU_STAT(instruction_essa) },
 99         { "instruction_stsi", VCPU_STAT(instruction_stsi) },
100         { "instruction_stfl", VCPU_STAT(instruction_stfl) },
101         { "instruction_tprot", VCPU_STAT(instruction_tprot) },
102         { "instruction_sthyi", VCPU_STAT(instruction_sthyi) },
103         { "instruction_sie", VCPU_STAT(instruction_sie) },
104         { "instruction_sigp_sense", VCPU_STAT(instruction_sigp_sense) },
105         { "instruction_sigp_sense_running", VCPU_STAT(instruction_sigp_sense_running) },
106         { "instruction_sigp_external_call", VCPU_STAT(instruction_sigp_external_call) },
107         { "instruction_sigp_emergency", VCPU_STAT(instruction_sigp_emergency) },
108         { "instruction_sigp_cond_emergency", VCPU_STAT(instruction_sigp_cond_emergency) },
109         { "instruction_sigp_start", VCPU_STAT(instruction_sigp_start) },
110         { "instruction_sigp_stop", VCPU_STAT(instruction_sigp_stop) },
111         { "instruction_sigp_stop_store_status", VCPU_STAT(instruction_sigp_stop_store_status) },
112         { "instruction_sigp_store_status", VCPU_STAT(instruction_sigp_store_status) },
113         { "instruction_sigp_store_adtl_status", VCPU_STAT(instruction_sigp_store_adtl_status) },
114         { "instruction_sigp_set_arch", VCPU_STAT(instruction_sigp_arch) },
115         { "instruction_sigp_set_prefix", VCPU_STAT(instruction_sigp_prefix) },
116         { "instruction_sigp_restart", VCPU_STAT(instruction_sigp_restart) },
117         { "instruction_sigp_cpu_reset", VCPU_STAT(instruction_sigp_cpu_reset) },
118         { "instruction_sigp_init_cpu_reset", VCPU_STAT(instruction_sigp_init_cpu_reset) },
119         { "instruction_sigp_unknown", VCPU_STAT(instruction_sigp_unknown) },
120         { "diagnose_10", VCPU_STAT(diagnose_10) },
121         { "diagnose_44", VCPU_STAT(diagnose_44) },
122         { "diagnose_9c", VCPU_STAT(diagnose_9c) },
123         { "diagnose_258", VCPU_STAT(diagnose_258) },
124         { "diagnose_308", VCPU_STAT(diagnose_308) },
125         { "diagnose_500", VCPU_STAT(diagnose_500) },
126         { NULL }
127 };
128 
129 /* allow nested virtualization in KVM (if enabled by user space) */
130 static int nested;
131 module_param(nested, int, S_IRUGO);
132 MODULE_PARM_DESC(nested, "Nested virtualization support");
133 
134 /* upper facilities limit for kvm */
135 unsigned long kvm_s390_fac_list_mask[16] = {
136         0xffe6000000000000UL,
137         0x005e000000000000UL,
138 };
139 
140 unsigned long kvm_s390_fac_list_mask_size(void)
141 {
142         BUILD_BUG_ON(ARRAY_SIZE(kvm_s390_fac_list_mask) > S390_ARCH_FAC_MASK_SIZE_U64);
143         return ARRAY_SIZE(kvm_s390_fac_list_mask);
144 }
145 
146 /* available cpu features supported by kvm */
147 static DECLARE_BITMAP(kvm_s390_available_cpu_feat, KVM_S390_VM_CPU_FEAT_NR_BITS);
148 /* available subfunctions indicated via query / "test bit" */
149 static struct kvm_s390_vm_cpu_subfunc kvm_s390_available_subfunc;
150 
151 static struct gmap_notifier gmap_notifier;
152 static struct gmap_notifier vsie_gmap_notifier;
153 debug_info_t *kvm_s390_dbf;
154 
155 /* Section: not file related */
156 int kvm_arch_hardware_enable(void)
157 {
158         /* every s390 is virtualization enabled ;-) */
159         return 0;
160 }
161 
162 static void kvm_gmap_notifier(struct gmap *gmap, unsigned long start,
163                               unsigned long end);
164 
165 /*
166  * This callback is executed during stop_machine(). All CPUs are therefore
167  * temporarily stopped. In order not to change guest behavior, we have to
168  * disable preemption whenever we touch the epoch of kvm and the VCPUs,
169  * so a CPU won't be stopped while calculating with the epoch.
170  */
171 static int kvm_clock_sync(struct notifier_block *notifier, unsigned long val,
172                           void *v)
173 {
174         struct kvm *kvm;
175         struct kvm_vcpu *vcpu;
176         int i;
177         unsigned long long *delta = v;
178 
179         list_for_each_entry(kvm, &vm_list, vm_list) {
180                 kvm->arch.epoch -= *delta;
181                 kvm_for_each_vcpu(i, vcpu, kvm) {
182                         vcpu->arch.sie_block->epoch -= *delta;
183                         if (vcpu->arch.cputm_enabled)
184                                 vcpu->arch.cputm_start += *delta;
185                         if (vcpu->arch.vsie_block)
186                                 vcpu->arch.vsie_block->epoch -= *delta;
187                 }
188         }
189         return NOTIFY_OK;
190 }
191 
192 static struct notifier_block kvm_clock_notifier = {
193         .notifier_call = kvm_clock_sync,
194 };
195 
196 int kvm_arch_hardware_setup(void)
197 {
198         gmap_notifier.notifier_call = kvm_gmap_notifier;
199         gmap_register_pte_notifier(&gmap_notifier);
200         vsie_gmap_notifier.notifier_call = kvm_s390_vsie_gmap_notifier;
201         gmap_register_pte_notifier(&vsie_gmap_notifier);
202         atomic_notifier_chain_register(&s390_epoch_delta_notifier,
203                                        &kvm_clock_notifier);
204         return 0;
205 }
206 
207 void kvm_arch_hardware_unsetup(void)
208 {
209         gmap_unregister_pte_notifier(&gmap_notifier);
210         gmap_unregister_pte_notifier(&vsie_gmap_notifier);
211         atomic_notifier_chain_unregister(&s390_epoch_delta_notifier,
212                                          &kvm_clock_notifier);
213 }
214 
215 static void allow_cpu_feat(unsigned long nr)
216 {
217         set_bit_inv(nr, kvm_s390_available_cpu_feat);
218 }
219 
220 static inline int plo_test_bit(unsigned char nr)
221 {
222         register unsigned long r0 asm("") = (unsigned long) nr | 0x100;
223         int cc = 3; /* subfunction not available */
224 
225         asm volatile(
226                 /* Parameter registers are ignored for "test bit" */
227                 "       plo     0,0,0,0(0)\n"
228                 "       ipm     %0\n"
229                 "       srl     %0,28\n"
230                 : "=d" (cc)
231                 : "d" (r0)
232                 : "cc");
233         return cc == 0;
234 }
235 
236 static void kvm_s390_cpu_feat_init(void)
237 {
238         int i;
239 
240         for (i = 0; i < 256; ++i) {
241                 if (plo_test_bit(i))
242                         kvm_s390_available_subfunc.plo[i >> 3] |= 0x80 >> (i & 7);
243         }
244 
245         if (test_facility(28)) /* TOD-clock steering */
246                 ptff(kvm_s390_available_subfunc.ptff,
247                      sizeof(kvm_s390_available_subfunc.ptff),
248                      PTFF_QAF);
249 
250         if (test_facility(17)) { /* MSA */
251                 __cpacf_query(CPACF_KMAC, kvm_s390_available_subfunc.kmac);
252                 __cpacf_query(CPACF_KMC, kvm_s390_available_subfunc.kmc);
253                 __cpacf_query(CPACF_KM, kvm_s390_available_subfunc.km);
254                 __cpacf_query(CPACF_KIMD, kvm_s390_available_subfunc.kimd);
255                 __cpacf_query(CPACF_KLMD, kvm_s390_available_subfunc.klmd);
256         }
257         if (test_facility(76)) /* MSA3 */
258                 __cpacf_query(CPACF_PCKMO, kvm_s390_available_subfunc.pckmo);
259         if (test_facility(77)) { /* MSA4 */
260                 __cpacf_query(CPACF_KMCTR, kvm_s390_available_subfunc.kmctr);
261                 __cpacf_query(CPACF_KMF, kvm_s390_available_subfunc.kmf);
262                 __cpacf_query(CPACF_KMO, kvm_s390_available_subfunc.kmo);
263                 __cpacf_query(CPACF_PCC, kvm_s390_available_subfunc.pcc);
264         }
265         if (test_facility(57)) /* MSA5 */
266                 __cpacf_query(CPACF_PPNO, kvm_s390_available_subfunc.ppno);
267 
268         if (MACHINE_HAS_ESOP)
269                 allow_cpu_feat(KVM_S390_VM_CPU_FEAT_ESOP);
270         /*
271          * We need SIE support, ESOP (PROT_READ protection for gmap_shadow),
272          * 64bit SCAO (SCA passthrough) and IDTE (for gmap_shadow unshadowing).
273          */
274         if (!sclp.has_sief2 || !MACHINE_HAS_ESOP || !sclp.has_64bscao ||
275             !test_facility(3) || !nested)
276                 return;
277         allow_cpu_feat(KVM_S390_VM_CPU_FEAT_SIEF2);
278         if (sclp.has_64bscao)
279                 allow_cpu_feat(KVM_S390_VM_CPU_FEAT_64BSCAO);
280         if (sclp.has_siif)
281                 allow_cpu_feat(KVM_S390_VM_CPU_FEAT_SIIF);
282         if (sclp.has_gpere)
283                 allow_cpu_feat(KVM_S390_VM_CPU_FEAT_GPERE);
284         if (sclp.has_gsls)
285                 allow_cpu_feat(KVM_S390_VM_CPU_FEAT_GSLS);
286         if (sclp.has_ib)
287                 allow_cpu_feat(KVM_S390_VM_CPU_FEAT_IB);
288         if (sclp.has_cei)
289                 allow_cpu_feat(KVM_S390_VM_CPU_FEAT_CEI);
290         if (sclp.has_ibs)
291                 allow_cpu_feat(KVM_S390_VM_CPU_FEAT_IBS);
292         /*
293          * KVM_S390_VM_CPU_FEAT_SKEY: Wrong shadow of PTE.I bits will make
294          * all skey handling functions read/set the skey from the PGSTE
295          * instead of the real storage key.
296          *
297          * KVM_S390_VM_CPU_FEAT_CMMA: Wrong shadow of PTE.I bits will make
298          * pages being detected as preserved although they are resident.
299          *
300          * KVM_S390_VM_CPU_FEAT_PFMFI: Wrong shadow of PTE.I bits will
301          * have the same effect as for KVM_S390_VM_CPU_FEAT_SKEY.
302          *
303          * For KVM_S390_VM_CPU_FEAT_SKEY, KVM_S390_VM_CPU_FEAT_CMMA and
304          * KVM_S390_VM_CPU_FEAT_PFMFI, all PTE.I and PGSTE bits have to be
305          * correctly shadowed. We can do that for the PGSTE but not for PTE.I.
306          *
307          * KVM_S390_VM_CPU_FEAT_SIGPIF: Wrong SCB addresses in the SCA. We
308          * cannot easily shadow the SCA because of the ipte lock.
309          */
310 }
311 
312 int kvm_arch_init(void *opaque)
313 {
314         kvm_s390_dbf = debug_register("kvm-trace", 32, 1, 7 * sizeof(long));
315         if (!kvm_s390_dbf)
316                 return -ENOMEM;
317 
318         if (debug_register_view(kvm_s390_dbf, &debug_sprintf_view)) {
319                 debug_unregister(kvm_s390_dbf);
320                 return -ENOMEM;
321         }
322 
323         kvm_s390_cpu_feat_init();
324 
325         /* Register floating interrupt controller interface. */
326         return kvm_register_device_ops(&kvm_flic_ops, KVM_DEV_TYPE_FLIC);
327 }
328 
329 void kvm_arch_exit(void)
330 {
331         debug_unregister(kvm_s390_dbf);
332 }
333 
334 /* Section: device related */
335 long kvm_arch_dev_ioctl(struct file *filp,
336                         unsigned int ioctl, unsigned long arg)
337 {
338         if (ioctl == KVM_S390_ENABLE_SIE)
339                 return s390_enable_sie();
340         return -EINVAL;
341 }
342 
343 int kvm_vm_ioctl_check_extension(struct kvm *kvm, long ext)
344 {
345         int r;
346 
347         switch (ext) {
348         case KVM_CAP_S390_PSW:
349         case KVM_CAP_S390_GMAP:
350         case KVM_CAP_SYNC_MMU:
351 #ifdef CONFIG_KVM_S390_UCONTROL
352         case KVM_CAP_S390_UCONTROL:
353 #endif
354         case KVM_CAP_ASYNC_PF:
355         case KVM_CAP_SYNC_REGS:
356         case KVM_CAP_ONE_REG:
357         case KVM_CAP_ENABLE_CAP:
358         case KVM_CAP_S390_CSS_SUPPORT:
359         case KVM_CAP_IOEVENTFD:
360         case KVM_CAP_DEVICE_CTRL:
361         case KVM_CAP_ENABLE_CAP_VM:
362         case KVM_CAP_S390_IRQCHIP:
363         case KVM_CAP_VM_ATTRIBUTES:
364         case KVM_CAP_MP_STATE:
365         case KVM_CAP_S390_INJECT_IRQ:
366         case KVM_CAP_S390_USER_SIGP:
367         case KVM_CAP_S390_USER_STSI:
368         case KVM_CAP_S390_SKEYS:
369         case KVM_CAP_S390_IRQ_STATE:
370         case KVM_CAP_S390_USER_INSTR0:
371                 r = 1;
372                 break;
373         case KVM_CAP_S390_MEM_OP:
374                 r = MEM_OP_MAX_SIZE;
375                 break;
376         case KVM_CAP_NR_VCPUS:
377         case KVM_CAP_MAX_VCPUS:
378                 r = KVM_S390_BSCA_CPU_SLOTS;
379                 if (sclp.has_esca && sclp.has_64bscao)
380                         r = KVM_S390_ESCA_CPU_SLOTS;
381                 break;
382         case KVM_CAP_NR_MEMSLOTS:
383                 r = KVM_USER_MEM_SLOTS;
384                 break;
385         case KVM_CAP_S390_COW:
386                 r = MACHINE_HAS_ESOP;
387                 break;
388         case KVM_CAP_S390_VECTOR_REGISTERS:
389                 r = MACHINE_HAS_VX;
390                 break;
391         case KVM_CAP_S390_RI:
392                 r = test_facility(64);
393                 break;
394         default:
395                 r = 0;
396         }
397         return r;
398 }
399 
400 static void kvm_s390_sync_dirty_log(struct kvm *kvm,
401                                         struct kvm_memory_slot *memslot)
402 {
403         gfn_t cur_gfn, last_gfn;
404         unsigned long address;
405         struct gmap *gmap = kvm->arch.gmap;
406 
407         /* Loop over all guest pages */
408         last_gfn = memslot->base_gfn + memslot->npages;
409         for (cur_gfn = memslot->base_gfn; cur_gfn <= last_gfn; cur_gfn++) {
410                 address = gfn_to_hva_memslot(memslot, cur_gfn);
411 
412                 if (test_and_clear_guest_dirty(gmap->mm, address))
413                         mark_page_dirty(kvm, cur_gfn);
414                 if (fatal_signal_pending(current))
415                         return;
416                 cond_resched();
417         }
418 }
419 
420 /* Section: vm related */
421 static void sca_del_vcpu(struct kvm_vcpu *vcpu);
422 
423 /*
424  * Get (and clear) the dirty memory log for a memory slot.
425  */
426 int kvm_vm_ioctl_get_dirty_log(struct kvm *kvm,
427                                struct kvm_dirty_log *log)
428 {
429         int r;
430         unsigned long n;
431         struct kvm_memslots *slots;
432         struct kvm_memory_slot *memslot;
433         int is_dirty = 0;
434 
435         mutex_lock(&kvm->slots_lock);
436 
437         r = -EINVAL;
438         if (log->slot >= KVM_USER_MEM_SLOTS)
439                 goto out;
440 
441         slots = kvm_memslots(kvm);
442         memslot = id_to_memslot(slots, log->slot);
443         r = -ENOENT;
444         if (!memslot->dirty_bitmap)
445                 goto out;
446 
447         kvm_s390_sync_dirty_log(kvm, memslot);
448         r = kvm_get_dirty_log(kvm, log, &is_dirty);
449         if (r)
450                 goto out;
451 
452         /* Clear the dirty log */
453         if (is_dirty) {
454                 n = kvm_dirty_bitmap_bytes(memslot);
455                 memset(memslot->dirty_bitmap, 0, n);
456         }
457         r = 0;
458 out:
459         mutex_unlock(&kvm->slots_lock);
460         return r;
461 }
462 
463 static void icpt_operexc_on_all_vcpus(struct kvm *kvm)
464 {
465         unsigned int i;
466         struct kvm_vcpu *vcpu;
467 
468         kvm_for_each_vcpu(i, vcpu, kvm) {
469                 kvm_s390_sync_request(KVM_REQ_ICPT_OPEREXC, vcpu);
470         }
471 }
472 
473 static int kvm_vm_ioctl_enable_cap(struct kvm *kvm, struct kvm_enable_cap *cap)
474 {
475         int r;
476 
477         if (cap->flags)
478                 return -EINVAL;
479 
480         switch (cap->cap) {
481         case KVM_CAP_S390_IRQCHIP:
482                 VM_EVENT(kvm, 3, "%s", "ENABLE: CAP_S390_IRQCHIP");
483                 kvm->arch.use_irqchip = 1;
484                 r = 0;
485                 break;
486         case KVM_CAP_S390_USER_SIGP:
487                 VM_EVENT(kvm, 3, "%s", "ENABLE: CAP_S390_USER_SIGP");
488                 kvm->arch.user_sigp = 1;
489                 r = 0;
490                 break;
491         case KVM_CAP_S390_VECTOR_REGISTERS:
492                 mutex_lock(&kvm->lock);
493                 if (kvm->created_vcpus) {
494                         r = -EBUSY;
495                 } else if (MACHINE_HAS_VX) {
496                         set_kvm_facility(kvm->arch.model.fac_mask, 129);
497                         set_kvm_facility(kvm->arch.model.fac_list, 129);
498                         r = 0;
499                 } else
500                         r = -EINVAL;
501                 mutex_unlock(&kvm->lock);
502                 VM_EVENT(kvm, 3, "ENABLE: CAP_S390_VECTOR_REGISTERS %s",
503                          r ? "(not available)" : "(success)");
504                 break;
505         case KVM_CAP_S390_RI:
506                 r = -EINVAL;
507                 mutex_lock(&kvm->lock);
508                 if (kvm->created_vcpus) {
509                         r = -EBUSY;
510                 } else if (test_facility(64)) {
511                         set_kvm_facility(kvm->arch.model.fac_mask, 64);
512                         set_kvm_facility(kvm->arch.model.fac_list, 64);
513                         r = 0;
514                 }
515                 mutex_unlock(&kvm->lock);
516                 VM_EVENT(kvm, 3, "ENABLE: CAP_S390_RI %s",
517                          r ? "(not available)" : "(success)");
518                 break;
519         case KVM_CAP_S390_USER_STSI:
520                 VM_EVENT(kvm, 3, "%s", "ENABLE: CAP_S390_USER_STSI");
521                 kvm->arch.user_stsi = 1;
522                 r = 0;
523                 break;
524         case KVM_CAP_S390_USER_INSTR0:
525                 VM_EVENT(kvm, 3, "%s", "ENABLE: CAP_S390_USER_INSTR0");
526                 kvm->arch.user_instr0 = 1;
527                 icpt_operexc_on_all_vcpus(kvm);
528                 r = 0;
529                 break;
530         default:
531                 r = -EINVAL;
532                 break;
533         }
534         return r;
535 }
536 
537 static int kvm_s390_get_mem_control(struct kvm *kvm, struct kvm_device_attr *attr)
538 {
539         int ret;
540 
541         switch (attr->attr) {
542         case KVM_S390_VM_MEM_LIMIT_SIZE:
543                 ret = 0;
544                 VM_EVENT(kvm, 3, "QUERY: max guest memory: %lu bytes",
545                          kvm->arch.mem_limit);
546                 if (put_user(kvm->arch.mem_limit, (u64 __user *)attr->addr))
547                         ret = -EFAULT;
548                 break;
549         default:
550                 ret = -ENXIO;
551                 break;
552         }
553         return ret;
554 }
555 
556 static int kvm_s390_set_mem_control(struct kvm *kvm, struct kvm_device_attr *attr)
557 {
558         int ret;
559         unsigned int idx;
560         switch (attr->attr) {
561         case KVM_S390_VM_MEM_ENABLE_CMMA:
562                 ret = -ENXIO;
563                 if (!sclp.has_cmma)
564                         break;
565 
566                 ret = -EBUSY;
567                 VM_EVENT(kvm, 3, "%s", "ENABLE: CMMA support");
568                 mutex_lock(&kvm->lock);
569                 if (!kvm->created_vcpus) {
570                         kvm->arch.use_cmma = 1;
571                         ret = 0;
572                 }
573                 mutex_unlock(&kvm->lock);
574                 break;
575         case KVM_S390_VM_MEM_CLR_CMMA:
576                 ret = -ENXIO;
577                 if (!sclp.has_cmma)
578                         break;
579                 ret = -EINVAL;
580                 if (!kvm->arch.use_cmma)
581                         break;
582 
583                 VM_EVENT(kvm, 3, "%s", "RESET: CMMA states");
584                 mutex_lock(&kvm->lock);
585                 idx = srcu_read_lock(&kvm->srcu);
586                 s390_reset_cmma(kvm->arch.gmap->mm);
587                 srcu_read_unlock(&kvm->srcu, idx);
588                 mutex_unlock(&kvm->lock);
589                 ret = 0;
590                 break;
591         case KVM_S390_VM_MEM_LIMIT_SIZE: {
592                 unsigned long new_limit;
593 
594                 if (kvm_is_ucontrol(kvm))
595                         return -EINVAL;
596 
597                 if (get_user(new_limit, (u64 __user *)attr->addr))
598                         return -EFAULT;
599 
600                 if (kvm->arch.mem_limit != KVM_S390_NO_MEM_LIMIT &&
601                     new_limit > kvm->arch.mem_limit)
602                         return -E2BIG;
603 
604                 if (!new_limit)
605                         return -EINVAL;
606 
607                 /* gmap_create takes last usable address */
608                 if (new_limit != KVM_S390_NO_MEM_LIMIT)
609                         new_limit -= 1;
610 
611                 ret = -EBUSY;
612                 mutex_lock(&kvm->lock);
613                 if (!kvm->created_vcpus) {
614                         /* gmap_create will round the limit up */
615                         struct gmap *new = gmap_create(current->mm, new_limit);
616 
617                         if (!new) {
618                                 ret = -ENOMEM;
619                         } else {
620                                 gmap_remove(kvm->arch.gmap);
621                                 new->private = kvm;
622                                 kvm->arch.gmap = new;
623                                 ret = 0;
624                         }
625                 }
626                 mutex_unlock(&kvm->lock);
627                 VM_EVENT(kvm, 3, "SET: max guest address: %lu", new_limit);
628                 VM_EVENT(kvm, 3, "New guest asce: 0x%pK",
629                          (void *) kvm->arch.gmap->asce);
630                 break;
631         }
632         default:
633                 ret = -ENXIO;
634                 break;
635         }
636         return ret;
637 }
638 
639 static void kvm_s390_vcpu_crypto_setup(struct kvm_vcpu *vcpu);
640 
641 static int kvm_s390_vm_set_crypto(struct kvm *kvm, struct kvm_device_attr *attr)
642 {
643         struct kvm_vcpu *vcpu;
644         int i;
645 
646         if (!test_kvm_facility(kvm, 76))
647                 return -EINVAL;
648 
649         mutex_lock(&kvm->lock);
650         switch (attr->attr) {
651         case KVM_S390_VM_CRYPTO_ENABLE_AES_KW:
652                 get_random_bytes(
653                         kvm->arch.crypto.crycb->aes_wrapping_key_mask,
654                         sizeof(kvm->arch.crypto.crycb->aes_wrapping_key_mask));
655                 kvm->arch.crypto.aes_kw = 1;
656                 VM_EVENT(kvm, 3, "%s", "ENABLE: AES keywrapping support");
657                 break;
658         case KVM_S390_VM_CRYPTO_ENABLE_DEA_KW:
659                 get_random_bytes(
660                         kvm->arch.crypto.crycb->dea_wrapping_key_mask,
661                         sizeof(kvm->arch.crypto.crycb->dea_wrapping_key_mask));
662                 kvm->arch.crypto.dea_kw = 1;
663                 VM_EVENT(kvm, 3, "%s", "ENABLE: DEA keywrapping support");
664                 break;
665         case KVM_S390_VM_CRYPTO_DISABLE_AES_KW:
666                 kvm->arch.crypto.aes_kw = 0;
667                 memset(kvm->arch.crypto.crycb->aes_wrapping_key_mask, 0,
668                         sizeof(kvm->arch.crypto.crycb->aes_wrapping_key_mask));
669                 VM_EVENT(kvm, 3, "%s", "DISABLE: AES keywrapping support");
670                 break;
671         case KVM_S390_VM_CRYPTO_DISABLE_DEA_KW:
672                 kvm->arch.crypto.dea_kw = 0;
673                 memset(kvm->arch.crypto.crycb->dea_wrapping_key_mask, 0,
674                         sizeof(kvm->arch.crypto.crycb->dea_wrapping_key_mask));
675                 VM_EVENT(kvm, 3, "%s", "DISABLE: DEA keywrapping support");
676                 break;
677         default:
678                 mutex_unlock(&kvm->lock);
679                 return -ENXIO;
680         }
681 
682         kvm_for_each_vcpu(i, vcpu, kvm) {
683                 kvm_s390_vcpu_crypto_setup(vcpu);
684                 exit_sie(vcpu);
685         }
686         mutex_unlock(&kvm->lock);
687         return 0;
688 }
689 
690 static int kvm_s390_set_tod_high(struct kvm *kvm, struct kvm_device_attr *attr)
691 {
692         u8 gtod_high;
693 
694         if (copy_from_user(&gtod_high, (void __user *)attr->addr,
695                                            sizeof(gtod_high)))
696                 return -EFAULT;
697 
698         if (gtod_high != 0)
699                 return -EINVAL;
700         VM_EVENT(kvm, 3, "SET: TOD extension: 0x%x", gtod_high);
701 
702         return 0;
703 }
704 
705 static int kvm_s390_set_tod_low(struct kvm *kvm, struct kvm_device_attr *attr)
706 {
707         u64 gtod;
708 
709         if (copy_from_user(&gtod, (void __user *)attr->addr, sizeof(gtod)))
710                 return -EFAULT;
711 
712         kvm_s390_set_tod_clock(kvm, gtod);
713         VM_EVENT(kvm, 3, "SET: TOD base: 0x%llx", gtod);
714         return 0;
715 }
716 
717 static int kvm_s390_set_tod(struct kvm *kvm, struct kvm_device_attr *attr)
718 {
719         int ret;
720 
721         if (attr->flags)
722                 return -EINVAL;
723 
724         switch (attr->attr) {
725         case KVM_S390_VM_TOD_HIGH:
726                 ret = kvm_s390_set_tod_high(kvm, attr);
727                 break;
728         case KVM_S390_VM_TOD_LOW:
729                 ret = kvm_s390_set_tod_low(kvm, attr);
730                 break;
731         default:
732                 ret = -ENXIO;
733                 break;
734         }
735         return ret;
736 }
737 
738 static int kvm_s390_get_tod_high(struct kvm *kvm, struct kvm_device_attr *attr)
739 {
740         u8 gtod_high = 0;
741 
742         if (copy_to_user((void __user *)attr->addr, &gtod_high,
743                                          sizeof(gtod_high)))
744                 return -EFAULT;
745         VM_EVENT(kvm, 3, "QUERY: TOD extension: 0x%x", gtod_high);
746 
747         return 0;
748 }
749 
750 static int kvm_s390_get_tod_low(struct kvm *kvm, struct kvm_device_attr *attr)
751 {
752         u64 gtod;
753 
754         gtod = kvm_s390_get_tod_clock_fast(kvm);
755         if (copy_to_user((void __user *)attr->addr, &gtod, sizeof(gtod)))
756                 return -EFAULT;
757         VM_EVENT(kvm, 3, "QUERY: TOD base: 0x%llx", gtod);
758 
759         return 0;
760 }
761 
762 static int kvm_s390_get_tod(struct kvm *kvm, struct kvm_device_attr *attr)
763 {
764         int ret;
765 
766         if (attr->flags)
767                 return -EINVAL;
768 
769         switch (attr->attr) {
770         case KVM_S390_VM_TOD_HIGH:
771                 ret = kvm_s390_get_tod_high(kvm, attr);
772                 break;
773         case KVM_S390_VM_TOD_LOW:
774                 ret = kvm_s390_get_tod_low(kvm, attr);
775                 break;
776         default:
777                 ret = -ENXIO;
778                 break;
779         }
780         return ret;
781 }
782 
783 static int kvm_s390_set_processor(struct kvm *kvm, struct kvm_device_attr *attr)
784 {
785         struct kvm_s390_vm_cpu_processor *proc;
786         u16 lowest_ibc, unblocked_ibc;
787         int ret = 0;
788 
789         mutex_lock(&kvm->lock);
790         if (kvm->created_vcpus) {
791                 ret = -EBUSY;
792                 goto out;
793         }
794         proc = kzalloc(sizeof(*proc), GFP_KERNEL);
795         if (!proc) {
796                 ret = -ENOMEM;
797                 goto out;
798         }
799         if (!copy_from_user(proc, (void __user *)attr->addr,
800                             sizeof(*proc))) {
801                 kvm->arch.model.cpuid = proc->cpuid;
802                 lowest_ibc = sclp.ibc >> 16 & 0xfff;
803                 unblocked_ibc = sclp.ibc & 0xfff;
804                 if (lowest_ibc && proc->ibc) {
805                         if (proc->ibc > unblocked_ibc)
806                                 kvm->arch.model.ibc = unblocked_ibc;
807                         else if (proc->ibc < lowest_ibc)
808                                 kvm->arch.model.ibc = lowest_ibc;
809                         else
810                                 kvm->arch.model.ibc = proc->ibc;
811                 }
812                 memcpy(kvm->arch.model.fac_list, proc->fac_list,
813                        S390_ARCH_FAC_LIST_SIZE_BYTE);
814         } else
815                 ret = -EFAULT;
816         kfree(proc);
817 out:
818         mutex_unlock(&kvm->lock);
819         return ret;
820 }
821 
822 static int kvm_s390_set_processor_feat(struct kvm *kvm,
823                                        struct kvm_device_attr *attr)
824 {
825         struct kvm_s390_vm_cpu_feat data;
826         int ret = -EBUSY;
827 
828         if (copy_from_user(&data, (void __user *)attr->addr, sizeof(data)))
829                 return -EFAULT;
830         if (!bitmap_subset((unsigned long *) data.feat,
831                            kvm_s390_available_cpu_feat,
832                            KVM_S390_VM_CPU_FEAT_NR_BITS))
833                 return -EINVAL;
834 
835         mutex_lock(&kvm->lock);
836         if (!atomic_read(&kvm->online_vcpus)) {
837                 bitmap_copy(kvm->arch.cpu_feat, (unsigned long *) data.feat,
838                             KVM_S390_VM_CPU_FEAT_NR_BITS);
839                 ret = 0;
840         }
841         mutex_unlock(&kvm->lock);
842         return ret;
843 }
844 
845 static int kvm_s390_set_processor_subfunc(struct kvm *kvm,
846                                           struct kvm_device_attr *attr)
847 {
848         /*
849          * Once supported by kernel + hw, we have to store the subfunctions
850          * in kvm->arch and remember that user space configured them.
851          */
852         return -ENXIO;
853 }
854 
855 static int kvm_s390_set_cpu_model(struct kvm *kvm, struct kvm_device_attr *attr)
856 {
857         int ret = -ENXIO;
858 
859         switch (attr->attr) {
860         case KVM_S390_VM_CPU_PROCESSOR:
861                 ret = kvm_s390_set_processor(kvm, attr);
862                 break;
863         case KVM_S390_VM_CPU_PROCESSOR_FEAT:
864                 ret = kvm_s390_set_processor_feat(kvm, attr);
865                 break;
866         case KVM_S390_VM_CPU_PROCESSOR_SUBFUNC:
867                 ret = kvm_s390_set_processor_subfunc(kvm, attr);
868                 break;
869         }
870         return ret;
871 }
872 
873 static int kvm_s390_get_processor(struct kvm *kvm, struct kvm_device_attr *attr)
874 {
875         struct kvm_s390_vm_cpu_processor *proc;
876         int ret = 0;
877 
878         proc = kzalloc(sizeof(*proc), GFP_KERNEL);
879         if (!proc) {
880                 ret = -ENOMEM;
881                 goto out;
882         }
883         proc->cpuid = kvm->arch.model.cpuid;
884         proc->ibc = kvm->arch.model.ibc;
885         memcpy(&proc->fac_list, kvm->arch.model.fac_list,
886                S390_ARCH_FAC_LIST_SIZE_BYTE);
887         if (copy_to_user((void __user *)attr->addr, proc, sizeof(*proc)))
888                 ret = -EFAULT;
889         kfree(proc);
890 out:
891         return ret;
892 }
893 
894 static int kvm_s390_get_machine(struct kvm *kvm, struct kvm_device_attr *attr)
895 {
896         struct kvm_s390_vm_cpu_machine *mach;
897         int ret = 0;
898 
899         mach = kzalloc(sizeof(*mach), GFP_KERNEL);
900         if (!mach) {
901                 ret = -ENOMEM;
902                 goto out;
903         }
904         get_cpu_id((struct cpuid *) &mach->cpuid);
905         mach->ibc = sclp.ibc;
906         memcpy(&mach->fac_mask, kvm->arch.model.fac_mask,
907                S390_ARCH_FAC_LIST_SIZE_BYTE);
908         memcpy((unsigned long *)&mach->fac_list, S390_lowcore.stfle_fac_list,
909                S390_ARCH_FAC_LIST_SIZE_BYTE);
910         if (copy_to_user((void __user *)attr->addr, mach, sizeof(*mach)))
911                 ret = -EFAULT;
912         kfree(mach);
913 out:
914         return ret;
915 }
916 
917 static int kvm_s390_get_processor_feat(struct kvm *kvm,
918                                        struct kvm_device_attr *attr)
919 {
920         struct kvm_s390_vm_cpu_feat data;
921 
922         bitmap_copy((unsigned long *) data.feat, kvm->arch.cpu_feat,
923                     KVM_S390_VM_CPU_FEAT_NR_BITS);
924         if (copy_to_user((void __user *)attr->addr, &data, sizeof(data)))
925                 return -EFAULT;
926         return 0;
927 }
928 
929 static int kvm_s390_get_machine_feat(struct kvm *kvm,
930                                      struct kvm_device_attr *attr)
931 {
932         struct kvm_s390_vm_cpu_feat data;
933 
934         bitmap_copy((unsigned long *) data.feat,
935                     kvm_s390_available_cpu_feat,
936                     KVM_S390_VM_CPU_FEAT_NR_BITS);
937         if (copy_to_user((void __user *)attr->addr, &data, sizeof(data)))
938                 return -EFAULT;
939         return 0;
940 }
941 
942 static int kvm_s390_get_processor_subfunc(struct kvm *kvm,
943                                           struct kvm_device_attr *attr)
944 {
945         /*
946          * Once we can actually configure subfunctions (kernel + hw support),
947          * we have to check if they were already set by user space, if so copy
948          * them from kvm->arch.
949          */
950         return -ENXIO;
951 }
952 
953 static int kvm_s390_get_machine_subfunc(struct kvm *kvm,
954                                         struct kvm_device_attr *attr)
955 {
956         if (copy_to_user((void __user *)attr->addr, &kvm_s390_available_subfunc,
957             sizeof(struct kvm_s390_vm_cpu_subfunc)))
958                 return -EFAULT;
959         return 0;
960 }
961 static int kvm_s390_get_cpu_model(struct kvm *kvm, struct kvm_device_attr *attr)
962 {
963         int ret = -ENXIO;
964 
965         switch (attr->attr) {
966         case KVM_S390_VM_CPU_PROCESSOR:
967                 ret = kvm_s390_get_processor(kvm, attr);
968                 break;
969         case KVM_S390_VM_CPU_MACHINE:
970                 ret = kvm_s390_get_machine(kvm, attr);
971                 break;
972         case KVM_S390_VM_CPU_PROCESSOR_FEAT:
973                 ret = kvm_s390_get_processor_feat(kvm, attr);
974                 break;
975         case KVM_S390_VM_CPU_MACHINE_FEAT:
976                 ret = kvm_s390_get_machine_feat(kvm, attr);
977                 break;
978         case KVM_S390_VM_CPU_PROCESSOR_SUBFUNC:
979                 ret = kvm_s390_get_processor_subfunc(kvm, attr);
980                 break;
981         case KVM_S390_VM_CPU_MACHINE_SUBFUNC:
982                 ret = kvm_s390_get_machine_subfunc(kvm, attr);
983                 break;
984         }
985         return ret;
986 }
987 
988 static int kvm_s390_vm_set_attr(struct kvm *kvm, struct kvm_device_attr *attr)
989 {
990         int ret;
991 
992         switch (attr->group) {
993         case KVM_S390_VM_MEM_CTRL:
994                 ret = kvm_s390_set_mem_control(kvm, attr);
995                 break;
996         case KVM_S390_VM_TOD:
997                 ret = kvm_s390_set_tod(kvm, attr);
998                 break;
999         case KVM_S390_VM_CPU_MODEL:
1000                 ret = kvm_s390_set_cpu_model(kvm, attr);
1001                 break;
1002         case KVM_S390_VM_CRYPTO:
1003                 ret = kvm_s390_vm_set_crypto(kvm, attr);
1004                 break;
1005         default:
1006                 ret = -ENXIO;
1007                 break;
1008         }
1009 
1010         return ret;
1011 }
1012 
1013 static int kvm_s390_vm_get_attr(struct kvm *kvm, struct kvm_device_attr *attr)
1014 {
1015         int ret;
1016 
1017         switch (attr->group) {
1018         case KVM_S390_VM_MEM_CTRL:
1019                 ret = kvm_s390_get_mem_control(kvm, attr);
1020                 break;
1021         case KVM_S390_VM_TOD:
1022                 ret = kvm_s390_get_tod(kvm, attr);
1023                 break;
1024         case KVM_S390_VM_CPU_MODEL:
1025                 ret = kvm_s390_get_cpu_model(kvm, attr);
1026                 break;
1027         default:
1028                 ret = -ENXIO;
1029                 break;
1030         }
1031 
1032         return ret;
1033 }
1034 
1035 static int kvm_s390_vm_has_attr(struct kvm *kvm, struct kvm_device_attr *attr)
1036 {
1037         int ret;
1038 
1039         switch (attr->group) {
1040         case KVM_S390_VM_MEM_CTRL:
1041                 switch (attr->attr) {
1042                 case KVM_S390_VM_MEM_ENABLE_CMMA:
1043                 case KVM_S390_VM_MEM_CLR_CMMA:
1044                         ret = sclp.has_cmma ? 0 : -ENXIO;
1045                         break;
1046                 case KVM_S390_VM_MEM_LIMIT_SIZE:
1047                         ret = 0;
1048                         break;
1049                 default:
1050                         ret = -ENXIO;
1051                         break;
1052                 }
1053                 break;
1054         case KVM_S390_VM_TOD:
1055                 switch (attr->attr) {
1056                 case KVM_S390_VM_TOD_LOW:
1057                 case KVM_S390_VM_TOD_HIGH:
1058                         ret = 0;
1059                         break;
1060                 default:
1061                         ret = -ENXIO;
1062                         break;
1063                 }
1064                 break;
1065         case KVM_S390_VM_CPU_MODEL:
1066                 switch (attr->attr) {
1067                 case KVM_S390_VM_CPU_PROCESSOR:
1068                 case KVM_S390_VM_CPU_MACHINE:
1069                 case KVM_S390_VM_CPU_PROCESSOR_FEAT:
1070                 case KVM_S390_VM_CPU_MACHINE_FEAT:
1071                 case KVM_S390_VM_CPU_MACHINE_SUBFUNC:
1072                         ret = 0;
1073                         break;
1074                 /* configuring subfunctions is not supported yet */
1075                 case KVM_S390_VM_CPU_PROCESSOR_SUBFUNC:
1076                 default:
1077                         ret = -ENXIO;
1078                         break;
1079                 }
1080                 break;
1081         case KVM_S390_VM_CRYPTO:
1082                 switch (attr->attr) {
1083                 case KVM_S390_VM_CRYPTO_ENABLE_AES_KW:
1084                 case KVM_S390_VM_CRYPTO_ENABLE_DEA_KW:
1085                 case KVM_S390_VM_CRYPTO_DISABLE_AES_KW:
1086                 case KVM_S390_VM_CRYPTO_DISABLE_DEA_KW:
1087                         ret = 0;
1088                         break;
1089                 default:
1090                         ret = -ENXIO;
1091                         break;
1092                 }
1093                 break;
1094         default:
1095                 ret = -ENXIO;
1096                 break;
1097         }
1098 
1099         return ret;
1100 }
1101 
1102 static long kvm_s390_get_skeys(struct kvm *kvm, struct kvm_s390_skeys *args)
1103 {
1104         uint8_t *keys;
1105         uint64_t hva;
1106         int i, r = 0;
1107 
1108         if (args->flags != 0)
1109                 return -EINVAL;
1110 
1111         /* Is this guest using storage keys? */
1112         if (!mm_use_skey(current->mm))
1113                 return KVM_S390_GET_SKEYS_NONE;
1114 
1115         /* Enforce sane limit on memory allocation */
1116         if (args->count < 1 || args->count > KVM_S390_SKEYS_MAX)
1117                 return -EINVAL;
1118 
1119         keys = kmalloc_array(args->count, sizeof(uint8_t),
1120                              GFP_KERNEL | __GFP_NOWARN);
1121         if (!keys)
1122                 keys = vmalloc(sizeof(uint8_t) * args->count);
1123         if (!keys)
1124                 return -ENOMEM;
1125 
1126         down_read(&current->mm->mmap_sem);
1127         for (i = 0; i < args->count; i++) {
1128                 hva = gfn_to_hva(kvm, args->start_gfn + i);
1129                 if (kvm_is_error_hva(hva)) {
1130                         r = -EFAULT;
1131                         break;
1132                 }
1133 
1134                 r = get_guest_storage_key(current->mm, hva, &keys[i]);
1135                 if (r)
1136                         break;
1137         }
1138         up_read(&current->mm->mmap_sem);
1139 
1140         if (!r) {
1141                 r = copy_to_user((uint8_t __user *)args->skeydata_addr, keys,
1142                                  sizeof(uint8_t) * args->count);
1143                 if (r)
1144                         r = -EFAULT;
1145         }
1146 
1147         kvfree(keys);
1148         return r;
1149 }
1150 
1151 static long kvm_s390_set_skeys(struct kvm *kvm, struct kvm_s390_skeys *args)
1152 {
1153         uint8_t *keys;
1154         uint64_t hva;
1155         int i, r = 0;
1156 
1157         if (args->flags != 0)
1158                 return -EINVAL;
1159 
1160         /* Enforce sane limit on memory allocation */
1161         if (args->count < 1 || args->count > KVM_S390_SKEYS_MAX)
1162                 return -EINVAL;
1163 
1164         keys = kmalloc_array(args->count, sizeof(uint8_t),
1165                              GFP_KERNEL | __GFP_NOWARN);
1166         if (!keys)
1167                 keys = vmalloc(sizeof(uint8_t) * args->count);
1168         if (!keys)
1169                 return -ENOMEM;
1170 
1171         r = copy_from_user(keys, (uint8_t __user *)args->skeydata_addr,
1172                            sizeof(uint8_t) * args->count);
1173         if (r) {
1174                 r = -EFAULT;
1175                 goto out;
1176         }
1177 
1178         /* Enable storage key handling for the guest */
1179         r = s390_enable_skey();
1180         if (r)
1181                 goto out;
1182 
1183         down_read(&current->mm->mmap_sem);
1184         for (i = 0; i < args->count; i++) {
1185                 hva = gfn_to_hva(kvm, args->start_gfn + i);
1186                 if (kvm_is_error_hva(hva)) {
1187                         r = -EFAULT;
1188                         break;
1189                 }
1190 
1191                 /* Lowest order bit is reserved */
1192                 if (keys[i] & 0x01) {
1193                         r = -EINVAL;
1194                         break;
1195                 }
1196 
1197                 r = set_guest_storage_key(current->mm, hva, keys[i], 0);
1198                 if (r)
1199                         break;
1200         }
1201         up_read(&current->mm->mmap_sem);
1202 out:
1203         kvfree(keys);
1204         return r;
1205 }
1206 
1207 long kvm_arch_vm_ioctl(struct file *filp,
1208                        unsigned int ioctl, unsigned long arg)
1209 {
1210         struct kvm *kvm = filp->private_data;
1211         void __user *argp = (void __user *)arg;
1212         struct kvm_device_attr attr;
1213         int r;
1214 
1215         switch (ioctl) {
1216         case KVM_S390_INTERRUPT: {
1217                 struct kvm_s390_interrupt s390int;
1218 
1219                 r = -EFAULT;
1220                 if (copy_from_user(&s390int, argp, sizeof(s390int)))
1221                         break;
1222                 r = kvm_s390_inject_vm(kvm, &s390int);
1223                 break;
1224         }
1225         case KVM_ENABLE_CAP: {
1226                 struct kvm_enable_cap cap;
1227                 r = -EFAULT;
1228                 if (copy_from_user(&cap, argp, sizeof(cap)))
1229                         break;
1230                 r = kvm_vm_ioctl_enable_cap(kvm, &cap);
1231                 break;
1232         }
1233         case KVM_CREATE_IRQCHIP: {
1234                 struct kvm_irq_routing_entry routing;
1235 
1236                 r = -EINVAL;
1237                 if (kvm->arch.use_irqchip) {
1238                         /* Set up dummy routing. */
1239                         memset(&routing, 0, sizeof(routing));
1240                         r = kvm_set_irq_routing(kvm, &routing, 0, 0);
1241                 }
1242                 break;
1243         }
1244         case KVM_SET_DEVICE_ATTR: {
1245                 r = -EFAULT;
1246                 if (copy_from_user(&attr, (void __user *)arg, sizeof(attr)))
1247                         break;
1248                 r = kvm_s390_vm_set_attr(kvm, &attr);
1249                 break;
1250         }
1251         case KVM_GET_DEVICE_ATTR: {
1252                 r = -EFAULT;
1253                 if (copy_from_user(&attr, (void __user *)arg, sizeof(attr)))
1254                         break;
1255                 r = kvm_s390_vm_get_attr(kvm, &attr);
1256                 break;
1257         }
1258         case KVM_HAS_DEVICE_ATTR: {
1259                 r = -EFAULT;
1260                 if (copy_from_user(&attr, (void __user *)arg, sizeof(attr)))
1261                         break;
1262                 r = kvm_s390_vm_has_attr(kvm, &attr);
1263                 break;
1264         }
1265         case KVM_S390_GET_SKEYS: {
1266                 struct kvm_s390_skeys args;
1267 
1268                 r = -EFAULT;
1269                 if (copy_from_user(&args, argp,
1270                                    sizeof(struct kvm_s390_skeys)))
1271                         break;
1272                 r = kvm_s390_get_skeys(kvm, &args);
1273                 break;
1274         }
1275         case KVM_S390_SET_SKEYS: {
1276                 struct kvm_s390_skeys args;
1277 
1278                 r = -EFAULT;
1279                 if (copy_from_user(&args, argp,
1280                                    sizeof(struct kvm_s390_skeys)))
1281                         break;
1282                 r = kvm_s390_set_skeys(kvm, &args);
1283                 break;
1284         }
1285         default:
1286                 r = -ENOTTY;
1287         }
1288 
1289         return r;
1290 }
1291 
1292 static int kvm_s390_query_ap_config(u8 *config)
1293 {
1294         u32 fcn_code = 0x04000000UL;
1295         u32 cc = 0;
1296 
1297         memset(config, 0, 128);
1298         asm volatile(
1299                 "lgr 0,%1\n"
1300                 "lgr 2,%2\n"
1301                 ".long 0xb2af0000\n"            /* PQAP(QCI) */
1302                 "0: ipm %0\n"
1303                 "srl %0,28\n"
1304                 "1:\n"
1305                 EX_TABLE(0b, 1b)
1306                 : "+r" (cc)
1307                 : "r" (fcn_code), "r" (config)
1308                 : "cc", "", "2", "memory"
1309         );
1310 
1311         return cc;
1312 }
1313 
1314 static int kvm_s390_apxa_installed(void)
1315 {
1316         u8 config[128];
1317         int cc;
1318 
1319         if (test_facility(12)) {
1320                 cc = kvm_s390_query_ap_config(config);
1321 
1322                 if (cc)
1323                         pr_err("PQAP(QCI) failed with cc=%d", cc);
1324                 else
1325                         return config[0] & 0x40;
1326         }
1327 
1328         return 0;
1329 }
1330 
1331 static void kvm_s390_set_crycb_format(struct kvm *kvm)
1332 {
1333         kvm->arch.crypto.crycbd = (__u32)(unsigned long) kvm->arch.crypto.crycb;
1334 
1335         if (kvm_s390_apxa_installed())
1336                 kvm->arch.crypto.crycbd |= CRYCB_FORMAT2;
1337         else
1338                 kvm->arch.crypto.crycbd |= CRYCB_FORMAT1;
1339 }
1340 
1341 static u64 kvm_s390_get_initial_cpuid(void)
1342 {
1343         struct cpuid cpuid;
1344 
1345         get_cpu_id(&cpuid);
1346         cpuid.version = 0xff;
1347         return *((u64 *) &cpuid);
1348 }
1349 
1350 static void kvm_s390_crypto_init(struct kvm *kvm)
1351 {
1352         if (!test_kvm_facility(kvm, 76))
1353                 return;
1354 
1355         kvm->arch.crypto.crycb = &kvm->arch.sie_page2->crycb;
1356         kvm_s390_set_crycb_format(kvm);
1357 
1358         /* Enable AES/DEA protected key functions by default */
1359         kvm->arch.crypto.aes_kw = 1;
1360         kvm->arch.crypto.dea_kw = 1;
1361         get_random_bytes(kvm->arch.crypto.crycb->aes_wrapping_key_mask,
1362                          sizeof(kvm->arch.crypto.crycb->aes_wrapping_key_mask));
1363         get_random_bytes(kvm->arch.crypto.crycb->dea_wrapping_key_mask,
1364                          sizeof(kvm->arch.crypto.crycb->dea_wrapping_key_mask));
1365 }
1366 
1367 static void sca_dispose(struct kvm *kvm)
1368 {
1369         if (kvm->arch.use_esca)
1370                 free_pages_exact(kvm->arch.sca, sizeof(struct esca_block));
1371         else
1372                 free_page((unsigned long)(kvm->arch.sca));
1373         kvm->arch.sca = NULL;
1374 }
1375 
1376 int kvm_arch_init_vm(struct kvm *kvm, unsigned long type)
1377 {
1378         gfp_t alloc_flags = GFP_KERNEL;
1379         int i, rc;
1380         char debug_name[16];
1381         static unsigned long sca_offset;
1382 
1383         rc = -EINVAL;
1384 #ifdef CONFIG_KVM_S390_UCONTROL
1385         if (type & ~KVM_VM_S390_UCONTROL)
1386                 goto out_err;
1387         if ((type & KVM_VM_S390_UCONTROL) && (!capable(CAP_SYS_ADMIN)))
1388                 goto out_err;
1389 #else
1390         if (type)
1391                 goto out_err;
1392 #endif
1393 
1394         rc = s390_enable_sie();
1395         if (rc)
1396                 goto out_err;
1397 
1398         rc = -ENOMEM;
1399 
1400         ratelimit_state_init(&kvm->arch.sthyi_limit, 5 * HZ, 500);
1401 
1402         kvm->arch.use_esca = 0; /* start with basic SCA */
1403         if (!sclp.has_64bscao)
1404                 alloc_flags |= GFP_DMA;
1405         rwlock_init(&kvm->arch.sca_lock);
1406         kvm->arch.sca = (struct bsca_block *) get_zeroed_page(alloc_flags);
1407         if (!kvm->arch.sca)
1408                 goto out_err;
1409         spin_lock(&kvm_lock);
1410         sca_offset += 16;
1411         if (sca_offset + sizeof(struct bsca_block) > PAGE_SIZE)
1412                 sca_offset = 0;
1413         kvm->arch.sca = (struct bsca_block *)
1414                         ((char *) kvm->arch.sca + sca_offset);
1415         spin_unlock(&kvm_lock);
1416 
1417         sprintf(debug_name, "kvm-%u", current->pid);
1418 
1419         kvm->arch.dbf = debug_register(debug_name, 32, 1, 7 * sizeof(long));
1420         if (!kvm->arch.dbf)
1421                 goto out_err;
1422 
1423         kvm->arch.sie_page2 =
1424              (struct sie_page2 *) get_zeroed_page(GFP_KERNEL | GFP_DMA);
1425         if (!kvm->arch.sie_page2)
1426                 goto out_err;
1427 
1428         /* Populate the facility mask initially. */
1429         memcpy(kvm->arch.model.fac_mask, S390_lowcore.stfle_fac_list,
1430                S390_ARCH_FAC_LIST_SIZE_BYTE);
1431         for (i = 0; i < S390_ARCH_FAC_LIST_SIZE_U64; i++) {
1432                 if (i < kvm_s390_fac_list_mask_size())
1433                         kvm->arch.model.fac_mask[i] &= kvm_s390_fac_list_mask[i];
1434                 else
1435                         kvm->arch.model.fac_mask[i] = 0UL;
1436         }
1437 
1438         /* Populate the facility list initially. */
1439         kvm->arch.model.fac_list = kvm->arch.sie_page2->fac_list;
1440         memcpy(kvm->arch.model.fac_list, kvm->arch.model.fac_mask,
1441                S390_ARCH_FAC_LIST_SIZE_BYTE);
1442 
1443         set_kvm_facility(kvm->arch.model.fac_mask, 74);
1444         set_kvm_facility(kvm->arch.model.fac_list, 74);
1445 
1446         kvm->arch.model.cpuid = kvm_s390_get_initial_cpuid();
1447         kvm->arch.model.ibc = sclp.ibc & 0x0fff;
1448 
1449         kvm_s390_crypto_init(kvm);
1450 
1451         spin_lock_init(&kvm->arch.float_int.lock);
1452         for (i = 0; i < FIRQ_LIST_COUNT; i++)
1453                 INIT_LIST_HEAD(&kvm->arch.float_int.lists[i]);
1454         init_waitqueue_head(&kvm->arch.ipte_wq);
1455         mutex_init(&kvm->arch.ipte_mutex);
1456 
1457         debug_register_view(kvm->arch.dbf, &debug_sprintf_view);
1458         VM_EVENT(kvm, 3, "vm created with type %lu", type);
1459 
1460         if (type & KVM_VM_S390_UCONTROL) {
1461                 kvm->arch.gmap = NULL;
1462                 kvm->arch.mem_limit = KVM_S390_NO_MEM_LIMIT;
1463         } else {
1464                 if (sclp.hamax == U64_MAX)
1465                         kvm->arch.mem_limit = TASK_MAX_SIZE;
1466                 else
1467                         kvm->arch.mem_limit = min_t(unsigned long, TASK_MAX_SIZE,
1468                                                     sclp.hamax + 1);
1469                 kvm->arch.gmap = gmap_create(current->mm, kvm->arch.mem_limit - 1);
1470                 if (!kvm->arch.gmap)
1471                         goto out_err;
1472                 kvm->arch.gmap->private = kvm;
1473                 kvm->arch.gmap->pfault_enabled = 0;
1474         }
1475 
1476         kvm->arch.css_support = 0;
1477         kvm->arch.use_irqchip = 0;
1478         kvm->arch.epoch = 0;
1479 
1480         spin_lock_init(&kvm->arch.start_stop_lock);
1481         kvm_s390_vsie_init(kvm);
1482         KVM_EVENT(3, "vm 0x%pK created by pid %u", kvm, current->pid);
1483 
1484         return 0;
1485 out_err:
1486         free_page((unsigned long)kvm->arch.sie_page2);
1487         debug_unregister(kvm->arch.dbf);
1488         sca_dispose(kvm);
1489         KVM_EVENT(3, "creation of vm failed: %d", rc);
1490         return rc;
1491 }
1492 
1493 void kvm_arch_vcpu_destroy(struct kvm_vcpu *vcpu)
1494 {
1495         VCPU_EVENT(vcpu, 3, "%s", "free cpu");
1496         trace_kvm_s390_destroy_vcpu(vcpu->vcpu_id);
1497         kvm_s390_clear_local_irqs(vcpu);
1498         kvm_clear_async_pf_completion_queue(vcpu);
1499         if (!kvm_is_ucontrol(vcpu->kvm))
1500                 sca_del_vcpu(vcpu);
1501 
1502         if (kvm_is_ucontrol(vcpu->kvm))
1503                 gmap_remove(vcpu->arch.gmap);
1504 
1505         if (vcpu->kvm->arch.use_cmma)
1506                 kvm_s390_vcpu_unsetup_cmma(vcpu);
1507         free_page((unsigned long)(vcpu->arch.sie_block));
1508 
1509         kvm_vcpu_uninit(vcpu);
1510         kmem_cache_free(kvm_vcpu_cache, vcpu);
1511 }
1512 
1513 static void kvm_free_vcpus(struct kvm *kvm)
1514 {
1515         unsigned int i;
1516         struct kvm_vcpu *vcpu;
1517 
1518         kvm_for_each_vcpu(i, vcpu, kvm)
1519                 kvm_arch_vcpu_destroy(vcpu);
1520 
1521         mutex_lock(&kvm->lock);
1522         for (i = 0; i < atomic_read(&kvm->online_vcpus); i++)
1523                 kvm->vcpus[i] = NULL;
1524 
1525         atomic_set(&kvm->online_vcpus, 0);
1526         mutex_unlock(&kvm->lock);
1527 }
1528 
1529 void kvm_arch_destroy_vm(struct kvm *kvm)
1530 {
1531         kvm_free_vcpus(kvm);
1532         sca_dispose(kvm);
1533         debug_unregister(kvm->arch.dbf);
1534         free_page((unsigned long)kvm->arch.sie_page2);
1535         if (!kvm_is_ucontrol(kvm))
1536                 gmap_remove(kvm->arch.gmap);
1537         kvm_s390_destroy_adapters(kvm);
1538         kvm_s390_clear_float_irqs(kvm);
1539         kvm_s390_vsie_destroy(kvm);
1540         KVM_EVENT(3, "vm 0x%pK destroyed", kvm);
1541 }
1542 
1543 /* Section: vcpu related */
1544 static int __kvm_ucontrol_vcpu_init(struct kvm_vcpu *vcpu)
1545 {
1546         vcpu->arch.gmap = gmap_create(current->mm, -1UL);
1547         if (!vcpu->arch.gmap)
1548                 return -ENOMEM;
1549         vcpu->arch.gmap->private = vcpu->kvm;
1550 
1551         return 0;
1552 }
1553 
1554 static void sca_del_vcpu(struct kvm_vcpu *vcpu)
1555 {
1556         read_lock(&vcpu->kvm->arch.sca_lock);
1557         if (vcpu->kvm->arch.use_esca) {
1558                 struct esca_block *sca = vcpu->kvm->arch.sca;
1559 
1560                 clear_bit_inv(vcpu->vcpu_id, (unsigned long *) sca->mcn);
1561                 sca->cpu[vcpu->vcpu_id].sda = 0;
1562         } else {
1563                 struct bsca_block *sca = vcpu->kvm->arch.sca;
1564 
1565                 clear_bit_inv(vcpu->vcpu_id, (unsigned long *) &sca->mcn);
1566                 sca->cpu[vcpu->vcpu_id].sda = 0;
1567         }
1568         read_unlock(&vcpu->kvm->arch.sca_lock);
1569 }
1570 
1571 static void sca_add_vcpu(struct kvm_vcpu *vcpu)
1572 {
1573         read_lock(&vcpu->kvm->arch.sca_lock);
1574         if (vcpu->kvm->arch.use_esca) {
1575                 struct esca_block *sca = vcpu->kvm->arch.sca;
1576 
1577                 sca->cpu[vcpu->vcpu_id].sda = (__u64) vcpu->arch.sie_block;
1578                 vcpu->arch.sie_block->scaoh = (__u32)(((__u64)sca) >> 32);
1579                 vcpu->arch.sie_block->scaol = (__u32)(__u64)sca & ~0x3fU;
1580                 vcpu->arch.sie_block->ecb2 |= 0x04U;
1581                 set_bit_inv(vcpu->vcpu_id, (unsigned long *) sca->mcn);
1582         } else {
1583                 struct bsca_block *sca = vcpu->kvm->arch.sca;
1584 
1585                 sca->cpu[vcpu->vcpu_id].sda = (__u64) vcpu->arch.sie_block;
1586                 vcpu->arch.sie_block->scaoh = (__u32)(((__u64)sca) >> 32);
1587                 vcpu->arch.sie_block->scaol = (__u32)(__u64)sca;
1588                 set_bit_inv(vcpu->vcpu_id, (unsigned long *) &sca->mcn);
1589         }
1590         read_unlock(&vcpu->kvm->arch.sca_lock);
1591 }
1592 
1593 /* Basic SCA to Extended SCA data copy routines */
1594 static inline void sca_copy_entry(struct esca_entry *d, struct bsca_entry *s)
1595 {
1596         d->sda = s->sda;
1597         d->sigp_ctrl.c = s->sigp_ctrl.c;
1598         d->sigp_ctrl.scn = s->sigp_ctrl.scn;
1599 }
1600 
1601 static void sca_copy_b_to_e(struct esca_block *d, struct bsca_block *s)
1602 {
1603         int i;
1604 
1605         d->ipte_control = s->ipte_control;
1606         d->mcn[0] = s->mcn;
1607         for (i = 0; i < KVM_S390_BSCA_CPU_SLOTS; i++)
1608                 sca_copy_entry(&d->cpu[i], &s->cpu[i]);
1609 }
1610 
1611 static int sca_switch_to_extended(struct kvm *kvm)
1612 {
1613         struct bsca_block *old_sca = kvm->arch.sca;
1614         struct esca_block *new_sca;
1615         struct kvm_vcpu *vcpu;
1616         unsigned int vcpu_idx;
1617         u32 scaol, scaoh;
1618 
1619         new_sca = alloc_pages_exact(sizeof(*new_sca), GFP_KERNEL|__GFP_ZERO);
1620         if (!new_sca)
1621                 return -ENOMEM;
1622 
1623         scaoh = (u32)((u64)(new_sca) >> 32);
1624         scaol = (u32)(u64)(new_sca) & ~0x3fU;
1625 
1626         kvm_s390_vcpu_block_all(kvm);
1627         write_lock(&kvm->arch.sca_lock);
1628 
1629         sca_copy_b_to_e(new_sca, old_sca);
1630 
1631         kvm_for_each_vcpu(vcpu_idx, vcpu, kvm) {
1632                 vcpu->arch.sie_block->scaoh = scaoh;
1633                 vcpu->arch.sie_block->scaol = scaol;
1634                 vcpu->arch.sie_block->ecb2 |= 0x04U;
1635         }
1636         kvm->arch.sca = new_sca;
1637         kvm->arch.use_esca = 1;
1638 
1639         write_unlock(&kvm->arch.sca_lock);
1640         kvm_s390_vcpu_unblock_all(kvm);
1641 
1642         free_page((unsigned long)old_sca);
1643 
1644         VM_EVENT(kvm, 2, "Switched to ESCA (0x%pK -> 0x%pK)",
1645                  old_sca, kvm->arch.sca);
1646         return 0;
1647 }
1648 
1649 static int sca_can_add_vcpu(struct kvm *kvm, unsigned int id)
1650 {
1651         int rc;
1652 
1653         if (id < KVM_S390_BSCA_CPU_SLOTS)
1654                 return true;
1655         if (!sclp.has_esca || !sclp.has_64bscao)
1656                 return false;
1657 
1658         mutex_lock(&kvm->lock);
1659         rc = kvm->arch.use_esca ? 0 : sca_switch_to_extended(kvm);
1660         mutex_unlock(&kvm->lock);
1661 
1662         return rc == 0 && id < KVM_S390_ESCA_CPU_SLOTS;
1663 }
1664 
1665 int kvm_arch_vcpu_init(struct kvm_vcpu *vcpu)
1666 {
1667         vcpu->arch.pfault_token = KVM_S390_PFAULT_TOKEN_INVALID;
1668         kvm_clear_async_pf_completion_queue(vcpu);
1669         vcpu->run->kvm_valid_regs = KVM_SYNC_PREFIX |
1670                                     KVM_SYNC_GPRS |
1671                                     KVM_SYNC_ACRS |
1672                                     KVM_SYNC_CRS |
1673                                     KVM_SYNC_ARCH0 |
1674                                     KVM_SYNC_PFAULT;
1675         kvm_s390_set_prefix(vcpu, 0);
1676         if (test_kvm_facility(vcpu->kvm, 64))
1677                 vcpu->run->kvm_valid_regs |= KVM_SYNC_RICCB;
1678         /* fprs can be synchronized via vrs, even if the guest has no vx. With
1679          * MACHINE_HAS_VX, (load|store)_fpu_regs() will work with vrs format.
1680          */
1681         if (MACHINE_HAS_VX)
1682                 vcpu->run->kvm_valid_regs |= KVM_SYNC_VRS;
1683         else
1684                 vcpu->run->kvm_valid_regs |= KVM_SYNC_FPRS;
1685 
1686         if (kvm_is_ucontrol(vcpu->kvm))
1687                 return __kvm_ucontrol_vcpu_init(vcpu);
1688 
1689         return 0;
1690 }
1691 
1692 /* needs disabled preemption to protect from TOD sync and vcpu_load/put */
1693 static void __start_cpu_timer_accounting(struct kvm_vcpu *vcpu)
1694 {
1695         WARN_ON_ONCE(vcpu->arch.cputm_start != 0);
1696         raw_write_seqcount_begin(&vcpu->arch.cputm_seqcount);
1697         vcpu->arch.cputm_start = get_tod_clock_fast();
1698         raw_write_seqcount_end(&vcpu->arch.cputm_seqcount);
1699 }
1700 
1701 /* needs disabled preemption to protect from TOD sync and vcpu_load/put */
1702 static void __stop_cpu_timer_accounting(struct kvm_vcpu *vcpu)
1703 {
1704         WARN_ON_ONCE(vcpu->arch.cputm_start == 0);
1705         raw_write_seqcount_begin(&vcpu->arch.cputm_seqcount);
1706         vcpu->arch.sie_block->cputm -= get_tod_clock_fast() - vcpu->arch.cputm_start;
1707         vcpu->arch.cputm_start = 0;
1708         raw_write_seqcount_end(&vcpu->arch.cputm_seqcount);
1709 }
1710 
1711 /* needs disabled preemption to protect from TOD sync and vcpu_load/put */
1712 static void __enable_cpu_timer_accounting(struct kvm_vcpu *vcpu)
1713 {
1714         WARN_ON_ONCE(vcpu->arch.cputm_enabled);
1715         vcpu->arch.cputm_enabled = true;
1716         __start_cpu_timer_accounting(vcpu);
1717 }
1718 
1719 /* needs disabled preemption to protect from TOD sync and vcpu_load/put */
1720 static void __disable_cpu_timer_accounting(struct kvm_vcpu *vcpu)
1721 {
1722         WARN_ON_ONCE(!vcpu->arch.cputm_enabled);
1723         __stop_cpu_timer_accounting(vcpu);
1724         vcpu->arch.cputm_enabled = false;
1725 }
1726 
1727 static void enable_cpu_timer_accounting(struct kvm_vcpu *vcpu)
1728 {
1729         preempt_disable(); /* protect from TOD sync and vcpu_load/put */
1730         __enable_cpu_timer_accounting(vcpu);
1731         preempt_enable();
1732 }
1733 
1734 static void disable_cpu_timer_accounting(struct kvm_vcpu *vcpu)
1735 {
1736         preempt_disable(); /* protect from TOD sync and vcpu_load/put */
1737         __disable_cpu_timer_accounting(vcpu);
1738         preempt_enable();
1739 }
1740 
1741 /* set the cpu timer - may only be called from the VCPU thread itself */
1742 void kvm_s390_set_cpu_timer(struct kvm_vcpu *vcpu, __u64 cputm)
1743 {
1744         preempt_disable(); /* protect from TOD sync and vcpu_load/put */
1745         raw_write_seqcount_begin(&vcpu->arch.cputm_seqcount);
1746         if (vcpu->arch.cputm_enabled)
1747                 vcpu->arch.cputm_start = get_tod_clock_fast();
1748         vcpu->arch.sie_block->cputm = cputm;
1749         raw_write_seqcount_end(&vcpu->arch.cputm_seqcount);
1750         preempt_enable();
1751 }
1752 
1753 /* update and get the cpu timer - can also be called from other VCPU threads */
1754 __u64 kvm_s390_get_cpu_timer(struct kvm_vcpu *vcpu)
1755 {
1756         unsigned int seq;
1757         __u64 value;
1758 
1759         if (unlikely(!vcpu->arch.cputm_enabled))
1760                 return vcpu->arch.sie_block->cputm;
1761 
1762         preempt_disable(); /* protect from TOD sync and vcpu_load/put */
1763         do {
1764                 seq = raw_read_seqcount(&vcpu->arch.cputm_seqcount);
1765                 /*
1766                  * If the writer would ever execute a read in the critical
1767                  * section, e.g. in irq context, we have a deadlock.
1768                  */
1769                 WARN_ON_ONCE((seq & 1) && smp_processor_id() == vcpu->cpu);
1770                 value = vcpu->arch.sie_block->cputm;
1771                 /* if cputm_start is 0, accounting is being started/stopped */
1772                 if (likely(vcpu->arch.cputm_start))
1773                         value -= get_tod_clock_fast() - vcpu->arch.cputm_start;
1774         } while (read_seqcount_retry(&vcpu->arch.cputm_seqcount, seq & ~1));
1775         preempt_enable();
1776         return value;
1777 }
1778 
1779 void kvm_arch_vcpu_load(struct kvm_vcpu *vcpu, int cpu)
1780 {
1781         /* Save host register state */
1782         save_fpu_regs();
1783         vcpu->arch.host_fpregs.fpc = current->thread.fpu.fpc;
1784         vcpu->arch.host_fpregs.regs = current->thread.fpu.regs;
1785 
1786         if (MACHINE_HAS_VX)
1787                 current->thread.fpu.regs = vcpu->run->s.regs.vrs;
1788         else
1789                 current->thread.fpu.regs = vcpu->run->s.regs.fprs;
1790         current->thread.fpu.fpc = vcpu->run->s.regs.fpc;
1791         if (test_fp_ctl(current->thread.fpu.fpc))
1792                 /* User space provided an invalid FPC, let's clear it */
1793                 current->thread.fpu.fpc = 0;
1794 
1795         save_access_regs(vcpu->arch.host_acrs);
1796         restore_access_regs(vcpu->run->s.regs.acrs);
1797         gmap_enable(vcpu->arch.enabled_gmap);
1798         atomic_or(CPUSTAT_RUNNING, &vcpu->arch.sie_block->cpuflags);
1799         if (vcpu->arch.cputm_enabled && !is_vcpu_idle(vcpu))
1800                 __start_cpu_timer_accounting(vcpu);
1801         vcpu->cpu = cpu;
1802 }
1803 
1804 void kvm_arch_vcpu_put(struct kvm_vcpu *vcpu)
1805 {
1806         vcpu->cpu = -1;
1807         if (vcpu->arch.cputm_enabled && !is_vcpu_idle(vcpu))
1808                 __stop_cpu_timer_accounting(vcpu);
1809         atomic_andnot(CPUSTAT_RUNNING, &vcpu->arch.sie_block->cpuflags);
1810         vcpu->arch.enabled_gmap = gmap_get_enabled();
1811         gmap_disable(vcpu->arch.enabled_gmap);
1812 
1813         /* Save guest register state */
1814         save_fpu_regs();
1815         vcpu->run->s.regs.fpc = current->thread.fpu.fpc;
1816 
1817         /* Restore host register state */
1818         current->thread.fpu.fpc = vcpu->arch.host_fpregs.fpc;
1819         current->thread.fpu.regs = vcpu->arch.host_fpregs.regs;
1820 
1821         save_access_regs(vcpu->run->s.regs.acrs);
1822         restore_access_regs(vcpu->arch.host_acrs);
1823 }
1824 
1825 static void kvm_s390_vcpu_initial_reset(struct kvm_vcpu *vcpu)
1826 {
1827         /* this equals initial cpu reset in pop, but we don't switch to ESA */
1828         vcpu->arch.sie_block->gpsw.mask = 0UL;
1829         vcpu->arch.sie_block->gpsw.addr = 0UL;
1830         kvm_s390_set_prefix(vcpu, 0);
1831         kvm_s390_set_cpu_timer(vcpu, 0);
1832         vcpu->arch.sie_block->ckc       = 0UL;
1833         vcpu->arch.sie_block->todpr     = 0;
1834         memset(vcpu->arch.sie_block->gcr, 0, 16 * sizeof(__u64));
1835         vcpu->arch.sie_block->gcr[0]  = 0xE0UL;
1836         vcpu->arch.sie_block->gcr[14] = 0xC2000000UL;
1837         /* make sure the new fpc will be lazily loaded */
1838         save_fpu_regs();
1839         current->thread.fpu.fpc = 0;
1840         vcpu->arch.sie_block->gbea = 1;
1841         vcpu->arch.sie_block->pp = 0;
1842         vcpu->arch.pfault_token = KVM_S390_PFAULT_TOKEN_INVALID;
1843         kvm_clear_async_pf_completion_queue(vcpu);
1844         if (!kvm_s390_user_cpu_state_ctrl(vcpu->kvm))
1845                 kvm_s390_vcpu_stop(vcpu);
1846         kvm_s390_clear_local_irqs(vcpu);
1847 }
1848 
1849 void kvm_arch_vcpu_postcreate(struct kvm_vcpu *vcpu)
1850 {
1851         mutex_lock(&vcpu->kvm->lock);
1852         preempt_disable();
1853         vcpu->arch.sie_block->epoch = vcpu->kvm->arch.epoch;
1854         preempt_enable();
1855         mutex_unlock(&vcpu->kvm->lock);
1856         if (!kvm_is_ucontrol(vcpu->kvm)) {
1857                 vcpu->arch.gmap = vcpu->kvm->arch.gmap;
1858                 sca_add_vcpu(vcpu);
1859         }
1860         if (test_kvm_facility(vcpu->kvm, 74) || vcpu->kvm->arch.user_instr0)
1861                 vcpu->arch.sie_block->ictl |= ICTL_OPEREXC;
1862         /* make vcpu_load load the right gmap on the first trigger */
1863         vcpu->arch.enabled_gmap = vcpu->arch.gmap;
1864 }
1865 
1866 static void kvm_s390_vcpu_crypto_setup(struct kvm_vcpu *vcpu)
1867 {
1868         if (!test_kvm_facility(vcpu->kvm, 76))
1869                 return;
1870 
1871         vcpu->arch.sie_block->ecb3 &= ~(ECB3_AES | ECB3_DEA);
1872 
1873         if (vcpu->kvm->arch.crypto.aes_kw)
1874                 vcpu->arch.sie_block->ecb3 |= ECB3_AES;
1875         if (vcpu->kvm->arch.crypto.dea_kw)
1876                 vcpu->arch.sie_block->ecb3 |= ECB3_DEA;
1877 
1878         vcpu->arch.sie_block->crycbd = vcpu->kvm->arch.crypto.crycbd;
1879 }
1880 
1881 void kvm_s390_vcpu_unsetup_cmma(struct kvm_vcpu *vcpu)
1882 {
1883         free_page(vcpu->arch.sie_block->cbrlo);
1884         vcpu->arch.sie_block->cbrlo = 0;
1885 }
1886 
1887 int kvm_s390_vcpu_setup_cmma(struct kvm_vcpu *vcpu)
1888 {
1889         vcpu->arch.sie_block->cbrlo = get_zeroed_page(GFP_KERNEL);
1890         if (!vcpu->arch.sie_block->cbrlo)
1891                 return -ENOMEM;
1892 
1893         vcpu->arch.sie_block->ecb2 |= 0x80;
1894         vcpu->arch.sie_block->ecb2 &= ~0x08;
1895         return 0;
1896 }
1897 
1898 static void kvm_s390_vcpu_setup_model(struct kvm_vcpu *vcpu)
1899 {
1900         struct kvm_s390_cpu_model *model = &vcpu->kvm->arch.model;
1901 
1902         vcpu->arch.sie_block->ibc = model->ibc;
1903         if (test_kvm_facility(vcpu->kvm, 7))
1904                 vcpu->arch.sie_block->fac = (u32)(u64) model->fac_list;
1905 }
1906 
1907 int kvm_arch_vcpu_setup(struct kvm_vcpu *vcpu)
1908 {
1909         int rc = 0;
1910 
1911         atomic_set(&vcpu->arch.sie_block->cpuflags, CPUSTAT_ZARCH |
1912                                                     CPUSTAT_SM |
1913                                                     CPUSTAT_STOPPED);
1914 
1915         if (test_kvm_facility(vcpu->kvm, 78))
1916                 atomic_or(CPUSTAT_GED2, &vcpu->arch.sie_block->cpuflags);
1917         else if (test_kvm_facility(vcpu->kvm, 8))
1918                 atomic_or(CPUSTAT_GED, &vcpu->arch.sie_block->cpuflags);
1919 
1920         kvm_s390_vcpu_setup_model(vcpu);
1921 
1922         /* pgste_set_pte has special handling for !MACHINE_HAS_ESOP */
1923         if (MACHINE_HAS_ESOP)
1924                 vcpu->arch.sie_block->ecb |= 0x02;
1925         if (test_kvm_facility(vcpu->kvm, 9))
1926                 vcpu->arch.sie_block->ecb |= 0x04;
1927         if (test_kvm_facility(vcpu->kvm, 73))
1928                 vcpu->arch.sie_block->ecb |= 0x10;
1929 
1930         if (test_kvm_facility(vcpu->kvm, 8) && sclp.has_pfmfi)
1931                 vcpu->arch.sie_block->ecb2 |= 0x08;
1932         vcpu->arch.sie_block->eca = 0x1002000U;
1933         if (sclp.has_cei)
1934                 vcpu->arch.sie_block->eca |= 0x80000000U;
1935         if (sclp.has_ib)
1936                 vcpu->arch.sie_block->eca |= 0x40000000U;
1937         if (sclp.has_siif)
1938                 vcpu->arch.sie_block->eca |= 1;
1939         if (sclp.has_sigpif)
1940                 vcpu->arch.sie_block->eca |= 0x10000000U;
1941         if (test_kvm_facility(vcpu->kvm, 64))
1942                 vcpu->arch.sie_block->ecb3 |= 0x01;
1943         if (test_kvm_facility(vcpu->kvm, 129)) {
1944                 vcpu->arch.sie_block->eca |= 0x00020000;
1945                 vcpu->arch.sie_block->ecd |= 0x20000000;
1946         }
1947         vcpu->arch.sie_block->riccbd = (unsigned long) &vcpu->run->s.regs.riccb;
1948         vcpu->arch.sie_block->ictl |= ICTL_ISKE | ICTL_SSKE | ICTL_RRBE;
1949 
1950         if (vcpu->kvm->arch.use_cmma) {
1951                 rc = kvm_s390_vcpu_setup_cmma(vcpu);
1952                 if (rc)
1953                         return rc;
1954         }
1955         hrtimer_init(&vcpu->arch.ckc_timer, CLOCK_MONOTONIC, HRTIMER_MODE_REL);
1956         vcpu->arch.ckc_timer.function = kvm_s390_idle_wakeup;
1957 
1958         kvm_s390_vcpu_crypto_setup(vcpu);
1959 
1960         return rc;
1961 }
1962 
1963 struct kvm_vcpu *kvm_arch_vcpu_create(struct kvm *kvm,
1964                                       unsigned int id)
1965 {
1966         struct kvm_vcpu *vcpu;
1967         struct sie_page *sie_page;
1968         int rc = -EINVAL;
1969 
1970         if (!kvm_is_ucontrol(kvm) && !sca_can_add_vcpu(kvm, id))
1971                 goto out;
1972 
1973         rc = -ENOMEM;
1974 
1975         vcpu = kmem_cache_zalloc(kvm_vcpu_cache, GFP_KERNEL);
1976         if (!vcpu)
1977                 goto out;
1978 
1979         sie_page = (struct sie_page *) get_zeroed_page(GFP_KERNEL);
1980         if (!sie_page)
1981                 goto out_free_cpu;
1982 
1983         vcpu->arch.sie_block = &sie_page->sie_block;
1984         vcpu->arch.sie_block->itdba = (unsigned long) &sie_page->itdb;
1985 
1986         /* the real guest size will always be smaller than msl */
1987         vcpu->arch.sie_block->mso = 0;
1988         vcpu->arch.sie_block->msl = sclp.hamax;
1989 
1990         vcpu->arch.sie_block->icpua = id;
1991         spin_lock_init(&vcpu->arch.local_int.lock);
1992         vcpu->arch.local_int.float_int = &kvm->arch.float_int;
1993         vcpu->arch.local_int.wq = &vcpu->wq;
1994         vcpu->arch.local_int.cpuflags = &vcpu->arch.sie_block->cpuflags;
1995         seqcount_init(&vcpu->arch.cputm_seqcount);
1996 
1997         rc = kvm_vcpu_init(vcpu, kvm, id);
1998         if (rc)
1999                 goto out_free_sie_block;
2000         VM_EVENT(kvm, 3, "create cpu %d at 0x%pK, sie block at 0x%pK", id, vcpu,
2001                  vcpu->arch.sie_block);
2002         trace_kvm_s390_create_vcpu(id, vcpu, vcpu->arch.sie_block);
2003 
2004         return vcpu;
2005 out_free_sie_block:
2006         free_page((unsigned long)(vcpu->arch.sie_block));
2007 out_free_cpu:
2008         kmem_cache_free(kvm_vcpu_cache, vcpu);
2009 out:
2010         return ERR_PTR(rc);
2011 }
2012 
2013 int kvm_arch_vcpu_runnable(struct kvm_vcpu *vcpu)
2014 {
2015         return kvm_s390_vcpu_has_irq(vcpu, 0);
2016 }
2017 
2018 void kvm_s390_vcpu_block(struct kvm_vcpu *vcpu)
2019 {
2020         atomic_or(PROG_BLOCK_SIE, &vcpu->arch.sie_block->prog20);
2021         exit_sie(vcpu);
2022 }
2023 
2024 void kvm_s390_vcpu_unblock(struct kvm_vcpu *vcpu)
2025 {
2026         atomic_andnot(PROG_BLOCK_SIE, &vcpu->arch.sie_block->prog20);
2027 }
2028 
2029 static void kvm_s390_vcpu_request(struct kvm_vcpu *vcpu)
2030 {
2031         atomic_or(PROG_REQUEST, &vcpu->arch.sie_block->prog20);
2032         exit_sie(vcpu);
2033 }
2034 
2035 static void kvm_s390_vcpu_request_handled(struct kvm_vcpu *vcpu)
2036 {
2037         atomic_andnot(PROG_REQUEST, &vcpu->arch.sie_block->prog20);
2038 }
2039 
2040 /*
2041  * Kick a guest cpu out of SIE and wait until SIE is not running.
2042  * If the CPU is not running (e.g. waiting as idle) the function will
2043  * return immediately. */
2044 void exit_sie(struct kvm_vcpu *vcpu)
2045 {
2046         atomic_or(CPUSTAT_STOP_INT, &vcpu->arch.sie_block->cpuflags);
2047         while (vcpu->arch.sie_block->prog0c & PROG_IN_SIE)
2048                 cpu_relax();
2049 }
2050 
2051 /* Kick a guest cpu out of SIE to process a request synchronously */
2052 void kvm_s390_sync_request(int req, struct kvm_vcpu *vcpu)
2053 {
2054         kvm_make_request(req, vcpu);
2055         kvm_s390_vcpu_request(vcpu);
2056 }
2057 
2058 static void kvm_gmap_notifier(struct gmap *gmap, unsigned long start,
2059                               unsigned long end)
2060 {
2061         struct kvm *kvm = gmap->private;
2062         struct kvm_vcpu *vcpu;
2063         unsigned long prefix;
2064         int i;
2065 
2066         if (gmap_is_shadow(gmap))
2067                 return;
2068         if (start >= 1UL << 31)
2069                 /* We are only interested in prefix pages */
2070                 return;
2071         kvm_for_each_vcpu(i, vcpu, kvm) {
2072                 /* match against both prefix pages */
2073                 prefix = kvm_s390_get_prefix(vcpu);
2074                 if (prefix <= end && start <= prefix + 2*PAGE_SIZE - 1) {
2075                         VCPU_EVENT(vcpu, 2, "gmap notifier for %lx-%lx",
2076                                    start, end);
2077                         kvm_s390_sync_request(KVM_REQ_MMU_RELOAD, vcpu);
2078                 }
2079         }
2080 }
2081 
2082 int kvm_arch_vcpu_should_kick(struct kvm_vcpu *vcpu)
2083 {
2084         /* kvm common code refers to this, but never calls it */
2085         BUG();
2086         return 0;
2087 }
2088 
2089 static int kvm_arch_vcpu_ioctl_get_one_reg(struct kvm_vcpu *vcpu,
2090                                            struct kvm_one_reg *reg)
2091 {
2092         int r = -EINVAL;
2093 
2094         switch (reg->id) {
2095         case KVM_REG_S390_TODPR:
2096                 r = put_user(vcpu->arch.sie_block->todpr,
2097                              (u32 __user *)reg->addr);
2098                 break;
2099         case KVM_REG_S390_EPOCHDIFF:
2100                 r = put_user(vcpu->arch.sie_block->epoch,
2101                              (u64 __user *)reg->addr);
2102                 break;
2103         case KVM_REG_S390_CPU_TIMER:
2104                 r = put_user(kvm_s390_get_cpu_timer(vcpu),
2105                              (u64 __user *)reg->addr);
2106                 break;
2107         case KVM_REG_S390_CLOCK_COMP:
2108                 r = put_user(vcpu->arch.sie_block->ckc,
2109                              (u64 __user *)reg->addr);
2110                 break;
2111         case KVM_REG_S390_PFTOKEN:
2112                 r = put_user(vcpu->arch.pfault_token,
2113                              (u64 __user *)reg->addr);
2114                 break;
2115         case KVM_REG_S390_PFCOMPARE:
2116                 r = put_user(vcpu->arch.pfault_compare,
2117                              (u64 __user *)reg->addr);
2118                 break;
2119         case KVM_REG_S390_PFSELECT:
2120                 r = put_user(vcpu->arch.pfault_select,
2121                              (u64 __user *)reg->addr);
2122                 break;
2123         case KVM_REG_S390_PP:
2124                 r = put_user(vcpu->arch.sie_block->pp,
2125                              (u64 __user *)reg->addr);
2126                 break;
2127         case KVM_REG_S390_GBEA:
2128                 r = put_user(vcpu->arch.sie_block->gbea,
2129                              (u64 __user *)reg->addr);
2130                 break;
2131         default:
2132                 break;
2133         }
2134 
2135         return r;
2136 }
2137 
2138 static int kvm_arch_vcpu_ioctl_set_one_reg(struct kvm_vcpu *vcpu,
2139                                            struct kvm_one_reg *reg)
2140 {
2141         int r = -EINVAL;
2142         __u64 val;
2143 
2144         switch (reg->id) {
2145         case KVM_REG_S390_TODPR:
2146                 r = get_user(vcpu->arch.sie_block->todpr,
2147                              (u32 __user *)reg->addr);
2148                 break;
2149         case KVM_REG_S390_EPOCHDIFF:
2150                 r = get_user(vcpu->arch.sie_block->epoch,
2151                              (u64 __user *)reg->addr);
2152                 break;
2153         case KVM_REG_S390_CPU_TIMER:
2154                 r = get_user(val, (u64 __user *)reg->addr);
2155                 if (!r)
2156                         kvm_s390_set_cpu_timer(vcpu, val);
2157                 break;
2158         case KVM_REG_S390_CLOCK_COMP:
2159                 r = get_user(vcpu->arch.sie_block->ckc,
2160                              (u64 __user *)reg->addr);
2161                 break;
2162         case KVM_REG_S390_PFTOKEN:
2163                 r = get_user(vcpu->arch.pfault_token,
2164                              (u64 __user *)reg->addr);
2165                 if (vcpu->arch.pfault_token == KVM_S390_PFAULT_TOKEN_INVALID)
2166                         kvm_clear_async_pf_completion_queue(vcpu);
2167                 break;
2168         case KVM_REG_S390_PFCOMPARE:
2169                 r = get_user(vcpu->arch.pfault_compare,
2170                              (u64 __user *)reg->addr);
2171                 break;
2172         case KVM_REG_S390_PFSELECT:
2173                 r = get_user(vcpu->arch.pfault_select,
2174                              (u64 __user *)reg->addr);
2175                 break;
2176         case KVM_REG_S390_PP:
2177                 r = get_user(vcpu->arch.sie_block->pp,
2178                              (u64 __user *)reg->addr);
2179                 break;
2180         case KVM_REG_S390_GBEA:
2181                 r = get_user(vcpu->arch.sie_block->gbea,
2182                              (u64 __user *)reg->addr);
2183                 break;
2184         default:
2185                 break;
2186         }
2187 
2188         return r;
2189 }
2190 
2191 static int kvm_arch_vcpu_ioctl_initial_reset(struct kvm_vcpu *vcpu)
2192 {
2193         kvm_s390_vcpu_initial_reset(vcpu);
2194         return 0;
2195 }
2196 
2197 int kvm_arch_vcpu_ioctl_set_regs(struct kvm_vcpu *vcpu, struct kvm_regs *regs)
2198 {
2199         memcpy(&vcpu->run->s.regs.gprs, &regs->gprs, sizeof(regs->gprs));
2200         return 0;
2201 }
2202 
2203 int kvm_arch_vcpu_ioctl_get_regs(struct kvm_vcpu *vcpu, struct kvm_regs *regs)
2204 {
2205         memcpy(&regs->gprs, &vcpu->run->s.regs.gprs, sizeof(regs->gprs));
2206         return 0;
2207 }
2208 
2209 int kvm_arch_vcpu_ioctl_set_sregs(struct kvm_vcpu *vcpu,
2210                                   struct kvm_sregs *sregs)
2211 {
2212         memcpy(&vcpu->run->s.regs.acrs, &sregs->acrs, sizeof(sregs->acrs));
2213         memcpy(&vcpu->arch.sie_block->gcr, &sregs->crs, sizeof(sregs->crs));
2214         restore_access_regs(vcpu->run->s.regs.acrs);
2215         return 0;
2216 }
2217 
2218 int kvm_arch_vcpu_ioctl_get_sregs(struct kvm_vcpu *vcpu,
2219                                   struct kvm_sregs *sregs)
2220 {
2221         memcpy(&sregs->acrs, &vcpu->run->s.regs.acrs, sizeof(sregs->acrs));
2222         memcpy(&sregs->crs, &vcpu->arch.sie_block->gcr, sizeof(sregs->crs));
2223         return 0;
2224 }
2225 
2226 int kvm_arch_vcpu_ioctl_set_fpu(struct kvm_vcpu *vcpu, struct kvm_fpu *fpu)
2227 {
2228         /* make sure the new values will be lazily loaded */
2229         save_fpu_regs();
2230         if (test_fp_ctl(fpu->fpc))
2231                 return -EINVAL;
2232         current->thread.fpu.fpc = fpu->fpc;
2233         if (MACHINE_HAS_VX)
2234                 convert_fp_to_vx((__vector128 *) vcpu->run->s.regs.vrs,
2235                                  (freg_t *) fpu->fprs);
2236         else
2237                 memcpy(vcpu->run->s.regs.fprs, &fpu->fprs, sizeof(fpu->fprs));
2238         return 0;
2239 }
2240 
2241 int kvm_arch_vcpu_ioctl_get_fpu(struct kvm_vcpu *vcpu, struct kvm_fpu *fpu)
2242 {
2243         /* make sure we have the latest values */
2244         save_fpu_regs();
2245         if (MACHINE_HAS_VX)
2246                 convert_vx_to_fp((freg_t *) fpu->fprs,
2247                                  (__vector128 *) vcpu->run->s.regs.vrs);
2248         else
2249                 memcpy(fpu->fprs, vcpu->run->s.regs.fprs, sizeof(fpu->fprs));
2250         fpu->fpc = current->thread.fpu.fpc;
2251         return 0;
2252 }
2253 
2254 static int kvm_arch_vcpu_ioctl_set_initial_psw(struct kvm_vcpu *vcpu, psw_t psw)
2255 {
2256         int rc = 0;
2257 
2258         if (!is_vcpu_stopped(vcpu))
2259                 rc = -EBUSY;
2260         else {
2261                 vcpu->run->psw_mask = psw.mask;
2262                 vcpu->run->psw_addr = psw.addr;
2263         }
2264         return rc;
2265 }
2266 
2267 int kvm_arch_vcpu_ioctl_translate(struct kvm_vcpu *vcpu,
2268                                   struct kvm_translation *tr)
2269 {
2270         return -EINVAL; /* not implemented yet */
2271 }
2272 
2273 #define VALID_GUESTDBG_FLAGS (KVM_GUESTDBG_SINGLESTEP | \
2274                               KVM_GUESTDBG_USE_HW_BP | \
2275                               KVM_GUESTDBG_ENABLE)
2276 
2277 int kvm_arch_vcpu_ioctl_set_guest_debug(struct kvm_vcpu *vcpu,
2278                                         struct kvm_guest_debug *dbg)
2279 {
2280         int rc = 0;
2281 
2282         vcpu->guest_debug = 0;
2283         kvm_s390_clear_bp_data(vcpu);
2284 
2285         if (dbg->control & ~VALID_GUESTDBG_FLAGS)
2286                 return -EINVAL;
2287         if (!sclp.has_gpere)
2288                 return -EINVAL;
2289 
2290         if (dbg->control & KVM_GUESTDBG_ENABLE) {
2291                 vcpu->guest_debug = dbg->control;
2292                 /* enforce guest PER */
2293                 atomic_or(CPUSTAT_P, &vcpu->arch.sie_block->cpuflags);
2294 
2295                 if (dbg->control & KVM_GUESTDBG_USE_HW_BP)
2296                         rc = kvm_s390_import_bp_data(vcpu, dbg);
2297         } else {
2298                 atomic_andnot(CPUSTAT_P, &vcpu->arch.sie_block->cpuflags);
2299                 vcpu->arch.guestdbg.last_bp = 0;
2300         }
2301 
2302         if (rc) {
2303                 vcpu->guest_debug = 0;
2304                 kvm_s390_clear_bp_data(vcpu);
2305                 atomic_andnot(CPUSTAT_P, &vcpu->arch.sie_block->cpuflags);
2306         }
2307 
2308         return rc;
2309 }
2310 
2311 int kvm_arch_vcpu_ioctl_get_mpstate(struct kvm_vcpu *vcpu,
2312                                     struct kvm_mp_state *mp_state)
2313 {
2314         /* CHECK_STOP and LOAD are not supported yet */
2315         return is_vcpu_stopped(vcpu) ? KVM_MP_STATE_STOPPED :
2316                                        KVM_MP_STATE_OPERATING;
2317 }
2318 
2319 int kvm_arch_vcpu_ioctl_set_mpstate(struct kvm_vcpu *vcpu,
2320                                     struct kvm_mp_state *mp_state)
2321 {
2322         int rc = 0;
2323 
2324         /* user space knows about this interface - let it control the state */
2325         vcpu->kvm->arch.user_cpu_state_ctrl = 1;
2326 
2327         switch (mp_state->mp_state) {
2328         case KVM_MP_STATE_STOPPED:
2329                 kvm_s390_vcpu_stop(vcpu);
2330                 break;
2331         case KVM_MP_STATE_OPERATING:
2332                 kvm_s390_vcpu_start(vcpu);
2333                 break;
2334         case KVM_MP_STATE_LOAD:
2335         case KVM_MP_STATE_CHECK_STOP:
2336                 /* fall through - CHECK_STOP and LOAD are not supported yet */
2337         default:
2338                 rc = -ENXIO;
2339         }
2340 
2341         return rc;
2342 }
2343 
2344 static bool ibs_enabled(struct kvm_vcpu *vcpu)
2345 {
2346         return atomic_read(&vcpu->arch.sie_block->cpuflags) & CPUSTAT_IBS;
2347 }
2348 
2349 static int kvm_s390_handle_requests(struct kvm_vcpu *vcpu)
2350 {
2351 retry:
2352         kvm_s390_vcpu_request_handled(vcpu);
2353         if (!vcpu->requests)
2354                 return 0;
2355         /*
2356          * We use MMU_RELOAD just to re-arm the ipte notifier for the
2357          * guest prefix page. gmap_mprotect_notify will wait on the ptl lock.
2358          * This ensures that the ipte instruction for this request has
2359          * already finished. We might race against a second unmapper that
2360          * wants to set the blocking bit. Lets just retry the request loop.
2361          */
2362         if (kvm_check_request(KVM_REQ_MMU_RELOAD, vcpu)) {
2363                 int rc;
2364                 rc = gmap_mprotect_notify(vcpu->arch.gmap,
2365                                           kvm_s390_get_prefix(vcpu),
2366                                           PAGE_SIZE * 2, PROT_WRITE);
2367                 if (rc) {
2368                         kvm_make_request(KVM_REQ_MMU_RELOAD, vcpu);
2369                         return rc;
2370                 }
2371                 goto retry;
2372         }
2373 
2374         if (kvm_check_request(KVM_REQ_TLB_FLUSH, vcpu)) {
2375                 vcpu->arch.sie_block->ihcpu = 0xffff;
2376                 goto retry;
2377         }
2378 
2379         if (kvm_check_request(KVM_REQ_ENABLE_IBS, vcpu)) {
2380                 if (!ibs_enabled(vcpu)) {
2381                         trace_kvm_s390_enable_disable_ibs(vcpu->vcpu_id, 1);
2382                         atomic_or(CPUSTAT_IBS,
2383                                         &vcpu->arch.sie_block->cpuflags);
2384                 }
2385                 goto retry;
2386         }
2387 
2388         if (kvm_check_request(KVM_REQ_DISABLE_IBS, vcpu)) {
2389                 if (ibs_enabled(vcpu)) {
2390                         trace_kvm_s390_enable_disable_ibs(vcpu->vcpu_id, 0);
2391                         atomic_andnot(CPUSTAT_IBS,
2392                                           &vcpu->arch.sie_block->cpuflags);
2393                 }
2394                 goto retry;
2395         }
2396 
2397         if (kvm_check_request(KVM_REQ_ICPT_OPEREXC, vcpu)) {
2398                 vcpu->arch.sie_block->ictl |= ICTL_OPEREXC;
2399                 goto retry;
2400         }
2401 
2402         /* nothing to do, just clear the request */
2403         clear_bit(KVM_REQ_UNHALT, &vcpu->requests);
2404 
2405         return 0;
2406 }
2407 
2408 void kvm_s390_set_tod_clock(struct kvm *kvm, u64 tod)
2409 {
2410         struct kvm_vcpu *vcpu;
2411         int i;
2412 
2413         mutex_lock(&kvm->lock);
2414         preempt_disable();
2415         kvm->arch.epoch = tod - get_tod_clock();
2416         kvm_s390_vcpu_block_all(kvm);
2417         kvm_for_each_vcpu(i, vcpu, kvm)
2418                 vcpu->arch.sie_block->epoch = kvm->arch.epoch;
2419         kvm_s390_vcpu_unblock_all(kvm);
2420         preempt_enable();
2421         mutex_unlock(&kvm->lock);
2422 }
2423 
2424 /**
2425  * kvm_arch_fault_in_page - fault-in guest page if necessary
2426  * @vcpu: The corresponding virtual cpu
2427  * @gpa: Guest physical address
2428  * @writable: Whether the page should be writable or not
2429  *
2430  * Make sure that a guest page has been faulted-in on the host.
2431  *
2432  * Return: Zero on success, negative error code otherwise.
2433  */
2434 long kvm_arch_fault_in_page(struct kvm_vcpu *vcpu, gpa_t gpa, int writable)
2435 {
2436         return gmap_fault(vcpu->arch.gmap, gpa,
2437                           writable ? FAULT_FLAG_WRITE : 0);
2438 }
2439 
2440 static void __kvm_inject_pfault_token(struct kvm_vcpu *vcpu, bool start_token,
2441                                       unsigned long token)
2442 {
2443         struct kvm_s390_interrupt inti;
2444         struct kvm_s390_irq irq;
2445 
2446         if (start_token) {
2447                 irq.u.ext.ext_params2 = token;
2448                 irq.type = KVM_S390_INT_PFAULT_INIT;
2449                 WARN_ON_ONCE(kvm_s390_inject_vcpu(vcpu, &irq));
2450         } else {
2451                 inti.type = KVM_S390_INT_PFAULT_DONE;
2452                 inti.parm64 = token;
2453                 WARN_ON_ONCE(kvm_s390_inject_vm(vcpu->kvm, &inti));
2454         }
2455 }
2456 
2457 void kvm_arch_async_page_not_present(struct kvm_vcpu *vcpu,
2458                                      struct kvm_async_pf *work)
2459 {
2460         trace_kvm_s390_pfault_init(vcpu, work->arch.pfault_token);
2461         __kvm_inject_pfault_token(vcpu, true, work->arch.pfault_token);
2462 }
2463 
2464 void kvm_arch_async_page_present(struct kvm_vcpu *vcpu,
2465                                  struct kvm_async_pf *work)
2466 {
2467         trace_kvm_s390_pfault_done(vcpu, work->arch.pfault_token);
2468         __kvm_inject_pfault_token(vcpu, false, work->arch.pfault_token);
2469 }
2470 
2471 void kvm_arch_async_page_ready(struct kvm_vcpu *vcpu,
2472                                struct kvm_async_pf *work)
2473 {
2474         /* s390 will always inject the page directly */
2475 }
2476 
2477 bool kvm_arch_can_inject_async_page_present(struct kvm_vcpu *vcpu)
2478 {
2479         /*
2480          * s390 will always inject the page directly,
2481          * but we still want check_async_completion to cleanup
2482          */
2483         return true;
2484 }
2485 
2486 static int kvm_arch_setup_async_pf(struct kvm_vcpu *vcpu)
2487 {
2488         hva_t hva;
2489         struct kvm_arch_async_pf arch;
2490         int rc;
2491 
2492         if (vcpu->arch.pfault_token == KVM_S390_PFAULT_TOKEN_INVALID)
2493                 return 0;
2494         if ((vcpu->arch.sie_block->gpsw.mask & vcpu->arch.pfault_select) !=
2495             vcpu->arch.pfault_compare)
2496                 return 0;
2497         if (psw_extint_disabled(vcpu))
2498                 return 0;
2499         if (kvm_s390_vcpu_has_irq(vcpu, 0))
2500                 return 0;
2501         if (!(vcpu->arch.sie_block->gcr[0] & 0x200ul))
2502                 return 0;
2503         if (!vcpu->arch.gmap->pfault_enabled)
2504                 return 0;
2505 
2506         hva = gfn_to_hva(vcpu->kvm, gpa_to_gfn(current->thread.gmap_addr));
2507         hva += current->thread.gmap_addr & ~PAGE_MASK;
2508         if (read_guest_real(vcpu, vcpu->arch.pfault_token, &arch.pfault_token, 8))
2509                 return 0;
2510 
2511         rc = kvm_setup_async_pf(vcpu, current->thread.gmap_addr, hva, &arch);
2512         return rc;
2513 }
2514 
2515 static int vcpu_pre_run(struct kvm_vcpu *vcpu)
2516 {
2517         int rc, cpuflags;
2518 
2519         /*
2520          * On s390 notifications for arriving pages will be delivered directly
2521          * to the guest but the house keeping for completed pfaults is
2522          * handled outside the worker.
2523          */
2524         kvm_check_async_pf_completion(vcpu);
2525 
2526         vcpu->arch.sie_block->gg14 = vcpu->run->s.regs.gprs[14];
2527         vcpu->arch.sie_block->gg15 = vcpu->run->s.regs.gprs[15];
2528 
2529         if (need_resched())
2530                 schedule();
2531 
2532         if (test_cpu_flag(CIF_MCCK_PENDING))
2533                 s390_handle_mcck();
2534 
2535         if (!kvm_is_ucontrol(vcpu->kvm)) {
2536                 rc = kvm_s390_deliver_pending_interrupts(vcpu);
2537                 if (rc)
2538                         return rc;
2539         }
2540 
2541         rc = kvm_s390_handle_requests(vcpu);
2542         if (rc)
2543                 return rc;
2544 
2545         if (guestdbg_enabled(vcpu)) {
2546                 kvm_s390_backup_guest_per_regs(vcpu);
2547                 kvm_s390_patch_guest_per_regs(vcpu);
2548         }
2549 
2550         vcpu->arch.sie_block->icptcode = 0;
2551         cpuflags = atomic_read(&vcpu->arch.sie_block->cpuflags);
2552         VCPU_EVENT(vcpu, 6, "entering sie flags %x", cpuflags);
2553         trace_kvm_s390_sie_enter(vcpu, cpuflags);
2554 
2555         return 0;
2556 }
2557 
2558 static int vcpu_post_run_fault_in_sie(struct kvm_vcpu *vcpu)
2559 {
2560         struct kvm_s390_pgm_info pgm_info = {
2561                 .code = PGM_ADDRESSING,
2562         };
2563         u8 opcode, ilen;
2564         int rc;
2565 
2566         VCPU_EVENT(vcpu, 3, "%s", "fault in sie instruction");
2567         trace_kvm_s390_sie_fault(vcpu);
2568 
2569         /*
2570          * We want to inject an addressing exception, which is defined as a
2571          * suppressing or terminating exception. However, since we came here
2572          * by a DAT access exception, the PSW still points to the faulting
2573          * instruction since DAT exceptions are nullifying. So we've got
2574          * to look up the current opcode to get the length of the instruction
2575          * to be able to forward the PSW.
2576          */
2577         rc = read_guest_instr(vcpu, &opcode, 1);
2578         ilen = insn_length(opcode);
2579         if (rc < 0) {
2580                 return rc;
2581         } else if (rc) {
2582                 /* Instruction-Fetching Exceptions - we can't detect the ilen.
2583                  * Forward by arbitrary ilc, injection will take care of
2584                  * nullification if necessary.
2585                  */
2586                 pgm_info = vcpu->arch.pgm;
2587                 ilen = 4;
2588         }
2589         pgm_info.flags = ilen | KVM_S390_PGM_FLAGS_ILC_VALID;
2590         kvm_s390_forward_psw(vcpu, ilen);
2591         return kvm_s390_inject_prog_irq(vcpu, &pgm_info);
2592 }
2593 
2594 static int vcpu_post_run(struct kvm_vcpu *vcpu, int exit_reason)
2595 {
2596         VCPU_EVENT(vcpu, 6, "exit sie icptcode %d",
2597                    vcpu->arch.sie_block->icptcode);
2598         trace_kvm_s390_sie_exit(vcpu, vcpu->arch.sie_block->icptcode);
2599 
2600         if (guestdbg_enabled(vcpu))
2601                 kvm_s390_restore_guest_per_regs(vcpu);
2602 
2603         vcpu->run->s.regs.gprs[14] = vcpu->arch.sie_block->gg14;
2604         vcpu->run->s.regs.gprs[15] = vcpu->arch.sie_block->gg15;
2605 
2606         if (vcpu->arch.sie_block->icptcode > 0) {
2607                 int rc = kvm_handle_sie_intercept(vcpu);
2608 
2609                 if (rc != -EOPNOTSUPP)
2610                         return rc;
2611                 vcpu->run->exit_reason = KVM_EXIT_S390_SIEIC;
2612                 vcpu->run->s390_sieic.icptcode = vcpu->arch.sie_block->icptcode;
2613                 vcpu->run->s390_sieic.ipa = vcpu->arch.sie_block->ipa;
2614                 vcpu->run->s390_sieic.ipb = vcpu->arch.sie_block->ipb;
2615                 return -EREMOTE;
2616         } else if (exit_reason != -EFAULT) {
2617                 vcpu->stat.exit_null++;
2618                 return 0;
2619         } else if (kvm_is_ucontrol(vcpu->kvm)) {
2620                 vcpu->run->exit_reason = KVM_EXIT_S390_UCONTROL;
2621                 vcpu->run->s390_ucontrol.trans_exc_code =
2622                                                 current->thread.gmap_addr;
2623                 vcpu->run->s390_ucontrol.pgm_code = 0x10;
2624                 return -EREMOTE;
2625         } else if (current->thread.gmap_pfault) {
2626                 trace_kvm_s390_major_guest_pfault(vcpu);
2627                 current->thread.gmap_pfault = 0;
2628                 if (kvm_arch_setup_async_pf(vcpu))
2629                         return 0;
2630                 return kvm_arch_fault_in_page(vcpu, current->thread.gmap_addr, 1);
2631         }
2632         return vcpu_post_run_fault_in_sie(vcpu);
2633 }
2634 
2635 static int __vcpu_run(struct kvm_vcpu *vcpu)
2636 {
2637         int rc, exit_reason;
2638 
2639         /*
2640          * We try to hold kvm->srcu during most of vcpu_run (except when run-
2641          * ning the guest), so that memslots (and other stuff) are protected
2642          */
2643         vcpu->srcu_idx = srcu_read_lock(&vcpu->kvm->srcu);
2644 
2645         do {
2646                 rc = vcpu_pre_run(vcpu);
2647                 if (rc)
2648                         break;
2649 
2650                 srcu_read_unlock(&vcpu->kvm->srcu, vcpu->srcu_idx);
2651                 /*
2652                  * As PF_VCPU will be used in fault handler, between
2653                  * guest_enter and guest_exit should be no uaccess.
2654                  */
2655                 local_irq_disable();
2656                 guest_enter_irqoff();
2657                 __disable_cpu_timer_accounting(vcpu);
2658                 local_irq_enable();
2659                 exit_reason = sie64a(vcpu->arch.sie_block,
2660                                      vcpu->run->s.regs.gprs);
2661                 local_irq_disable();
2662                 __enable_cpu_timer_accounting(vcpu);
2663                 guest_exit_irqoff();
2664                 local_irq_enable();
2665                 vcpu->srcu_idx = srcu_read_lock(&vcpu->kvm->srcu);
2666 
2667                 rc = vcpu_post_run(vcpu, exit_reason);
2668         } while (!signal_pending(current) && !guestdbg_exit_pending(vcpu) && !rc);
2669 
2670         srcu_read_unlock(&vcpu->kvm->srcu, vcpu->srcu_idx);
2671         return rc;
2672 }
2673 
2674 static void sync_regs(struct kvm_vcpu *vcpu, struct kvm_run *kvm_run)
2675 {
2676         vcpu->arch.sie_block->gpsw.mask = kvm_run->psw_mask;
2677         vcpu->arch.sie_block->gpsw.addr = kvm_run->psw_addr;
2678         if (kvm_run->kvm_dirty_regs & KVM_SYNC_PREFIX)
2679                 kvm_s390_set_prefix(vcpu, kvm_run->s.regs.prefix);
2680         if (kvm_run->kvm_dirty_regs & KVM_SYNC_CRS) {
2681                 memcpy(&vcpu->arch.sie_block->gcr, &kvm_run->s.regs.crs, 128);
2682                 /* some control register changes require a tlb flush */
2683                 kvm_make_request(KVM_REQ_TLB_FLUSH, vcpu);
2684         }
2685         if (kvm_run->kvm_dirty_regs & KVM_SYNC_ARCH0) {
2686                 kvm_s390_set_cpu_timer(vcpu, kvm_run->s.regs.cputm);
2687                 vcpu->arch.sie_block->ckc = kvm_run->s.regs.ckc;
2688                 vcpu->arch.sie_block->todpr = kvm_run->s.regs.todpr;
2689                 vcpu->arch.sie_block->pp = kvm_run->s.regs.pp;
2690                 vcpu->arch.sie_block->gbea = kvm_run->s.regs.gbea;
2691         }
2692         if (kvm_run->kvm_dirty_regs & KVM_SYNC_PFAULT) {
2693                 vcpu->arch.pfault_token = kvm_run->s.regs.pft;
2694                 vcpu->arch.pfault_select = kvm_run->s.regs.pfs;
2695                 vcpu->arch.pfault_compare = kvm_run->s.regs.pfc;
2696                 if (vcpu->arch.pfault_token == KVM_S390_PFAULT_TOKEN_INVALID)
2697                         kvm_clear_async_pf_completion_queue(vcpu);
2698         }
2699         kvm_run->kvm_dirty_regs = 0;
2700 }
2701 
2702 static void store_regs(struct kvm_vcpu *vcpu, struct kvm_run *kvm_run)
2703 {
2704         kvm_run->psw_mask = vcpu->arch.sie_block->gpsw.mask;
2705         kvm_run->psw_addr = vcpu->arch.sie_block->gpsw.addr;
2706         kvm_run->s.regs.prefix = kvm_s390_get_prefix(vcpu);
2707         memcpy(&kvm_run->s.regs.crs, &vcpu->arch.sie_block->gcr, 128);
2708         kvm_run->s.regs.cputm = kvm_s390_get_cpu_timer(vcpu);
2709         kvm_run->s.regs.ckc = vcpu->arch.sie_block->ckc;
2710         kvm_run->s.regs.todpr = vcpu->arch.sie_block->todpr;
2711         kvm_run->s.regs.pp = vcpu->arch.sie_block->pp;
2712         kvm_run->s.regs.gbea = vcpu->arch.sie_block->gbea;
2713         kvm_run->s.regs.pft = vcpu->arch.pfault_token;
2714         kvm_run->s.regs.pfs = vcpu->arch.pfault_select;
2715         kvm_run->s.regs.pfc = vcpu->arch.pfault_compare;
2716 }
2717 
2718 int kvm_arch_vcpu_ioctl_run(struct kvm_vcpu *vcpu, struct kvm_run *kvm_run)
2719 {
2720         int rc;
2721         sigset_t sigsaved;
2722 
2723         if (guestdbg_exit_pending(vcpu)) {
2724                 kvm_s390_prepare_debug_exit(vcpu);
2725                 return 0;
2726         }
2727 
2728         if (vcpu->sigset_active)
2729                 sigprocmask(SIG_SETMASK, &vcpu->sigset, &sigsaved);
2730 
2731         if (!kvm_s390_user_cpu_state_ctrl(vcpu->kvm)) {
2732                 kvm_s390_vcpu_start(vcpu);
2733         } else if (is_vcpu_stopped(vcpu)) {
2734                 pr_err_ratelimited("can't run stopped vcpu %d\n",
2735                                    vcpu->vcpu_id);
2736                 return -EINVAL;
2737         }
2738 
2739         sync_regs(vcpu, kvm_run);
2740         enable_cpu_timer_accounting(vcpu);
2741 
2742         might_fault();
2743         rc = __vcpu_run(vcpu);
2744 
2745         if (signal_pending(current) && !rc) {
2746                 kvm_run->exit_reason = KVM_EXIT_INTR;
2747                 rc = -EINTR;
2748         }
2749 
2750         if (guestdbg_exit_pending(vcpu) && !rc)  {
2751                 kvm_s390_prepare_debug_exit(vcpu);
2752                 rc = 0;
2753         }
2754 
2755         if (rc == -EREMOTE) {
2756                 /* userspace support is needed, kvm_run has been prepared */
2757                 rc = 0;
2758         }
2759 
2760         disable_cpu_timer_accounting(vcpu);
2761         store_regs(vcpu, kvm_run);
2762 
2763         if (vcpu->sigset_active)
2764                 sigprocmask(SIG_SETMASK, &sigsaved, NULL);
2765 
2766         vcpu->stat.exit_userspace++;
2767         return rc;
2768 }
2769 
2770 /*
2771  * store status at address
2772  * we use have two special cases:
2773  * KVM_S390_STORE_STATUS_NOADDR: -> 0x1200 on 64 bit
2774  * KVM_S390_STORE_STATUS_PREFIXED: -> prefix
2775  */
2776 int kvm_s390_store_status_unloaded(struct kvm_vcpu *vcpu, unsigned long gpa)
2777 {
2778         unsigned char archmode = 1;
2779         freg_t fprs[NUM_FPRS];
2780         unsigned int px;
2781         u64 clkcomp, cputm;
2782         int rc;
2783 
2784         px = kvm_s390_get_prefix(vcpu);
2785         if (gpa == KVM_S390_STORE_STATUS_NOADDR) {
2786                 if (write_guest_abs(vcpu, 163, &archmode, 1))
2787                         return -EFAULT;
2788                 gpa = 0;
2789         } else if (gpa == KVM_S390_STORE_STATUS_PREFIXED) {
2790                 if (write_guest_real(vcpu, 163, &archmode, 1))
2791                         return -EFAULT;
2792                 gpa = px;
2793         } else
2794                 gpa -= __LC_FPREGS_SAVE_AREA;
2795 
2796         /* manually convert vector registers if necessary */
2797         if (MACHINE_HAS_VX) {
2798                 convert_vx_to_fp(fprs, (__vector128 *) vcpu->run->s.regs.vrs);
2799                 rc = write_guest_abs(vcpu, gpa + __LC_FPREGS_SAVE_AREA,
2800                                      fprs, 128);
2801         } else {
2802                 rc = write_guest_abs(vcpu, gpa + __LC_FPREGS_SAVE_AREA,
2803                                      vcpu->run->s.regs.fprs, 128);
2804         }
2805         rc |= write_guest_abs(vcpu, gpa + __LC_GPREGS_SAVE_AREA,
2806                               vcpu->run->s.regs.gprs, 128);
2807         rc |= write_guest_abs(vcpu, gpa + __LC_PSW_SAVE_AREA,
2808                               &vcpu->arch.sie_block->gpsw, 16);
2809         rc |= write_guest_abs(vcpu, gpa + __LC_PREFIX_SAVE_AREA,
2810                               &px, 4);
2811         rc |= write_guest_abs(vcpu, gpa + __LC_FP_CREG_SAVE_AREA,
2812                               &vcpu->run->s.regs.fpc, 4);
2813         rc |= write_guest_abs(vcpu, gpa + __LC_TOD_PROGREG_SAVE_AREA,
2814                               &vcpu->arch.sie_block->todpr, 4);
2815         cputm = kvm_s390_get_cpu_timer(vcpu);
2816         rc |= write_guest_abs(vcpu, gpa + __LC_CPU_TIMER_SAVE_AREA,
2817                               &cputm, 8);
2818         clkcomp = vcpu->arch.sie_block->ckc >> 8;
2819         rc |= write_guest_abs(vcpu, gpa + __LC_CLOCK_COMP_SAVE_AREA,
2820                               &clkcomp, 8);
2821         rc |= write_guest_abs(vcpu, gpa + __LC_AREGS_SAVE_AREA,
2822                               &vcpu->run->s.regs.acrs, 64);
2823         rc |= write_guest_abs(vcpu, gpa + __LC_CREGS_SAVE_AREA,
2824                               &vcpu->arch.sie_block->gcr, 128);
2825         return rc ? -EFAULT : 0;
2826 }
2827 
2828 int kvm_s390_vcpu_store_status(struct kvm_vcpu *vcpu, unsigned long addr)
2829 {
2830         /*
2831          * The guest FPRS and ACRS are in the host FPRS/ACRS due to the lazy
2832          * copying in vcpu load/put. Lets update our copies before we save
2833          * it into the save area
2834          */
2835         save_fpu_regs();
2836         vcpu->run->s.regs.fpc = current->thread.fpu.fpc;
2837         save_access_regs(vcpu->run->s.regs.acrs);
2838 
2839         return kvm_s390_store_status_unloaded(vcpu, addr);
2840 }
2841 
2842 /*
2843  * store additional status at address
2844  */
2845 int kvm_s390_store_adtl_status_unloaded(struct kvm_vcpu *vcpu,
2846                                         unsigned long gpa)
2847 {
2848         /* Only bits 0-53 are used for address formation */
2849         if (!(gpa & ~0x3ff))
2850                 return 0;
2851 
2852         return write_guest_abs(vcpu, gpa & ~0x3ff,
2853                                (void *)&vcpu->run->s.regs.vrs, 512);
2854 }
2855 
2856 int kvm_s390_vcpu_store_adtl_status(struct kvm_vcpu *vcpu, unsigned long addr)
2857 {
2858         if (!test_kvm_facility(vcpu->kvm, 129))
2859                 return 0;
2860 
2861         /*
2862          * The guest VXRS are in the host VXRs due to the lazy
2863          * copying in vcpu load/put. We can simply call save_fpu_regs()
2864          * to save the current register state because we are in the
2865          * middle of a load/put cycle.
2866          *
2867          * Let's update our copies before we save it into the save area.
2868          */
2869         save_fpu_regs();
2870 
2871         return kvm_s390_store_adtl_status_unloaded(vcpu, addr);
2872 }
2873 
2874 static void __disable_ibs_on_vcpu(struct kvm_vcpu *vcpu)
2875 {
2876         kvm_check_request(KVM_REQ_ENABLE_IBS, vcpu);
2877         kvm_s390_sync_request(KVM_REQ_DISABLE_IBS, vcpu);
2878 }
2879 
2880 static void __disable_ibs_on_all_vcpus(struct kvm *kvm)
2881 {
2882         unsigned int i;
2883         struct kvm_vcpu *vcpu;
2884 
2885         kvm_for_each_vcpu(i, vcpu, kvm) {
2886                 __disable_ibs_on_vcpu(vcpu);
2887         }
2888 }
2889 
2890 static void __enable_ibs_on_vcpu(struct kvm_vcpu *vcpu)
2891 {
2892         if (!sclp.has_ibs)
2893                 return;
2894         kvm_check_request(KVM_REQ_DISABLE_IBS, vcpu);
2895         kvm_s390_sync_request(KVM_REQ_ENABLE_IBS, vcpu);
2896 }
2897 
2898 void kvm_s390_vcpu_start(struct kvm_vcpu *vcpu)
2899 {
2900         int i, online_vcpus, started_vcpus = 0;
2901 
2902         if (!is_vcpu_stopped(vcpu))
2903                 return;
2904 
2905         trace_kvm_s390_vcpu_start_stop(vcpu->vcpu_id, 1);
2906         /* Only one cpu at a time may enter/leave the STOPPED state. */
2907         spin_lock(&vcpu->kvm->arch.start_stop_lock);
2908         online_vcpus = atomic_read(&vcpu->kvm->online_vcpus);
2909 
2910         for (i = 0; i < online_vcpus; i++) {
2911                 if (!is_vcpu_stopped(vcpu->kvm->vcpus[i]))
2912                         started_vcpus++;
2913         }
2914 
2915         if (started_vcpus == 0) {
2916                 /* we're the only active VCPU -> speed it up */
2917                 __enable_ibs_on_vcpu(vcpu);
2918         } else if (started_vcpus == 1) {
2919                 /*
2920                  * As we are starting a second VCPU, we have to disable
2921                  * the IBS facility on all VCPUs to remove potentially
2922                  * oustanding ENABLE requests.
2923                  */
2924                 __disable_ibs_on_all_vcpus(vcpu->kvm);
2925         }
2926 
2927         atomic_andnot(CPUSTAT_STOPPED, &vcpu->arch.sie_block->cpuflags);
2928         /*
2929          * Another VCPU might have used IBS while we were offline.
2930          * Let's play safe and flush the VCPU at startup.
2931          */
2932         kvm_make_request(KVM_REQ_TLB_FLUSH, vcpu);
2933         spin_unlock(&vcpu->kvm->arch.start_stop_lock);
2934         return;
2935 }
2936 
2937 void kvm_s390_vcpu_stop(struct kvm_vcpu *vcpu)
2938 {
2939         int i, online_vcpus, started_vcpus = 0;
2940         struct kvm_vcpu *started_vcpu = NULL;
2941 
2942         if (is_vcpu_stopped(vcpu))
2943                 return;
2944 
2945         trace_kvm_s390_vcpu_start_stop(vcpu->vcpu_id, 0);
2946         /* Only one cpu at a time may enter/leave the STOPPED state. */
2947         spin_lock(&vcpu->kvm->arch.start_stop_lock);
2948         online_vcpus = atomic_read(&vcpu->kvm->online_vcpus);
2949 
2950         /* SIGP STOP and SIGP STOP AND STORE STATUS has been fully processed */
2951         kvm_s390_clear_stop_irq(vcpu);
2952 
2953         atomic_or(CPUSTAT_STOPPED, &vcpu->arch.sie_block->cpuflags);
2954         __disable_ibs_on_vcpu(vcpu);
2955 
2956         for (i = 0; i < online_vcpus; i++) {
2957                 if (!is_vcpu_stopped(vcpu->kvm->vcpus[i])) {
2958                         started_vcpus++;
2959                         started_vcpu = vcpu->kvm->vcpus[i];
2960                 }
2961         }
2962 
2963         if (started_vcpus == 1) {
2964                 /*
2965                  * As we only have one VCPU left, we want to enable the
2966                  * IBS facility for that VCPU to speed it up.
2967                  */
2968                 __enable_ibs_on_vcpu(started_vcpu);
2969         }
2970 
2971         spin_unlock(&vcpu->kvm->arch.start_stop_lock);
2972         return;
2973 }
2974 
2975 static int kvm_vcpu_ioctl_enable_cap(struct kvm_vcpu *vcpu,
2976                                      struct kvm_enable_cap *cap)
2977 {
2978         int r;
2979 
2980         if (cap->flags)
2981                 return -EINVAL;
2982 
2983         switch (cap->cap) {
2984         case KVM_CAP_S390_CSS_SUPPORT:
2985                 if (!vcpu->kvm->arch.css_support) {
2986                         vcpu->kvm->arch.css_support = 1;
2987                         VM_EVENT(vcpu->kvm, 3, "%s", "ENABLE: CSS support");
2988                         trace_kvm_s390_enable_css(vcpu->kvm);
2989                 }
2990                 r = 0;
2991                 break;
2992         default:
2993                 r = -EINVAL;
2994                 break;
2995         }
2996         return r;
2997 }
2998 
2999 static long kvm_s390_guest_mem_op(struct kvm_vcpu *vcpu,
3000                                   struct kvm_s390_mem_op *mop)
3001 {
3002         void __user *uaddr = (void __user *)mop->buf;
3003         void *tmpbuf = NULL;
3004         int r, srcu_idx;
3005         const u64 supported_flags = KVM_S390_MEMOP_F_INJECT_EXCEPTION
3006                                     | KVM_S390_MEMOP_F_CHECK_ONLY;
3007 
3008         if (mop->flags & ~supported_flags)
3009                 return -EINVAL;
3010 
3011         if (mop->size > MEM_OP_MAX_SIZE)
3012                 return -E2BIG;
3013 
3014         if (!(mop->flags & KVM_S390_MEMOP_F_CHECK_ONLY)) {
3015                 tmpbuf = vmalloc(mop->size);
3016                 if (!tmpbuf)
3017                         return -ENOMEM;
3018         }
3019 
3020         srcu_idx = srcu_read_lock(&vcpu->kvm->srcu);
3021 
3022         switch (mop->op) {
3023         case KVM_S390_MEMOP_LOGICAL_READ:
3024                 if (mop->flags & KVM_S390_MEMOP_F_CHECK_ONLY) {
3025                         r = check_gva_range(vcpu, mop->gaddr, mop->ar,
3026                                             mop->size, GACC_FETCH);
3027                         break;
3028                 }
3029                 r = read_guest(vcpu, mop->gaddr, mop->ar, tmpbuf, mop->size);
3030                 if (r == 0) {
3031                         if (copy_to_user(uaddr, tmpbuf, mop->size))
3032                                 r = -EFAULT;
3033                 }
3034                 break;
3035         case KVM_S390_MEMOP_LOGICAL_WRITE:
3036                 if (mop->flags & KVM_S390_MEMOP_F_CHECK_ONLY) {
3037                         r = check_gva_range(vcpu, mop->gaddr, mop->ar,
3038                                             mop->size, GACC_STORE);
3039                         break;
3040                 }
3041                 if (copy_from_user(tmpbuf, uaddr, mop->size)) {
3042                         r = -EFAULT;
3043                         break;
3044                 }
3045                 r = write_guest(vcpu, mop->gaddr, mop->ar, tmpbuf, mop->size);
3046                 break;
3047         default:
3048                 r = -EINVAL;
3049         }
3050 
3051         srcu_read_unlock(&vcpu->kvm->srcu, srcu_idx);
3052 
3053         if (r > 0 && (mop->flags & KVM_S390_MEMOP_F_INJECT_EXCEPTION) != 0)
3054                 kvm_s390_inject_prog_irq(vcpu, &vcpu->arch.pgm);
3055 
3056         vfree(tmpbuf);
3057         return r;
3058 }
3059 
3060 long kvm_arch_vcpu_ioctl(struct file *filp,
3061                          unsigned int ioctl, unsigned long arg)
3062 {
3063         struct kvm_vcpu *vcpu = filp->private_data;
3064         void __user *argp = (void __user *)arg;
3065         int idx;
3066         long r;
3067 
3068         switch (ioctl) {
3069         case KVM_S390_IRQ: {
3070                 struct kvm_s390_irq s390irq;
3071 
3072                 r = -EFAULT;
3073                 if (copy_from_user(&s390irq, argp, sizeof(s390irq)))
3074                         break;
3075                 r = kvm_s390_inject_vcpu(vcpu, &s390irq);
3076                 break;
3077         }
3078         case KVM_S390_INTERRUPT: {
3079                 struct kvm_s390_interrupt s390int;
3080                 struct kvm_s390_irq s390irq;
3081 
3082                 r = -EFAULT;
3083                 if (copy_from_user(&s390int, argp, sizeof(s390int)))
3084                         break;
3085                 if (s390int_to_s390irq(&s390int, &s390irq))
3086                         return -EINVAL;
3087                 r = kvm_s390_inject_vcpu(vcpu, &s390irq);
3088                 break;
3089         }
3090         case KVM_S390_STORE_STATUS:
3091                 idx = srcu_read_lock(&vcpu->kvm->srcu);
3092                 r = kvm_s390_vcpu_store_status(vcpu, arg);
3093                 srcu_read_unlock(&vcpu->kvm->srcu, idx);
3094                 break;
3095         case KVM_S390_SET_INITIAL_PSW: {
3096                 psw_t psw;
3097 
3098                 r = -EFAULT;
3099                 if (copy_from_user(&psw, argp, sizeof(psw)))
3100                         break;
3101                 r = kvm_arch_vcpu_ioctl_set_initial_psw(vcpu, psw);
3102                 break;
3103         }
3104         case KVM_S390_INITIAL_RESET:
3105                 r = kvm_arch_vcpu_ioctl_initial_reset(vcpu);
3106                 break;
3107         case KVM_SET_ONE_REG:
3108         case KVM_GET_ONE_REG: {
3109                 struct kvm_one_reg reg;
3110                 r = -EFAULT;
3111                 if (copy_from_user(&reg, argp, sizeof(reg)))
3112                         break;
3113                 if (ioctl == KVM_SET_ONE_REG)
3114                         r = kvm_arch_vcpu_ioctl_set_one_reg(vcpu, &reg);
3115                 else
3116                         r = kvm_arch_vcpu_ioctl_get_one_reg(vcpu, &reg);
3117                 break;
3118         }
3119 #ifdef CONFIG_KVM_S390_UCONTROL
3120         case KVM_S390_UCAS_MAP: {
3121                 struct kvm_s390_ucas_mapping ucasmap;
3122 
3123                 if (copy_from_user(&ucasmap, argp, sizeof(ucasmap))) {
3124                         r = -EFAULT;
3125                         break;
3126                 }
3127 
3128                 if (!kvm_is_ucontrol(vcpu->kvm)) {
3129                         r = -EINVAL;
3130                         break;
3131                 }
3132 
3133                 r = gmap_map_segment(vcpu->arch.gmap, ucasmap.user_addr,
3134                                      ucasmap.vcpu_addr, ucasmap.length);
3135                 break;
3136         }
3137         case KVM_S390_UCAS_UNMAP: {
3138                 struct kvm_s390_ucas_mapping ucasmap;
3139 
3140                 if (copy_from_user(&ucasmap, argp, sizeof(ucasmap))) {
3141                         r = -EFAULT;
3142                         break;
3143                 }
3144 
3145                 if (!kvm_is_ucontrol(vcpu->kvm)) {
3146                         r = -EINVAL;
3147                         break;
3148                 }
3149 
3150                 r = gmap_unmap_segment(vcpu->arch.gmap, ucasmap.vcpu_addr,
3151                         ucasmap.length);
3152                 break;
3153         }
3154 #endif
3155         case KVM_S390_VCPU_FAULT: {
3156                 r = gmap_fault(vcpu->arch.gmap, arg, 0);
3157                 break;
3158         }
3159         case KVM_ENABLE_CAP:
3160         {
3161                 struct kvm_enable_cap cap;
3162                 r = -EFAULT;
3163                 if (copy_from_user(&cap, argp, sizeof(cap)))
3164                         break;
3165                 r = kvm_vcpu_ioctl_enable_cap(vcpu, &cap);
3166                 break;
3167         }
3168         case KVM_S390_MEM_OP: {
3169                 struct kvm_s390_mem_op mem_op;
3170 
3171                 if (copy_from_user(&mem_op, argp, sizeof(mem_op)) == 0)
3172                         r = kvm_s390_guest_mem_op(vcpu, &mem_op);
3173                 else
3174                         r = -EFAULT;
3175                 break;
3176         }
3177         case KVM_S390_SET_IRQ_STATE: {
3178                 struct kvm_s390_irq_state irq_state;
3179 
3180                 r = -EFAULT;
3181                 if (copy_from_user(&irq_state, argp, sizeof(irq_state)))
3182                         break;
3183                 if (irq_state.len > VCPU_IRQS_MAX_BUF ||
3184                     irq_state.len == 0 ||
3185                     irq_state.len % sizeof(struct kvm_s390_irq) > 0) {
3186                         r = -EINVAL;
3187                         break;
3188                 }
3189                 r = kvm_s390_set_irq_state(vcpu,
3190                                            (void __user *) irq_state.buf,
3191                                            irq_state.len);
3192                 break;
3193         }
3194         case KVM_S390_GET_IRQ_STATE: {
3195                 struct kvm_s390_irq_state irq_state;
3196 
3197                 r = -EFAULT;
3198                 if (copy_from_user(&irq_state, argp, sizeof(irq_state)))
3199                         break;
3200                 if (irq_state.len == 0) {
3201                         r = -EINVAL;
3202                         break;
3203                 }
3204                 r = kvm_s390_get_irq_state(vcpu,
3205                                            (__u8 __user *)  irq_state.buf,
3206                                            irq_state.len);
3207                 break;
3208         }
3209         default:
3210                 r = -ENOTTY;
3211         }
3212         return r;
3213 }
3214 
3215 int kvm_arch_vcpu_fault(struct kvm_vcpu *vcpu, struct vm_fault *vmf)
3216 {
3217 #ifdef CONFIG_KVM_S390_UCONTROL
3218         if ((vmf->pgoff == KVM_S390_SIE_PAGE_OFFSET)
3219                  && (kvm_is_ucontrol(vcpu->kvm))) {
3220                 vmf->page = virt_to_page(vcpu->arch.sie_block);
3221                 get_page(vmf->page);
3222                 return 0;
3223         }
3224 #endif
3225         return VM_FAULT_SIGBUS;
3226 }
3227 
3228 int kvm_arch_create_memslot(struct kvm *kvm, struct kvm_memory_slot *slot,
3229                             unsigned long npages)
3230 {
3231         return 0;
3232 }
3233 
3234 /* Section: memory related */
3235 int kvm_arch_prepare_memory_region(struct kvm *kvm,
3236                                    struct kvm_memory_slot *memslot,
3237                                    const struct kvm_userspace_memory_region *mem,
3238                                    enum kvm_mr_change change)
3239 {
3240         /* A few sanity checks. We can have memory slots which have to be
3241            located/ended at a segment boundary (1MB). The memory in userland is
3242            ok to be fragmented into various different vmas. It is okay to mmap()
3243            and munmap() stuff in this slot after doing this call at any time */
3244 
3245         if (mem->userspace_addr & 0xffffful)
3246                 return -EINVAL;
3247 
3248         if (mem->memory_size & 0xffffful)
3249                 return -EINVAL;
3250 
3251         if (mem->guest_phys_addr + mem->memory_size > kvm->arch.mem_limit)
3252                 return -EINVAL;
3253 
3254         return 0;
3255 }
3256 
3257 void kvm_arch_commit_memory_region(struct kvm *kvm,
3258                                 const struct kvm_userspace_memory_region *mem,
3259                                 const struct kvm_memory_slot *old,
3260                                 const struct kvm_memory_slot *new,
3261                                 enum kvm_mr_change change)
3262 {
3263         int rc;
3264 
3265         /* If the basics of the memslot do not change, we do not want
3266          * to update the gmap. Every update causes several unnecessary
3267          * segment translation exceptions. This is usually handled just
3268          * fine by the normal fault handler + gmap, but it will also
3269          * cause faults on the prefix page of running guest CPUs.
3270          */
3271         if (old->userspace_addr == mem->userspace_addr &&
3272             old->base_gfn * PAGE_SIZE == mem->guest_phys_addr &&
3273             old->npages * PAGE_SIZE == mem->memory_size)
3274                 return;
3275 
3276         rc = gmap_map_segment(kvm->arch.gmap, mem->userspace_addr,
3277                 mem->guest_phys_addr, mem->memory_size);
3278         if (rc)
3279                 pr_warn("failed to commit memory region\n");
3280         return;
3281 }
3282 
3283 static inline unsigned long nonhyp_mask(int i)
3284 {
3285         unsigned int nonhyp_fai = (sclp.hmfai << i * 2) >> 30;
3286 
3287         return 0x0000ffffffffffffUL >> (nonhyp_fai << 4);
3288 }
3289 
3290 void kvm_arch_vcpu_block_finish(struct kvm_vcpu *vcpu)
3291 {
3292         vcpu->valid_wakeup = false;
3293 }
3294 
3295 static int __init kvm_s390_init(void)
3296 {
3297         int i;
3298 
3299         if (!sclp.has_sief2) {
3300                 pr_info("SIE not available\n");
3301                 return -ENODEV;
3302         }
3303 
3304         for (i = 0; i < 16; i++)
3305                 kvm_s390_fac_list_mask[i] |=
3306                         S390_lowcore.stfle_fac_list[i] & nonhyp_mask(i);
3307 
3308         return kvm_init(NULL, sizeof(struct kvm_vcpu), 0, THIS_MODULE);
3309 }
3310 
3311 static void __exit kvm_s390_exit(void)
3312 {
3313         kvm_exit();
3314 }
3315 
3316 module_init(kvm_s390_init);
3317 module_exit(kvm_s390_exit);
3318 
3319 /*
3320  * Enable autoloading of the kvm module.
3321  * Note that we add the module alias here instead of virt/kvm/kvm_main.c
3322  * since x86 takes a different approach.
3323  */
3324 #include <linux/miscdevice.h>
3325 MODULE_ALIAS_MISCDEV(KVM_MINOR);
3326 MODULE_ALIAS("devname:kvm");
3327 

~ [ 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