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