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