2 * hosting zSeries kernel virtual machines
4 * Copyright IBM Corp. 2008, 2009
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.
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>
17 #include <linux/compiler.h>
18 #include <linux/err.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>
34 #include <asm/pgtable.h>
37 #include <asm/switch_to.h>
40 #include <asm/cpacf.h>
45 #define KMSG_COMPONENT "kvm-s390"
47 #define pr_fmt(fmt) KMSG_COMPONENT ": " fmt
49 #define CREATE_TRACE_POINTS
51 #include "trace-s390.h"
53 #define MEM_OP_MAX_SIZE 65536 /* Maximum transfer size for KVM_S390_MEM_OP */
55 #define VCPU_IRQS_MAX_BUF (sizeof(struct kvm_s390_irq) * \
56 (KVM_MAX_VCPUS + LOCAL_IRQS))
58 #define VCPU_STAT(x) offsetof(struct kvm_vcpu, stat.x), KVM_STAT_VCPU
60 struct kvm_stats_debugfs_item debugfs_entries[] = {
61 { "userspace_handled", VCPU_STAT(exit_userspace) },
62 { "exit_null", VCPU_STAT(exit_null) },
63 { "exit_validity", VCPU_STAT(exit_validity) },
64 { "exit_stop_request", VCPU_STAT(exit_stop_request) },
65 { "exit_external_request", VCPU_STAT(exit_external_request) },
66 { "exit_external_interrupt", VCPU_STAT(exit_external_interrupt) },
67 { "exit_instruction", VCPU_STAT(exit_instruction) },
68 { "exit_program_interruption", VCPU_STAT(exit_program_interruption) },
69 { "exit_instr_and_program_int", VCPU_STAT(exit_instr_and_program) },
70 { "exit_operation_exception", VCPU_STAT(exit_operation_exception) },
71 { "halt_successful_poll", VCPU_STAT(halt_successful_poll) },
72 { "halt_attempted_poll", VCPU_STAT(halt_attempted_poll) },
73 { "halt_poll_invalid", VCPU_STAT(halt_poll_invalid) },
74 { "halt_wakeup", VCPU_STAT(halt_wakeup) },
75 { "instruction_lctlg", VCPU_STAT(instruction_lctlg) },
76 { "instruction_lctl", VCPU_STAT(instruction_lctl) },
77 { "instruction_stctl", VCPU_STAT(instruction_stctl) },
78 { "instruction_stctg", VCPU_STAT(instruction_stctg) },
79 { "deliver_emergency_signal", VCPU_STAT(deliver_emergency_signal) },
80 { "deliver_external_call", VCPU_STAT(deliver_external_call) },
81 { "deliver_service_signal", VCPU_STAT(deliver_service_signal) },
82 { "deliver_virtio_interrupt", VCPU_STAT(deliver_virtio_interrupt) },
83 { "deliver_stop_signal", VCPU_STAT(deliver_stop_signal) },
84 { "deliver_prefix_signal", VCPU_STAT(deliver_prefix_signal) },
85 { "deliver_restart_signal", VCPU_STAT(deliver_restart_signal) },
86 { "deliver_program_interruption", VCPU_STAT(deliver_program_int) },
87 { "exit_wait_state", VCPU_STAT(exit_wait_state) },
88 { "instruction_pfmf", VCPU_STAT(instruction_pfmf) },
89 { "instruction_stidp", VCPU_STAT(instruction_stidp) },
90 { "instruction_spx", VCPU_STAT(instruction_spx) },
91 { "instruction_stpx", VCPU_STAT(instruction_stpx) },
92 { "instruction_stap", VCPU_STAT(instruction_stap) },
93 { "instruction_storage_key", VCPU_STAT(instruction_storage_key) },
94 { "instruction_ipte_interlock", VCPU_STAT(instruction_ipte_interlock) },
95 { "instruction_stsch", VCPU_STAT(instruction_stsch) },
96 { "instruction_chsc", VCPU_STAT(instruction_chsc) },
97 { "instruction_essa", VCPU_STAT(instruction_essa) },
98 { "instruction_stsi", VCPU_STAT(instruction_stsi) },
99 { "instruction_stfl", VCPU_STAT(instruction_stfl) },
100 { "instruction_tprot", VCPU_STAT(instruction_tprot) },
101 { "instruction_sthyi", VCPU_STAT(instruction_sthyi) },
102 { "instruction_sie", VCPU_STAT(instruction_sie) },
103 { "instruction_sigp_sense", VCPU_STAT(instruction_sigp_sense) },
104 { "instruction_sigp_sense_running", VCPU_STAT(instruction_sigp_sense_running) },
105 { "instruction_sigp_external_call", VCPU_STAT(instruction_sigp_external_call) },
106 { "instruction_sigp_emergency", VCPU_STAT(instruction_sigp_emergency) },
107 { "instruction_sigp_cond_emergency", VCPU_STAT(instruction_sigp_cond_emergency) },
108 { "instruction_sigp_start", VCPU_STAT(instruction_sigp_start) },
109 { "instruction_sigp_stop", VCPU_STAT(instruction_sigp_stop) },
110 { "instruction_sigp_stop_store_status", VCPU_STAT(instruction_sigp_stop_store_status) },
111 { "instruction_sigp_store_status", VCPU_STAT(instruction_sigp_store_status) },
112 { "instruction_sigp_store_adtl_status", VCPU_STAT(instruction_sigp_store_adtl_status) },
113 { "instruction_sigp_set_arch", VCPU_STAT(instruction_sigp_arch) },
114 { "instruction_sigp_set_prefix", VCPU_STAT(instruction_sigp_prefix) },
115 { "instruction_sigp_restart", VCPU_STAT(instruction_sigp_restart) },
116 { "instruction_sigp_cpu_reset", VCPU_STAT(instruction_sigp_cpu_reset) },
117 { "instruction_sigp_init_cpu_reset", VCPU_STAT(instruction_sigp_init_cpu_reset) },
118 { "instruction_sigp_unknown", VCPU_STAT(instruction_sigp_unknown) },
119 { "diagnose_10", VCPU_STAT(diagnose_10) },
120 { "diagnose_44", VCPU_STAT(diagnose_44) },
121 { "diagnose_9c", VCPU_STAT(diagnose_9c) },
122 { "diagnose_258", VCPU_STAT(diagnose_258) },
123 { "diagnose_308", VCPU_STAT(diagnose_308) },
124 { "diagnose_500", VCPU_STAT(diagnose_500) },
128 /* upper facilities limit for kvm */
129 unsigned long kvm_s390_fac_list_mask[16] = {
130 0xffe6000000000000UL,
131 0x005e000000000000UL,
134 unsigned long kvm_s390_fac_list_mask_size(void)
136 BUILD_BUG_ON(ARRAY_SIZE(kvm_s390_fac_list_mask) > S390_ARCH_FAC_MASK_SIZE_U64);
137 return ARRAY_SIZE(kvm_s390_fac_list_mask);
140 /* available cpu features supported by kvm */
141 static DECLARE_BITMAP(kvm_s390_available_cpu_feat, KVM_S390_VM_CPU_FEAT_NR_BITS);
142 /* available subfunctions indicated via query / "test bit" */
143 static struct kvm_s390_vm_cpu_subfunc kvm_s390_available_subfunc;
145 static struct gmap_notifier gmap_notifier;
146 static struct gmap_notifier vsie_gmap_notifier;
147 debug_info_t *kvm_s390_dbf;
149 /* Section: not file related */
150 int kvm_arch_hardware_enable(void)
152 /* every s390 is virtualization enabled ;-) */
156 static void kvm_gmap_notifier(struct gmap *gmap, unsigned long start,
160 * This callback is executed during stop_machine(). All CPUs are therefore
161 * temporarily stopped. In order not to change guest behavior, we have to
162 * disable preemption whenever we touch the epoch of kvm and the VCPUs,
163 * so a CPU won't be stopped while calculating with the epoch.
165 static int kvm_clock_sync(struct notifier_block *notifier, unsigned long val,
169 struct kvm_vcpu *vcpu;
171 unsigned long long *delta = v;
173 list_for_each_entry(kvm, &vm_list, vm_list) {
174 kvm->arch.epoch -= *delta;
175 kvm_for_each_vcpu(i, vcpu, kvm) {
176 vcpu->arch.sie_block->epoch -= *delta;
177 if (vcpu->arch.cputm_enabled)
178 vcpu->arch.cputm_start += *delta;
179 if (vcpu->arch.vsie_block)
180 vcpu->arch.vsie_block->epoch -= *delta;
186 static struct notifier_block kvm_clock_notifier = {
187 .notifier_call = kvm_clock_sync,
190 int kvm_arch_hardware_setup(void)
192 gmap_notifier.notifier_call = kvm_gmap_notifier;
193 gmap_register_pte_notifier(&gmap_notifier);
194 vsie_gmap_notifier.notifier_call = kvm_s390_vsie_gmap_notifier;
195 gmap_register_pte_notifier(&vsie_gmap_notifier);
196 atomic_notifier_chain_register(&s390_epoch_delta_notifier,
197 &kvm_clock_notifier);
201 void kvm_arch_hardware_unsetup(void)
203 gmap_unregister_pte_notifier(&gmap_notifier);
204 gmap_unregister_pte_notifier(&vsie_gmap_notifier);
205 atomic_notifier_chain_unregister(&s390_epoch_delta_notifier,
206 &kvm_clock_notifier);
209 static void allow_cpu_feat(unsigned long nr)
211 set_bit_inv(nr, kvm_s390_available_cpu_feat);
214 static inline int plo_test_bit(unsigned char nr)
216 register unsigned long r0 asm("0") = (unsigned long) nr | 0x100;
217 int cc = 3; /* subfunction not available */
220 /* Parameter registers are ignored for "test bit" */
230 static void kvm_s390_cpu_feat_init(void)
234 for (i = 0; i < 256; ++i) {
236 kvm_s390_available_subfunc.plo[i >> 3] |= 0x80 >> (i & 7);
239 if (test_facility(28)) /* TOD-clock steering */
240 etr_ptff(kvm_s390_available_subfunc.ptff, ETR_PTFF_QAF);
242 if (test_facility(17)) { /* MSA */
243 __cpacf_query(CPACF_KMAC, kvm_s390_available_subfunc.kmac);
244 __cpacf_query(CPACF_KMC, kvm_s390_available_subfunc.kmc);
245 __cpacf_query(CPACF_KM, kvm_s390_available_subfunc.km);
246 __cpacf_query(CPACF_KIMD, kvm_s390_available_subfunc.kimd);
247 __cpacf_query(CPACF_KLMD, kvm_s390_available_subfunc.klmd);
249 if (test_facility(76)) /* MSA3 */
250 __cpacf_query(CPACF_PCKMO, kvm_s390_available_subfunc.pckmo);
251 if (test_facility(77)) { /* MSA4 */
252 __cpacf_query(CPACF_KMCTR, kvm_s390_available_subfunc.kmctr);
253 __cpacf_query(CPACF_KMF, kvm_s390_available_subfunc.kmf);
254 __cpacf_query(CPACF_KMO, kvm_s390_available_subfunc.kmo);
255 __cpacf_query(CPACF_PCC, kvm_s390_available_subfunc.pcc);
257 if (test_facility(57)) /* MSA5 */
258 __cpacf_query(CPACF_PPNO, kvm_s390_available_subfunc.ppno);
260 if (MACHINE_HAS_ESOP)
261 allow_cpu_feat(KVM_S390_VM_CPU_FEAT_ESOP);
263 * We need SIE support, ESOP (PROT_READ protection for gmap_shadow),
264 * 64bit SCAO (SCA passthrough) and IDTE (for gmap_shadow unshadowing).
266 if (!sclp.has_sief2 || !MACHINE_HAS_ESOP || !sclp.has_64bscao ||
269 allow_cpu_feat(KVM_S390_VM_CPU_FEAT_SIEF2);
270 if (sclp.has_64bscao)
271 allow_cpu_feat(KVM_S390_VM_CPU_FEAT_64BSCAO);
273 allow_cpu_feat(KVM_S390_VM_CPU_FEAT_SIIF);
275 allow_cpu_feat(KVM_S390_VM_CPU_FEAT_GPERE);
277 allow_cpu_feat(KVM_S390_VM_CPU_FEAT_GSLS);
279 allow_cpu_feat(KVM_S390_VM_CPU_FEAT_IB);
281 allow_cpu_feat(KVM_S390_VM_CPU_FEAT_CEI);
283 allow_cpu_feat(KVM_S390_VM_CPU_FEAT_IBS);
286 int kvm_arch_init(void *opaque)
288 kvm_s390_dbf = debug_register("kvm-trace", 32, 1, 7 * sizeof(long));
292 if (debug_register_view(kvm_s390_dbf, &debug_sprintf_view)) {
293 debug_unregister(kvm_s390_dbf);
297 kvm_s390_cpu_feat_init();
299 /* Register floating interrupt controller interface. */
300 return kvm_register_device_ops(&kvm_flic_ops, KVM_DEV_TYPE_FLIC);
303 void kvm_arch_exit(void)
305 debug_unregister(kvm_s390_dbf);
308 /* Section: device related */
309 long kvm_arch_dev_ioctl(struct file *filp,
310 unsigned int ioctl, unsigned long arg)
312 if (ioctl == KVM_S390_ENABLE_SIE)
313 return s390_enable_sie();
317 int kvm_vm_ioctl_check_extension(struct kvm *kvm, long ext)
322 case KVM_CAP_S390_PSW:
323 case KVM_CAP_S390_GMAP:
324 case KVM_CAP_SYNC_MMU:
325 #ifdef CONFIG_KVM_S390_UCONTROL
326 case KVM_CAP_S390_UCONTROL:
328 case KVM_CAP_ASYNC_PF:
329 case KVM_CAP_SYNC_REGS:
330 case KVM_CAP_ONE_REG:
331 case KVM_CAP_ENABLE_CAP:
332 case KVM_CAP_S390_CSS_SUPPORT:
333 case KVM_CAP_IOEVENTFD:
334 case KVM_CAP_DEVICE_CTRL:
335 case KVM_CAP_ENABLE_CAP_VM:
336 case KVM_CAP_S390_IRQCHIP:
337 case KVM_CAP_VM_ATTRIBUTES:
338 case KVM_CAP_MP_STATE:
339 case KVM_CAP_S390_INJECT_IRQ:
340 case KVM_CAP_S390_USER_SIGP:
341 case KVM_CAP_S390_USER_STSI:
342 case KVM_CAP_S390_SKEYS:
343 case KVM_CAP_S390_IRQ_STATE:
346 case KVM_CAP_S390_MEM_OP:
349 case KVM_CAP_NR_VCPUS:
350 case KVM_CAP_MAX_VCPUS:
351 r = KVM_S390_BSCA_CPU_SLOTS;
352 if (sclp.has_esca && sclp.has_64bscao)
353 r = KVM_S390_ESCA_CPU_SLOTS;
355 case KVM_CAP_NR_MEMSLOTS:
356 r = KVM_USER_MEM_SLOTS;
358 case KVM_CAP_S390_COW:
359 r = MACHINE_HAS_ESOP;
361 case KVM_CAP_S390_VECTOR_REGISTERS:
364 case KVM_CAP_S390_RI:
365 r = test_facility(64);
373 static void kvm_s390_sync_dirty_log(struct kvm *kvm,
374 struct kvm_memory_slot *memslot)
376 gfn_t cur_gfn, last_gfn;
377 unsigned long address;
378 struct gmap *gmap = kvm->arch.gmap;
380 /* Loop over all guest pages */
381 last_gfn = memslot->base_gfn + memslot->npages;
382 for (cur_gfn = memslot->base_gfn; cur_gfn <= last_gfn; cur_gfn++) {
383 address = gfn_to_hva_memslot(memslot, cur_gfn);
385 if (test_and_clear_guest_dirty(gmap->mm, address))
386 mark_page_dirty(kvm, cur_gfn);
387 if (fatal_signal_pending(current))
393 /* Section: vm related */
394 static void sca_del_vcpu(struct kvm_vcpu *vcpu);
397 * Get (and clear) the dirty memory log for a memory slot.
399 int kvm_vm_ioctl_get_dirty_log(struct kvm *kvm,
400 struct kvm_dirty_log *log)
404 struct kvm_memslots *slots;
405 struct kvm_memory_slot *memslot;
408 mutex_lock(&kvm->slots_lock);
411 if (log->slot >= KVM_USER_MEM_SLOTS)
414 slots = kvm_memslots(kvm);
415 memslot = id_to_memslot(slots, log->slot);
417 if (!memslot->dirty_bitmap)
420 kvm_s390_sync_dirty_log(kvm, memslot);
421 r = kvm_get_dirty_log(kvm, log, &is_dirty);
425 /* Clear the dirty log */
427 n = kvm_dirty_bitmap_bytes(memslot);
428 memset(memslot->dirty_bitmap, 0, n);
432 mutex_unlock(&kvm->slots_lock);
436 static int kvm_vm_ioctl_enable_cap(struct kvm *kvm, struct kvm_enable_cap *cap)
444 case KVM_CAP_S390_IRQCHIP:
445 VM_EVENT(kvm, 3, "%s", "ENABLE: CAP_S390_IRQCHIP");
446 kvm->arch.use_irqchip = 1;
449 case KVM_CAP_S390_USER_SIGP:
450 VM_EVENT(kvm, 3, "%s", "ENABLE: CAP_S390_USER_SIGP");
451 kvm->arch.user_sigp = 1;
454 case KVM_CAP_S390_VECTOR_REGISTERS:
455 mutex_lock(&kvm->lock);
456 if (kvm->created_vcpus) {
458 } else if (MACHINE_HAS_VX) {
459 set_kvm_facility(kvm->arch.model.fac_mask, 129);
460 set_kvm_facility(kvm->arch.model.fac_list, 129);
464 mutex_unlock(&kvm->lock);
465 VM_EVENT(kvm, 3, "ENABLE: CAP_S390_VECTOR_REGISTERS %s",
466 r ? "(not available)" : "(success)");
468 case KVM_CAP_S390_RI:
470 mutex_lock(&kvm->lock);
471 if (kvm->created_vcpus) {
473 } else if (test_facility(64)) {
474 set_kvm_facility(kvm->arch.model.fac_mask, 64);
475 set_kvm_facility(kvm->arch.model.fac_list, 64);
478 mutex_unlock(&kvm->lock);
479 VM_EVENT(kvm, 3, "ENABLE: CAP_S390_RI %s",
480 r ? "(not available)" : "(success)");
482 case KVM_CAP_S390_USER_STSI:
483 VM_EVENT(kvm, 3, "%s", "ENABLE: CAP_S390_USER_STSI");
484 kvm->arch.user_stsi = 1;
494 static int kvm_s390_get_mem_control(struct kvm *kvm, struct kvm_device_attr *attr)
498 switch (attr->attr) {
499 case KVM_S390_VM_MEM_LIMIT_SIZE:
501 VM_EVENT(kvm, 3, "QUERY: max guest memory: %lu bytes",
502 kvm->arch.mem_limit);
503 if (put_user(kvm->arch.mem_limit, (u64 __user *)attr->addr))
513 static int kvm_s390_set_mem_control(struct kvm *kvm, struct kvm_device_attr *attr)
517 switch (attr->attr) {
518 case KVM_S390_VM_MEM_ENABLE_CMMA:
524 VM_EVENT(kvm, 3, "%s", "ENABLE: CMMA support");
525 mutex_lock(&kvm->lock);
526 if (!kvm->created_vcpus) {
527 kvm->arch.use_cmma = 1;
530 mutex_unlock(&kvm->lock);
532 case KVM_S390_VM_MEM_CLR_CMMA:
537 if (!kvm->arch.use_cmma)
540 VM_EVENT(kvm, 3, "%s", "RESET: CMMA states");
541 mutex_lock(&kvm->lock);
542 idx = srcu_read_lock(&kvm->srcu);
543 s390_reset_cmma(kvm->arch.gmap->mm);
544 srcu_read_unlock(&kvm->srcu, idx);
545 mutex_unlock(&kvm->lock);
548 case KVM_S390_VM_MEM_LIMIT_SIZE: {
549 unsigned long new_limit;
551 if (kvm_is_ucontrol(kvm))
554 if (get_user(new_limit, (u64 __user *)attr->addr))
557 if (kvm->arch.mem_limit != KVM_S390_NO_MEM_LIMIT &&
558 new_limit > kvm->arch.mem_limit)
564 /* gmap_create takes last usable address */
565 if (new_limit != KVM_S390_NO_MEM_LIMIT)
569 mutex_lock(&kvm->lock);
570 if (!kvm->created_vcpus) {
571 /* gmap_create will round the limit up */
572 struct gmap *new = gmap_create(current->mm, new_limit);
577 gmap_remove(kvm->arch.gmap);
579 kvm->arch.gmap = new;
583 mutex_unlock(&kvm->lock);
584 VM_EVENT(kvm, 3, "SET: max guest address: %lu", new_limit);
585 VM_EVENT(kvm, 3, "New guest asce: 0x%pK",
586 (void *) kvm->arch.gmap->asce);
596 static void kvm_s390_vcpu_crypto_setup(struct kvm_vcpu *vcpu);
598 static int kvm_s390_vm_set_crypto(struct kvm *kvm, struct kvm_device_attr *attr)
600 struct kvm_vcpu *vcpu;
603 if (!test_kvm_facility(kvm, 76))
606 mutex_lock(&kvm->lock);
607 switch (attr->attr) {
608 case KVM_S390_VM_CRYPTO_ENABLE_AES_KW:
610 kvm->arch.crypto.crycb->aes_wrapping_key_mask,
611 sizeof(kvm->arch.crypto.crycb->aes_wrapping_key_mask));
612 kvm->arch.crypto.aes_kw = 1;
613 VM_EVENT(kvm, 3, "%s", "ENABLE: AES keywrapping support");
615 case KVM_S390_VM_CRYPTO_ENABLE_DEA_KW:
617 kvm->arch.crypto.crycb->dea_wrapping_key_mask,
618 sizeof(kvm->arch.crypto.crycb->dea_wrapping_key_mask));
619 kvm->arch.crypto.dea_kw = 1;
620 VM_EVENT(kvm, 3, "%s", "ENABLE: DEA keywrapping support");
622 case KVM_S390_VM_CRYPTO_DISABLE_AES_KW:
623 kvm->arch.crypto.aes_kw = 0;
624 memset(kvm->arch.crypto.crycb->aes_wrapping_key_mask, 0,
625 sizeof(kvm->arch.crypto.crycb->aes_wrapping_key_mask));
626 VM_EVENT(kvm, 3, "%s", "DISABLE: AES keywrapping support");
628 case KVM_S390_VM_CRYPTO_DISABLE_DEA_KW:
629 kvm->arch.crypto.dea_kw = 0;
630 memset(kvm->arch.crypto.crycb->dea_wrapping_key_mask, 0,
631 sizeof(kvm->arch.crypto.crycb->dea_wrapping_key_mask));
632 VM_EVENT(kvm, 3, "%s", "DISABLE: DEA keywrapping support");
635 mutex_unlock(&kvm->lock);
639 kvm_for_each_vcpu(i, vcpu, kvm) {
640 kvm_s390_vcpu_crypto_setup(vcpu);
643 mutex_unlock(&kvm->lock);
647 static int kvm_s390_set_tod_high(struct kvm *kvm, struct kvm_device_attr *attr)
651 if (copy_from_user(>od_high, (void __user *)attr->addr,
657 VM_EVENT(kvm, 3, "SET: TOD extension: 0x%x", gtod_high);
662 static int kvm_s390_set_tod_low(struct kvm *kvm, struct kvm_device_attr *attr)
666 if (copy_from_user(>od, (void __user *)attr->addr, sizeof(gtod)))
669 kvm_s390_set_tod_clock(kvm, gtod);
670 VM_EVENT(kvm, 3, "SET: TOD base: 0x%llx", gtod);
674 static int kvm_s390_set_tod(struct kvm *kvm, struct kvm_device_attr *attr)
681 switch (attr->attr) {
682 case KVM_S390_VM_TOD_HIGH:
683 ret = kvm_s390_set_tod_high(kvm, attr);
685 case KVM_S390_VM_TOD_LOW:
686 ret = kvm_s390_set_tod_low(kvm, attr);
695 static int kvm_s390_get_tod_high(struct kvm *kvm, struct kvm_device_attr *attr)
699 if (copy_to_user((void __user *)attr->addr, >od_high,
702 VM_EVENT(kvm, 3, "QUERY: TOD extension: 0x%x", gtod_high);
707 static int kvm_s390_get_tod_low(struct kvm *kvm, struct kvm_device_attr *attr)
711 gtod = kvm_s390_get_tod_clock_fast(kvm);
712 if (copy_to_user((void __user *)attr->addr, >od, sizeof(gtod)))
714 VM_EVENT(kvm, 3, "QUERY: TOD base: 0x%llx", gtod);
719 static int kvm_s390_get_tod(struct kvm *kvm, struct kvm_device_attr *attr)
726 switch (attr->attr) {
727 case KVM_S390_VM_TOD_HIGH:
728 ret = kvm_s390_get_tod_high(kvm, attr);
730 case KVM_S390_VM_TOD_LOW:
731 ret = kvm_s390_get_tod_low(kvm, attr);
740 static int kvm_s390_set_processor(struct kvm *kvm, struct kvm_device_attr *attr)
742 struct kvm_s390_vm_cpu_processor *proc;
743 u16 lowest_ibc, unblocked_ibc;
746 mutex_lock(&kvm->lock);
747 if (kvm->created_vcpus) {
751 proc = kzalloc(sizeof(*proc), GFP_KERNEL);
756 if (!copy_from_user(proc, (void __user *)attr->addr,
758 kvm->arch.model.cpuid = proc->cpuid;
759 lowest_ibc = sclp.ibc >> 16 & 0xfff;
760 unblocked_ibc = sclp.ibc & 0xfff;
762 if (proc->ibc > unblocked_ibc)
763 kvm->arch.model.ibc = unblocked_ibc;
764 else if (proc->ibc < lowest_ibc)
765 kvm->arch.model.ibc = lowest_ibc;
767 kvm->arch.model.ibc = proc->ibc;
769 memcpy(kvm->arch.model.fac_list, proc->fac_list,
770 S390_ARCH_FAC_LIST_SIZE_BYTE);
775 mutex_unlock(&kvm->lock);
779 static int kvm_s390_set_processor_feat(struct kvm *kvm,
780 struct kvm_device_attr *attr)
782 struct kvm_s390_vm_cpu_feat data;
785 if (copy_from_user(&data, (void __user *)attr->addr, sizeof(data)))
787 if (!bitmap_subset((unsigned long *) data.feat,
788 kvm_s390_available_cpu_feat,
789 KVM_S390_VM_CPU_FEAT_NR_BITS))
792 mutex_lock(&kvm->lock);
793 if (!atomic_read(&kvm->online_vcpus)) {
794 bitmap_copy(kvm->arch.cpu_feat, (unsigned long *) data.feat,
795 KVM_S390_VM_CPU_FEAT_NR_BITS);
798 mutex_unlock(&kvm->lock);
802 static int kvm_s390_set_processor_subfunc(struct kvm *kvm,
803 struct kvm_device_attr *attr)
806 * Once supported by kernel + hw, we have to store the subfunctions
807 * in kvm->arch and remember that user space configured them.
812 static int kvm_s390_set_cpu_model(struct kvm *kvm, struct kvm_device_attr *attr)
816 switch (attr->attr) {
817 case KVM_S390_VM_CPU_PROCESSOR:
818 ret = kvm_s390_set_processor(kvm, attr);
820 case KVM_S390_VM_CPU_PROCESSOR_FEAT:
821 ret = kvm_s390_set_processor_feat(kvm, attr);
823 case KVM_S390_VM_CPU_PROCESSOR_SUBFUNC:
824 ret = kvm_s390_set_processor_subfunc(kvm, attr);
830 static int kvm_s390_get_processor(struct kvm *kvm, struct kvm_device_attr *attr)
832 struct kvm_s390_vm_cpu_processor *proc;
835 proc = kzalloc(sizeof(*proc), GFP_KERNEL);
840 proc->cpuid = kvm->arch.model.cpuid;
841 proc->ibc = kvm->arch.model.ibc;
842 memcpy(&proc->fac_list, kvm->arch.model.fac_list,
843 S390_ARCH_FAC_LIST_SIZE_BYTE);
844 if (copy_to_user((void __user *)attr->addr, proc, sizeof(*proc)))
851 static int kvm_s390_get_machine(struct kvm *kvm, struct kvm_device_attr *attr)
853 struct kvm_s390_vm_cpu_machine *mach;
856 mach = kzalloc(sizeof(*mach), GFP_KERNEL);
861 get_cpu_id((struct cpuid *) &mach->cpuid);
862 mach->ibc = sclp.ibc;
863 memcpy(&mach->fac_mask, kvm->arch.model.fac_mask,
864 S390_ARCH_FAC_LIST_SIZE_BYTE);
865 memcpy((unsigned long *)&mach->fac_list, S390_lowcore.stfle_fac_list,
866 S390_ARCH_FAC_LIST_SIZE_BYTE);
867 if (copy_to_user((void __user *)attr->addr, mach, sizeof(*mach)))
874 static int kvm_s390_get_processor_feat(struct kvm *kvm,
875 struct kvm_device_attr *attr)
877 struct kvm_s390_vm_cpu_feat data;
879 bitmap_copy((unsigned long *) data.feat, kvm->arch.cpu_feat,
880 KVM_S390_VM_CPU_FEAT_NR_BITS);
881 if (copy_to_user((void __user *)attr->addr, &data, sizeof(data)))
886 static int kvm_s390_get_machine_feat(struct kvm *kvm,
887 struct kvm_device_attr *attr)
889 struct kvm_s390_vm_cpu_feat data;
891 bitmap_copy((unsigned long *) data.feat,
892 kvm_s390_available_cpu_feat,
893 KVM_S390_VM_CPU_FEAT_NR_BITS);
894 if (copy_to_user((void __user *)attr->addr, &data, sizeof(data)))
899 static int kvm_s390_get_processor_subfunc(struct kvm *kvm,
900 struct kvm_device_attr *attr)
903 * Once we can actually configure subfunctions (kernel + hw support),
904 * we have to check if they were already set by user space, if so copy
905 * them from kvm->arch.
910 static int kvm_s390_get_machine_subfunc(struct kvm *kvm,
911 struct kvm_device_attr *attr)
913 if (copy_to_user((void __user *)attr->addr, &kvm_s390_available_subfunc,
914 sizeof(struct kvm_s390_vm_cpu_subfunc)))
918 static int kvm_s390_get_cpu_model(struct kvm *kvm, struct kvm_device_attr *attr)
922 switch (attr->attr) {
923 case KVM_S390_VM_CPU_PROCESSOR:
924 ret = kvm_s390_get_processor(kvm, attr);
926 case KVM_S390_VM_CPU_MACHINE:
927 ret = kvm_s390_get_machine(kvm, attr);
929 case KVM_S390_VM_CPU_PROCESSOR_FEAT:
930 ret = kvm_s390_get_processor_feat(kvm, attr);
932 case KVM_S390_VM_CPU_MACHINE_FEAT:
933 ret = kvm_s390_get_machine_feat(kvm, attr);
935 case KVM_S390_VM_CPU_PROCESSOR_SUBFUNC:
936 ret = kvm_s390_get_processor_subfunc(kvm, attr);
938 case KVM_S390_VM_CPU_MACHINE_SUBFUNC:
939 ret = kvm_s390_get_machine_subfunc(kvm, attr);
945 static int kvm_s390_vm_set_attr(struct kvm *kvm, struct kvm_device_attr *attr)
949 switch (attr->group) {
950 case KVM_S390_VM_MEM_CTRL:
951 ret = kvm_s390_set_mem_control(kvm, attr);
953 case KVM_S390_VM_TOD:
954 ret = kvm_s390_set_tod(kvm, attr);
956 case KVM_S390_VM_CPU_MODEL:
957 ret = kvm_s390_set_cpu_model(kvm, attr);
959 case KVM_S390_VM_CRYPTO:
960 ret = kvm_s390_vm_set_crypto(kvm, attr);
970 static int kvm_s390_vm_get_attr(struct kvm *kvm, struct kvm_device_attr *attr)
974 switch (attr->group) {
975 case KVM_S390_VM_MEM_CTRL:
976 ret = kvm_s390_get_mem_control(kvm, attr);
978 case KVM_S390_VM_TOD:
979 ret = kvm_s390_get_tod(kvm, attr);
981 case KVM_S390_VM_CPU_MODEL:
982 ret = kvm_s390_get_cpu_model(kvm, attr);
992 static int kvm_s390_vm_has_attr(struct kvm *kvm, struct kvm_device_attr *attr)
996 switch (attr->group) {
997 case KVM_S390_VM_MEM_CTRL:
998 switch (attr->attr) {
999 case KVM_S390_VM_MEM_ENABLE_CMMA:
1000 case KVM_S390_VM_MEM_CLR_CMMA:
1001 ret = sclp.has_cmma ? 0 : -ENXIO;
1003 case KVM_S390_VM_MEM_LIMIT_SIZE:
1011 case KVM_S390_VM_TOD:
1012 switch (attr->attr) {
1013 case KVM_S390_VM_TOD_LOW:
1014 case KVM_S390_VM_TOD_HIGH:
1022 case KVM_S390_VM_CPU_MODEL:
1023 switch (attr->attr) {
1024 case KVM_S390_VM_CPU_PROCESSOR:
1025 case KVM_S390_VM_CPU_MACHINE:
1026 case KVM_S390_VM_CPU_PROCESSOR_FEAT:
1027 case KVM_S390_VM_CPU_MACHINE_FEAT:
1028 case KVM_S390_VM_CPU_MACHINE_SUBFUNC:
1031 /* configuring subfunctions is not supported yet */
1032 case KVM_S390_VM_CPU_PROCESSOR_SUBFUNC:
1038 case KVM_S390_VM_CRYPTO:
1039 switch (attr->attr) {
1040 case KVM_S390_VM_CRYPTO_ENABLE_AES_KW:
1041 case KVM_S390_VM_CRYPTO_ENABLE_DEA_KW:
1042 case KVM_S390_VM_CRYPTO_DISABLE_AES_KW:
1043 case KVM_S390_VM_CRYPTO_DISABLE_DEA_KW:
1059 static long kvm_s390_get_skeys(struct kvm *kvm, struct kvm_s390_skeys *args)
1065 if (args->flags != 0)
1068 /* Is this guest using storage keys? */
1069 if (!mm_use_skey(current->mm))
1070 return KVM_S390_GET_SKEYS_NONE;
1072 /* Enforce sane limit on memory allocation */
1073 if (args->count < 1 || args->count > KVM_S390_SKEYS_MAX)
1076 keys = kmalloc_array(args->count, sizeof(uint8_t),
1077 GFP_KERNEL | __GFP_NOWARN);
1079 keys = vmalloc(sizeof(uint8_t) * args->count);
1083 down_read(¤t->mm->mmap_sem);
1084 for (i = 0; i < args->count; i++) {
1085 hva = gfn_to_hva(kvm, args->start_gfn + i);
1086 if (kvm_is_error_hva(hva)) {
1091 r = get_guest_storage_key(current->mm, hva, &keys[i]);
1095 up_read(¤t->mm->mmap_sem);
1098 r = copy_to_user((uint8_t __user *)args->skeydata_addr, keys,
1099 sizeof(uint8_t) * args->count);
1108 static long kvm_s390_set_skeys(struct kvm *kvm, struct kvm_s390_skeys *args)
1114 if (args->flags != 0)
1117 /* Enforce sane limit on memory allocation */
1118 if (args->count < 1 || args->count > KVM_S390_SKEYS_MAX)
1121 keys = kmalloc_array(args->count, sizeof(uint8_t),
1122 GFP_KERNEL | __GFP_NOWARN);
1124 keys = vmalloc(sizeof(uint8_t) * args->count);
1128 r = copy_from_user(keys, (uint8_t __user *)args->skeydata_addr,
1129 sizeof(uint8_t) * args->count);
1135 /* Enable storage key handling for the guest */
1136 r = s390_enable_skey();
1140 down_read(¤t->mm->mmap_sem);
1141 for (i = 0; i < args->count; i++) {
1142 hva = gfn_to_hva(kvm, args->start_gfn + i);
1143 if (kvm_is_error_hva(hva)) {
1148 /* Lowest order bit is reserved */
1149 if (keys[i] & 0x01) {
1154 r = set_guest_storage_key(current->mm, hva, keys[i], 0);
1158 up_read(¤t->mm->mmap_sem);
1164 long kvm_arch_vm_ioctl(struct file *filp,
1165 unsigned int ioctl, unsigned long arg)
1167 struct kvm *kvm = filp->private_data;
1168 void __user *argp = (void __user *)arg;
1169 struct kvm_device_attr attr;
1173 case KVM_S390_INTERRUPT: {
1174 struct kvm_s390_interrupt s390int;
1177 if (copy_from_user(&s390int, argp, sizeof(s390int)))
1179 r = kvm_s390_inject_vm(kvm, &s390int);
1182 case KVM_ENABLE_CAP: {
1183 struct kvm_enable_cap cap;
1185 if (copy_from_user(&cap, argp, sizeof(cap)))
1187 r = kvm_vm_ioctl_enable_cap(kvm, &cap);
1190 case KVM_CREATE_IRQCHIP: {
1191 struct kvm_irq_routing_entry routing;
1194 if (kvm->arch.use_irqchip) {
1195 /* Set up dummy routing. */
1196 memset(&routing, 0, sizeof(routing));
1197 r = kvm_set_irq_routing(kvm, &routing, 0, 0);
1201 case KVM_SET_DEVICE_ATTR: {
1203 if (copy_from_user(&attr, (void __user *)arg, sizeof(attr)))
1205 r = kvm_s390_vm_set_attr(kvm, &attr);
1208 case KVM_GET_DEVICE_ATTR: {
1210 if (copy_from_user(&attr, (void __user *)arg, sizeof(attr)))
1212 r = kvm_s390_vm_get_attr(kvm, &attr);
1215 case KVM_HAS_DEVICE_ATTR: {
1217 if (copy_from_user(&attr, (void __user *)arg, sizeof(attr)))
1219 r = kvm_s390_vm_has_attr(kvm, &attr);
1222 case KVM_S390_GET_SKEYS: {
1223 struct kvm_s390_skeys args;
1226 if (copy_from_user(&args, argp,
1227 sizeof(struct kvm_s390_skeys)))
1229 r = kvm_s390_get_skeys(kvm, &args);
1232 case KVM_S390_SET_SKEYS: {
1233 struct kvm_s390_skeys args;
1236 if (copy_from_user(&args, argp,
1237 sizeof(struct kvm_s390_skeys)))
1239 r = kvm_s390_set_skeys(kvm, &args);
1249 static int kvm_s390_query_ap_config(u8 *config)
1251 u32 fcn_code = 0x04000000UL;
1254 memset(config, 0, 128);
1258 ".long 0xb2af0000\n" /* PQAP(QCI) */
1264 : "r" (fcn_code), "r" (config)
1265 : "cc", "0", "2", "memory"
1271 static int kvm_s390_apxa_installed(void)
1276 if (test_facility(12)) {
1277 cc = kvm_s390_query_ap_config(config);
1280 pr_err("PQAP(QCI) failed with cc=%d", cc);
1282 return config[0] & 0x40;
1288 static void kvm_s390_set_crycb_format(struct kvm *kvm)
1290 kvm->arch.crypto.crycbd = (__u32)(unsigned long) kvm->arch.crypto.crycb;
1292 if (kvm_s390_apxa_installed())
1293 kvm->arch.crypto.crycbd |= CRYCB_FORMAT2;
1295 kvm->arch.crypto.crycbd |= CRYCB_FORMAT1;
1298 static u64 kvm_s390_get_initial_cpuid(void)
1303 cpuid.version = 0xff;
1304 return *((u64 *) &cpuid);
1307 static void kvm_s390_crypto_init(struct kvm *kvm)
1309 if (!test_kvm_facility(kvm, 76))
1312 kvm->arch.crypto.crycb = &kvm->arch.sie_page2->crycb;
1313 kvm_s390_set_crycb_format(kvm);
1315 /* Enable AES/DEA protected key functions by default */
1316 kvm->arch.crypto.aes_kw = 1;
1317 kvm->arch.crypto.dea_kw = 1;
1318 get_random_bytes(kvm->arch.crypto.crycb->aes_wrapping_key_mask,
1319 sizeof(kvm->arch.crypto.crycb->aes_wrapping_key_mask));
1320 get_random_bytes(kvm->arch.crypto.crycb->dea_wrapping_key_mask,
1321 sizeof(kvm->arch.crypto.crycb->dea_wrapping_key_mask));
1324 static void sca_dispose(struct kvm *kvm)
1326 if (kvm->arch.use_esca)
1327 free_pages_exact(kvm->arch.sca, sizeof(struct esca_block));
1329 free_page((unsigned long)(kvm->arch.sca));
1330 kvm->arch.sca = NULL;
1333 int kvm_arch_init_vm(struct kvm *kvm, unsigned long type)
1335 gfp_t alloc_flags = GFP_KERNEL;
1337 char debug_name[16];
1338 static unsigned long sca_offset;
1341 #ifdef CONFIG_KVM_S390_UCONTROL
1342 if (type & ~KVM_VM_S390_UCONTROL)
1344 if ((type & KVM_VM_S390_UCONTROL) && (!capable(CAP_SYS_ADMIN)))
1351 rc = s390_enable_sie();
1357 ratelimit_state_init(&kvm->arch.sthyi_limit, 5 * HZ, 500);
1359 kvm->arch.use_esca = 0; /* start with basic SCA */
1360 if (!sclp.has_64bscao)
1361 alloc_flags |= GFP_DMA;
1362 rwlock_init(&kvm->arch.sca_lock);
1363 kvm->arch.sca = (struct bsca_block *) get_zeroed_page(alloc_flags);
1366 spin_lock(&kvm_lock);
1368 if (sca_offset + sizeof(struct bsca_block) > PAGE_SIZE)
1370 kvm->arch.sca = (struct bsca_block *)
1371 ((char *) kvm->arch.sca + sca_offset);
1372 spin_unlock(&kvm_lock);
1374 sprintf(debug_name, "kvm-%u", current->pid);
1376 kvm->arch.dbf = debug_register(debug_name, 32, 1, 7 * sizeof(long));
1380 kvm->arch.sie_page2 =
1381 (struct sie_page2 *) get_zeroed_page(GFP_KERNEL | GFP_DMA);
1382 if (!kvm->arch.sie_page2)
1385 /* Populate the facility mask initially. */
1386 memcpy(kvm->arch.model.fac_mask, S390_lowcore.stfle_fac_list,
1387 S390_ARCH_FAC_LIST_SIZE_BYTE);
1388 for (i = 0; i < S390_ARCH_FAC_LIST_SIZE_U64; i++) {
1389 if (i < kvm_s390_fac_list_mask_size())
1390 kvm->arch.model.fac_mask[i] &= kvm_s390_fac_list_mask[i];
1392 kvm->arch.model.fac_mask[i] = 0UL;
1395 /* Populate the facility list initially. */
1396 kvm->arch.model.fac_list = kvm->arch.sie_page2->fac_list;
1397 memcpy(kvm->arch.model.fac_list, kvm->arch.model.fac_mask,
1398 S390_ARCH_FAC_LIST_SIZE_BYTE);
1400 set_kvm_facility(kvm->arch.model.fac_mask, 74);
1401 set_kvm_facility(kvm->arch.model.fac_list, 74);
1403 kvm->arch.model.cpuid = kvm_s390_get_initial_cpuid();
1404 kvm->arch.model.ibc = sclp.ibc & 0x0fff;
1406 kvm_s390_crypto_init(kvm);
1408 spin_lock_init(&kvm->arch.float_int.lock);
1409 for (i = 0; i < FIRQ_LIST_COUNT; i++)
1410 INIT_LIST_HEAD(&kvm->arch.float_int.lists[i]);
1411 init_waitqueue_head(&kvm->arch.ipte_wq);
1412 mutex_init(&kvm->arch.ipte_mutex);
1414 debug_register_view(kvm->arch.dbf, &debug_sprintf_view);
1415 VM_EVENT(kvm, 3, "vm created with type %lu", type);
1417 if (type & KVM_VM_S390_UCONTROL) {
1418 kvm->arch.gmap = NULL;
1419 kvm->arch.mem_limit = KVM_S390_NO_MEM_LIMIT;
1421 if (sclp.hamax == U64_MAX)
1422 kvm->arch.mem_limit = TASK_MAX_SIZE;
1424 kvm->arch.mem_limit = min_t(unsigned long, TASK_MAX_SIZE,
1426 kvm->arch.gmap = gmap_create(current->mm, kvm->arch.mem_limit - 1);
1427 if (!kvm->arch.gmap)
1429 kvm->arch.gmap->private = kvm;
1430 kvm->arch.gmap->pfault_enabled = 0;
1433 kvm->arch.css_support = 0;
1434 kvm->arch.use_irqchip = 0;
1435 kvm->arch.epoch = 0;
1437 spin_lock_init(&kvm->arch.start_stop_lock);
1438 kvm_s390_vsie_init(kvm);
1439 KVM_EVENT(3, "vm 0x%pK created by pid %u", kvm, current->pid);
1443 free_page((unsigned long)kvm->arch.sie_page2);
1444 debug_unregister(kvm->arch.dbf);
1446 KVM_EVENT(3, "creation of vm failed: %d", rc);
1450 void kvm_arch_vcpu_destroy(struct kvm_vcpu *vcpu)
1452 VCPU_EVENT(vcpu, 3, "%s", "free cpu");
1453 trace_kvm_s390_destroy_vcpu(vcpu->vcpu_id);
1454 kvm_s390_clear_local_irqs(vcpu);
1455 kvm_clear_async_pf_completion_queue(vcpu);
1456 if (!kvm_is_ucontrol(vcpu->kvm))
1459 if (kvm_is_ucontrol(vcpu->kvm))
1460 gmap_remove(vcpu->arch.gmap);
1462 if (vcpu->kvm->arch.use_cmma)
1463 kvm_s390_vcpu_unsetup_cmma(vcpu);
1464 free_page((unsigned long)(vcpu->arch.sie_block));
1466 kvm_vcpu_uninit(vcpu);
1467 kmem_cache_free(kvm_vcpu_cache, vcpu);
1470 static void kvm_free_vcpus(struct kvm *kvm)
1473 struct kvm_vcpu *vcpu;
1475 kvm_for_each_vcpu(i, vcpu, kvm)
1476 kvm_arch_vcpu_destroy(vcpu);
1478 mutex_lock(&kvm->lock);
1479 for (i = 0; i < atomic_read(&kvm->online_vcpus); i++)
1480 kvm->vcpus[i] = NULL;
1482 atomic_set(&kvm->online_vcpus, 0);
1483 mutex_unlock(&kvm->lock);
1486 void kvm_arch_destroy_vm(struct kvm *kvm)
1488 kvm_free_vcpus(kvm);
1490 debug_unregister(kvm->arch.dbf);
1491 free_page((unsigned long)kvm->arch.sie_page2);
1492 if (!kvm_is_ucontrol(kvm))
1493 gmap_remove(kvm->arch.gmap);
1494 kvm_s390_destroy_adapters(kvm);
1495 kvm_s390_clear_float_irqs(kvm);
1496 kvm_s390_vsie_destroy(kvm);
1497 KVM_EVENT(3, "vm 0x%pK destroyed", kvm);
1500 /* Section: vcpu related */
1501 static int __kvm_ucontrol_vcpu_init(struct kvm_vcpu *vcpu)
1503 vcpu->arch.gmap = gmap_create(current->mm, -1UL);
1504 if (!vcpu->arch.gmap)
1506 vcpu->arch.gmap->private = vcpu->kvm;
1511 static void sca_del_vcpu(struct kvm_vcpu *vcpu)
1513 read_lock(&vcpu->kvm->arch.sca_lock);
1514 if (vcpu->kvm->arch.use_esca) {
1515 struct esca_block *sca = vcpu->kvm->arch.sca;
1517 clear_bit_inv(vcpu->vcpu_id, (unsigned long *) sca->mcn);
1518 sca->cpu[vcpu->vcpu_id].sda = 0;
1520 struct bsca_block *sca = vcpu->kvm->arch.sca;
1522 clear_bit_inv(vcpu->vcpu_id, (unsigned long *) &sca->mcn);
1523 sca->cpu[vcpu->vcpu_id].sda = 0;
1525 read_unlock(&vcpu->kvm->arch.sca_lock);
1528 static void sca_add_vcpu(struct kvm_vcpu *vcpu)
1530 read_lock(&vcpu->kvm->arch.sca_lock);
1531 if (vcpu->kvm->arch.use_esca) {
1532 struct esca_block *sca = vcpu->kvm->arch.sca;
1534 sca->cpu[vcpu->vcpu_id].sda = (__u64) vcpu->arch.sie_block;
1535 vcpu->arch.sie_block->scaoh = (__u32)(((__u64)sca) >> 32);
1536 vcpu->arch.sie_block->scaol = (__u32)(__u64)sca & ~0x3fU;
1537 vcpu->arch.sie_block->ecb2 |= 0x04U;
1538 set_bit_inv(vcpu->vcpu_id, (unsigned long *) sca->mcn);
1540 struct bsca_block *sca = vcpu->kvm->arch.sca;
1542 sca->cpu[vcpu->vcpu_id].sda = (__u64) vcpu->arch.sie_block;
1543 vcpu->arch.sie_block->scaoh = (__u32)(((__u64)sca) >> 32);
1544 vcpu->arch.sie_block->scaol = (__u32)(__u64)sca;
1545 set_bit_inv(vcpu->vcpu_id, (unsigned long *) &sca->mcn);
1547 read_unlock(&vcpu->kvm->arch.sca_lock);
1550 /* Basic SCA to Extended SCA data copy routines */
1551 static inline void sca_copy_entry(struct esca_entry *d, struct bsca_entry *s)
1554 d->sigp_ctrl.c = s->sigp_ctrl.c;
1555 d->sigp_ctrl.scn = s->sigp_ctrl.scn;
1558 static void sca_copy_b_to_e(struct esca_block *d, struct bsca_block *s)
1562 d->ipte_control = s->ipte_control;
1564 for (i = 0; i < KVM_S390_BSCA_CPU_SLOTS; i++)
1565 sca_copy_entry(&d->cpu[i], &s->cpu[i]);
1568 static int sca_switch_to_extended(struct kvm *kvm)
1570 struct bsca_block *old_sca = kvm->arch.sca;
1571 struct esca_block *new_sca;
1572 struct kvm_vcpu *vcpu;
1573 unsigned int vcpu_idx;
1576 new_sca = alloc_pages_exact(sizeof(*new_sca), GFP_KERNEL|__GFP_ZERO);
1580 scaoh = (u32)((u64)(new_sca) >> 32);
1581 scaol = (u32)(u64)(new_sca) & ~0x3fU;
1583 kvm_s390_vcpu_block_all(kvm);
1584 write_lock(&kvm->arch.sca_lock);
1586 sca_copy_b_to_e(new_sca, old_sca);
1588 kvm_for_each_vcpu(vcpu_idx, vcpu, kvm) {
1589 vcpu->arch.sie_block->scaoh = scaoh;
1590 vcpu->arch.sie_block->scaol = scaol;
1591 vcpu->arch.sie_block->ecb2 |= 0x04U;
1593 kvm->arch.sca = new_sca;
1594 kvm->arch.use_esca = 1;
1596 write_unlock(&kvm->arch.sca_lock);
1597 kvm_s390_vcpu_unblock_all(kvm);
1599 free_page((unsigned long)old_sca);
1601 VM_EVENT(kvm, 2, "Switched to ESCA (0x%pK -> 0x%pK)",
1602 old_sca, kvm->arch.sca);
1606 static int sca_can_add_vcpu(struct kvm *kvm, unsigned int id)
1610 if (id < KVM_S390_BSCA_CPU_SLOTS)
1612 if (!sclp.has_esca || !sclp.has_64bscao)
1615 mutex_lock(&kvm->lock);
1616 rc = kvm->arch.use_esca ? 0 : sca_switch_to_extended(kvm);
1617 mutex_unlock(&kvm->lock);
1619 return rc == 0 && id < KVM_S390_ESCA_CPU_SLOTS;
1622 int kvm_arch_vcpu_init(struct kvm_vcpu *vcpu)
1624 vcpu->arch.pfault_token = KVM_S390_PFAULT_TOKEN_INVALID;
1625 kvm_clear_async_pf_completion_queue(vcpu);
1626 vcpu->run->kvm_valid_regs = KVM_SYNC_PREFIX |
1632 if (test_kvm_facility(vcpu->kvm, 64))
1633 vcpu->run->kvm_valid_regs |= KVM_SYNC_RICCB;
1634 /* fprs can be synchronized via vrs, even if the guest has no vx. With
1635 * MACHINE_HAS_VX, (load|store)_fpu_regs() will work with vrs format.
1638 vcpu->run->kvm_valid_regs |= KVM_SYNC_VRS;
1640 vcpu->run->kvm_valid_regs |= KVM_SYNC_FPRS;
1642 if (kvm_is_ucontrol(vcpu->kvm))
1643 return __kvm_ucontrol_vcpu_init(vcpu);
1648 /* needs disabled preemption to protect from TOD sync and vcpu_load/put */
1649 static void __start_cpu_timer_accounting(struct kvm_vcpu *vcpu)
1651 WARN_ON_ONCE(vcpu->arch.cputm_start != 0);
1652 raw_write_seqcount_begin(&vcpu->arch.cputm_seqcount);
1653 vcpu->arch.cputm_start = get_tod_clock_fast();
1654 raw_write_seqcount_end(&vcpu->arch.cputm_seqcount);
1657 /* needs disabled preemption to protect from TOD sync and vcpu_load/put */
1658 static void __stop_cpu_timer_accounting(struct kvm_vcpu *vcpu)
1660 WARN_ON_ONCE(vcpu->arch.cputm_start == 0);
1661 raw_write_seqcount_begin(&vcpu->arch.cputm_seqcount);
1662 vcpu->arch.sie_block->cputm -= get_tod_clock_fast() - vcpu->arch.cputm_start;
1663 vcpu->arch.cputm_start = 0;
1664 raw_write_seqcount_end(&vcpu->arch.cputm_seqcount);
1667 /* needs disabled preemption to protect from TOD sync and vcpu_load/put */
1668 static void __enable_cpu_timer_accounting(struct kvm_vcpu *vcpu)
1670 WARN_ON_ONCE(vcpu->arch.cputm_enabled);
1671 vcpu->arch.cputm_enabled = true;
1672 __start_cpu_timer_accounting(vcpu);
1675 /* needs disabled preemption to protect from TOD sync and vcpu_load/put */
1676 static void __disable_cpu_timer_accounting(struct kvm_vcpu *vcpu)
1678 WARN_ON_ONCE(!vcpu->arch.cputm_enabled);
1679 __stop_cpu_timer_accounting(vcpu);
1680 vcpu->arch.cputm_enabled = false;
1683 static void enable_cpu_timer_accounting(struct kvm_vcpu *vcpu)
1685 preempt_disable(); /* protect from TOD sync and vcpu_load/put */
1686 __enable_cpu_timer_accounting(vcpu);
1690 static void disable_cpu_timer_accounting(struct kvm_vcpu *vcpu)
1692 preempt_disable(); /* protect from TOD sync and vcpu_load/put */
1693 __disable_cpu_timer_accounting(vcpu);
1697 /* set the cpu timer - may only be called from the VCPU thread itself */
1698 void kvm_s390_set_cpu_timer(struct kvm_vcpu *vcpu, __u64 cputm)
1700 preempt_disable(); /* protect from TOD sync and vcpu_load/put */
1701 raw_write_seqcount_begin(&vcpu->arch.cputm_seqcount);
1702 if (vcpu->arch.cputm_enabled)
1703 vcpu->arch.cputm_start = get_tod_clock_fast();
1704 vcpu->arch.sie_block->cputm = cputm;
1705 raw_write_seqcount_end(&vcpu->arch.cputm_seqcount);
1709 /* update and get the cpu timer - can also be called from other VCPU threads */
1710 __u64 kvm_s390_get_cpu_timer(struct kvm_vcpu *vcpu)
1715 if (unlikely(!vcpu->arch.cputm_enabled))
1716 return vcpu->arch.sie_block->cputm;
1718 preempt_disable(); /* protect from TOD sync and vcpu_load/put */
1720 seq = raw_read_seqcount(&vcpu->arch.cputm_seqcount);
1722 * If the writer would ever execute a read in the critical
1723 * section, e.g. in irq context, we have a deadlock.
1725 WARN_ON_ONCE((seq & 1) && smp_processor_id() == vcpu->cpu);
1726 value = vcpu->arch.sie_block->cputm;
1727 /* if cputm_start is 0, accounting is being started/stopped */
1728 if (likely(vcpu->arch.cputm_start))
1729 value -= get_tod_clock_fast() - vcpu->arch.cputm_start;
1730 } while (read_seqcount_retry(&vcpu->arch.cputm_seqcount, seq & ~1));
1735 void kvm_arch_vcpu_load(struct kvm_vcpu *vcpu, int cpu)
1737 /* Save host register state */
1739 vcpu->arch.host_fpregs.fpc = current->thread.fpu.fpc;
1740 vcpu->arch.host_fpregs.regs = current->thread.fpu.regs;
1743 current->thread.fpu.regs = vcpu->run->s.regs.vrs;
1745 current->thread.fpu.regs = vcpu->run->s.regs.fprs;
1746 current->thread.fpu.fpc = vcpu->run->s.regs.fpc;
1747 if (test_fp_ctl(current->thread.fpu.fpc))
1748 /* User space provided an invalid FPC, let's clear it */
1749 current->thread.fpu.fpc = 0;
1751 save_access_regs(vcpu->arch.host_acrs);
1752 restore_access_regs(vcpu->run->s.regs.acrs);
1753 gmap_enable(vcpu->arch.enabled_gmap);
1754 atomic_or(CPUSTAT_RUNNING, &vcpu->arch.sie_block->cpuflags);
1755 if (vcpu->arch.cputm_enabled && !is_vcpu_idle(vcpu))
1756 __start_cpu_timer_accounting(vcpu);
1760 void kvm_arch_vcpu_put(struct kvm_vcpu *vcpu)
1763 if (vcpu->arch.cputm_enabled && !is_vcpu_idle(vcpu))
1764 __stop_cpu_timer_accounting(vcpu);
1765 atomic_andnot(CPUSTAT_RUNNING, &vcpu->arch.sie_block->cpuflags);
1766 vcpu->arch.enabled_gmap = gmap_get_enabled();
1767 gmap_disable(vcpu->arch.enabled_gmap);
1769 /* Save guest register state */
1771 vcpu->run->s.regs.fpc = current->thread.fpu.fpc;
1773 /* Restore host register state */
1774 current->thread.fpu.fpc = vcpu->arch.host_fpregs.fpc;
1775 current->thread.fpu.regs = vcpu->arch.host_fpregs.regs;
1777 save_access_regs(vcpu->run->s.regs.acrs);
1778 restore_access_regs(vcpu->arch.host_acrs);
1781 static void kvm_s390_vcpu_initial_reset(struct kvm_vcpu *vcpu)
1783 /* this equals initial cpu reset in pop, but we don't switch to ESA */
1784 vcpu->arch.sie_block->gpsw.mask = 0UL;
1785 vcpu->arch.sie_block->gpsw.addr = 0UL;
1786 kvm_s390_set_prefix(vcpu, 0);
1787 kvm_s390_set_cpu_timer(vcpu, 0);
1788 vcpu->arch.sie_block->ckc = 0UL;
1789 vcpu->arch.sie_block->todpr = 0;
1790 memset(vcpu->arch.sie_block->gcr, 0, 16 * sizeof(__u64));
1791 vcpu->arch.sie_block->gcr[0] = 0xE0UL;
1792 vcpu->arch.sie_block->gcr[14] = 0xC2000000UL;
1793 /* make sure the new fpc will be lazily loaded */
1795 current->thread.fpu.fpc = 0;
1796 vcpu->arch.sie_block->gbea = 1;
1797 vcpu->arch.sie_block->pp = 0;
1798 vcpu->arch.pfault_token = KVM_S390_PFAULT_TOKEN_INVALID;
1799 kvm_clear_async_pf_completion_queue(vcpu);
1800 if (!kvm_s390_user_cpu_state_ctrl(vcpu->kvm))
1801 kvm_s390_vcpu_stop(vcpu);
1802 kvm_s390_clear_local_irqs(vcpu);
1805 void kvm_arch_vcpu_postcreate(struct kvm_vcpu *vcpu)
1807 mutex_lock(&vcpu->kvm->lock);
1809 vcpu->arch.sie_block->epoch = vcpu->kvm->arch.epoch;
1811 mutex_unlock(&vcpu->kvm->lock);
1812 if (!kvm_is_ucontrol(vcpu->kvm)) {
1813 vcpu->arch.gmap = vcpu->kvm->arch.gmap;
1816 /* make vcpu_load load the right gmap on the first trigger */
1817 vcpu->arch.enabled_gmap = vcpu->arch.gmap;
1820 static void kvm_s390_vcpu_crypto_setup(struct kvm_vcpu *vcpu)
1822 if (!test_kvm_facility(vcpu->kvm, 76))
1825 vcpu->arch.sie_block->ecb3 &= ~(ECB3_AES | ECB3_DEA);
1827 if (vcpu->kvm->arch.crypto.aes_kw)
1828 vcpu->arch.sie_block->ecb3 |= ECB3_AES;
1829 if (vcpu->kvm->arch.crypto.dea_kw)
1830 vcpu->arch.sie_block->ecb3 |= ECB3_DEA;
1832 vcpu->arch.sie_block->crycbd = vcpu->kvm->arch.crypto.crycbd;
1835 void kvm_s390_vcpu_unsetup_cmma(struct kvm_vcpu *vcpu)
1837 free_page(vcpu->arch.sie_block->cbrlo);
1838 vcpu->arch.sie_block->cbrlo = 0;
1841 int kvm_s390_vcpu_setup_cmma(struct kvm_vcpu *vcpu)
1843 vcpu->arch.sie_block->cbrlo = get_zeroed_page(GFP_KERNEL);
1844 if (!vcpu->arch.sie_block->cbrlo)
1847 vcpu->arch.sie_block->ecb2 |= 0x80;
1848 vcpu->arch.sie_block->ecb2 &= ~0x08;
1852 static void kvm_s390_vcpu_setup_model(struct kvm_vcpu *vcpu)
1854 struct kvm_s390_cpu_model *model = &vcpu->kvm->arch.model;
1856 vcpu->arch.sie_block->ibc = model->ibc;
1857 if (test_kvm_facility(vcpu->kvm, 7))
1858 vcpu->arch.sie_block->fac = (u32)(u64) model->fac_list;
1861 int kvm_arch_vcpu_setup(struct kvm_vcpu *vcpu)
1865 atomic_set(&vcpu->arch.sie_block->cpuflags, CPUSTAT_ZARCH |
1869 if (test_kvm_facility(vcpu->kvm, 78))
1870 atomic_or(CPUSTAT_GED2, &vcpu->arch.sie_block->cpuflags);
1871 else if (test_kvm_facility(vcpu->kvm, 8))
1872 atomic_or(CPUSTAT_GED, &vcpu->arch.sie_block->cpuflags);
1874 kvm_s390_vcpu_setup_model(vcpu);
1876 /* pgste_set_pte has special handling for !MACHINE_HAS_ESOP */
1877 if (MACHINE_HAS_ESOP)
1878 vcpu->arch.sie_block->ecb |= 0x02;
1879 if (test_kvm_facility(vcpu->kvm, 9))
1880 vcpu->arch.sie_block->ecb |= 0x04;
1881 if (test_kvm_facility(vcpu->kvm, 73))
1882 vcpu->arch.sie_block->ecb |= 0x10;
1884 if (test_kvm_facility(vcpu->kvm, 8) && sclp.has_pfmfi)
1885 vcpu->arch.sie_block->ecb2 |= 0x08;
1886 vcpu->arch.sie_block->eca = 0x1002000U;
1888 vcpu->arch.sie_block->eca |= 0x80000000U;
1890 vcpu->arch.sie_block->eca |= 0x40000000U;
1892 vcpu->arch.sie_block->eca |= 1;
1893 if (sclp.has_sigpif)
1894 vcpu->arch.sie_block->eca |= 0x10000000U;
1895 if (test_kvm_facility(vcpu->kvm, 64))
1896 vcpu->arch.sie_block->ecb3 |= 0x01;
1897 if (test_kvm_facility(vcpu->kvm, 129)) {
1898 vcpu->arch.sie_block->eca |= 0x00020000;
1899 vcpu->arch.sie_block->ecd |= 0x20000000;
1901 vcpu->arch.sie_block->riccbd = (unsigned long) &vcpu->run->s.regs.riccb;
1902 vcpu->arch.sie_block->ictl |= ICTL_ISKE | ICTL_SSKE | ICTL_RRBE;
1903 if (test_kvm_facility(vcpu->kvm, 74))
1904 vcpu->arch.sie_block->ictl |= ICTL_OPEREXC;
1906 if (vcpu->kvm->arch.use_cmma) {
1907 rc = kvm_s390_vcpu_setup_cmma(vcpu);
1911 hrtimer_init(&vcpu->arch.ckc_timer, CLOCK_MONOTONIC, HRTIMER_MODE_REL);
1912 vcpu->arch.ckc_timer.function = kvm_s390_idle_wakeup;
1914 kvm_s390_vcpu_crypto_setup(vcpu);
1919 struct kvm_vcpu *kvm_arch_vcpu_create(struct kvm *kvm,
1922 struct kvm_vcpu *vcpu;
1923 struct sie_page *sie_page;
1926 if (!kvm_is_ucontrol(kvm) && !sca_can_add_vcpu(kvm, id))
1931 vcpu = kmem_cache_zalloc(kvm_vcpu_cache, GFP_KERNEL);
1935 sie_page = (struct sie_page *) get_zeroed_page(GFP_KERNEL);
1939 vcpu->arch.sie_block = &sie_page->sie_block;
1940 vcpu->arch.sie_block->itdba = (unsigned long) &sie_page->itdb;
1942 /* the real guest size will always be smaller than msl */
1943 vcpu->arch.sie_block->mso = 0;
1944 vcpu->arch.sie_block->msl = sclp.hamax;
1946 vcpu->arch.sie_block->icpua = id;
1947 spin_lock_init(&vcpu->arch.local_int.lock);
1948 vcpu->arch.local_int.float_int = &kvm->arch.float_int;
1949 vcpu->arch.local_int.wq = &vcpu->wq;
1950 vcpu->arch.local_int.cpuflags = &vcpu->arch.sie_block->cpuflags;
1951 seqcount_init(&vcpu->arch.cputm_seqcount);
1953 rc = kvm_vcpu_init(vcpu, kvm, id);
1955 goto out_free_sie_block;
1956 VM_EVENT(kvm, 3, "create cpu %d at 0x%pK, sie block at 0x%pK", id, vcpu,
1957 vcpu->arch.sie_block);
1958 trace_kvm_s390_create_vcpu(id, vcpu, vcpu->arch.sie_block);
1962 free_page((unsigned long)(vcpu->arch.sie_block));
1964 kmem_cache_free(kvm_vcpu_cache, vcpu);
1969 int kvm_arch_vcpu_runnable(struct kvm_vcpu *vcpu)
1971 return kvm_s390_vcpu_has_irq(vcpu, 0);
1974 void kvm_s390_vcpu_block(struct kvm_vcpu *vcpu)
1976 atomic_or(PROG_BLOCK_SIE, &vcpu->arch.sie_block->prog20);
1980 void kvm_s390_vcpu_unblock(struct kvm_vcpu *vcpu)
1982 atomic_andnot(PROG_BLOCK_SIE, &vcpu->arch.sie_block->prog20);
1985 static void kvm_s390_vcpu_request(struct kvm_vcpu *vcpu)
1987 atomic_or(PROG_REQUEST, &vcpu->arch.sie_block->prog20);
1991 static void kvm_s390_vcpu_request_handled(struct kvm_vcpu *vcpu)
1993 atomic_andnot(PROG_REQUEST, &vcpu->arch.sie_block->prog20);
1997 * Kick a guest cpu out of SIE and wait until SIE is not running.
1998 * If the CPU is not running (e.g. waiting as idle) the function will
1999 * return immediately. */
2000 void exit_sie(struct kvm_vcpu *vcpu)
2002 atomic_or(CPUSTAT_STOP_INT, &vcpu->arch.sie_block->cpuflags);
2003 while (vcpu->arch.sie_block->prog0c & PROG_IN_SIE)
2007 /* Kick a guest cpu out of SIE to process a request synchronously */
2008 void kvm_s390_sync_request(int req, struct kvm_vcpu *vcpu)
2010 kvm_make_request(req, vcpu);
2011 kvm_s390_vcpu_request(vcpu);
2014 static void kvm_gmap_notifier(struct gmap *gmap, unsigned long start,
2017 struct kvm *kvm = gmap->private;
2018 struct kvm_vcpu *vcpu;
2019 unsigned long prefix;
2022 if (gmap_is_shadow(gmap))
2024 if (start >= 1UL << 31)
2025 /* We are only interested in prefix pages */
2027 kvm_for_each_vcpu(i, vcpu, kvm) {
2028 /* match against both prefix pages */
2029 prefix = kvm_s390_get_prefix(vcpu);
2030 if (prefix <= end && start <= prefix + 2*PAGE_SIZE - 1) {
2031 VCPU_EVENT(vcpu, 2, "gmap notifier for %lx-%lx",
2033 kvm_s390_sync_request(KVM_REQ_MMU_RELOAD, vcpu);
2038 int kvm_arch_vcpu_should_kick(struct kvm_vcpu *vcpu)
2040 /* kvm common code refers to this, but never calls it */
2045 static int kvm_arch_vcpu_ioctl_get_one_reg(struct kvm_vcpu *vcpu,
2046 struct kvm_one_reg *reg)
2051 case KVM_REG_S390_TODPR:
2052 r = put_user(vcpu->arch.sie_block->todpr,
2053 (u32 __user *)reg->addr);
2055 case KVM_REG_S390_EPOCHDIFF:
2056 r = put_user(vcpu->arch.sie_block->epoch,
2057 (u64 __user *)reg->addr);
2059 case KVM_REG_S390_CPU_TIMER:
2060 r = put_user(kvm_s390_get_cpu_timer(vcpu),
2061 (u64 __user *)reg->addr);
2063 case KVM_REG_S390_CLOCK_COMP:
2064 r = put_user(vcpu->arch.sie_block->ckc,
2065 (u64 __user *)reg->addr);
2067 case KVM_REG_S390_PFTOKEN:
2068 r = put_user(vcpu->arch.pfault_token,
2069 (u64 __user *)reg->addr);
2071 case KVM_REG_S390_PFCOMPARE:
2072 r = put_user(vcpu->arch.pfault_compare,
2073 (u64 __user *)reg->addr);
2075 case KVM_REG_S390_PFSELECT:
2076 r = put_user(vcpu->arch.pfault_select,
2077 (u64 __user *)reg->addr);
2079 case KVM_REG_S390_PP:
2080 r = put_user(vcpu->arch.sie_block->pp,
2081 (u64 __user *)reg->addr);
2083 case KVM_REG_S390_GBEA:
2084 r = put_user(vcpu->arch.sie_block->gbea,
2085 (u64 __user *)reg->addr);
2094 static int kvm_arch_vcpu_ioctl_set_one_reg(struct kvm_vcpu *vcpu,
2095 struct kvm_one_reg *reg)
2101 case KVM_REG_S390_TODPR:
2102 r = get_user(vcpu->arch.sie_block->todpr,
2103 (u32 __user *)reg->addr);
2105 case KVM_REG_S390_EPOCHDIFF:
2106 r = get_user(vcpu->arch.sie_block->epoch,
2107 (u64 __user *)reg->addr);
2109 case KVM_REG_S390_CPU_TIMER:
2110 r = get_user(val, (u64 __user *)reg->addr);
2112 kvm_s390_set_cpu_timer(vcpu, val);
2114 case KVM_REG_S390_CLOCK_COMP:
2115 r = get_user(vcpu->arch.sie_block->ckc,
2116 (u64 __user *)reg->addr);
2118 case KVM_REG_S390_PFTOKEN:
2119 r = get_user(vcpu->arch.pfault_token,
2120 (u64 __user *)reg->addr);
2121 if (vcpu->arch.pfault_token == KVM_S390_PFAULT_TOKEN_INVALID)
2122 kvm_clear_async_pf_completion_queue(vcpu);
2124 case KVM_REG_S390_PFCOMPARE:
2125 r = get_user(vcpu->arch.pfault_compare,
2126 (u64 __user *)reg->addr);
2128 case KVM_REG_S390_PFSELECT:
2129 r = get_user(vcpu->arch.pfault_select,
2130 (u64 __user *)reg->addr);
2132 case KVM_REG_S390_PP:
2133 r = get_user(vcpu->arch.sie_block->pp,
2134 (u64 __user *)reg->addr);
2136 case KVM_REG_S390_GBEA:
2137 r = get_user(vcpu->arch.sie_block->gbea,
2138 (u64 __user *)reg->addr);
2147 static int kvm_arch_vcpu_ioctl_initial_reset(struct kvm_vcpu *vcpu)
2149 kvm_s390_vcpu_initial_reset(vcpu);
2153 int kvm_arch_vcpu_ioctl_set_regs(struct kvm_vcpu *vcpu, struct kvm_regs *regs)
2155 memcpy(&vcpu->run->s.regs.gprs, ®s->gprs, sizeof(regs->gprs));
2159 int kvm_arch_vcpu_ioctl_get_regs(struct kvm_vcpu *vcpu, struct kvm_regs *regs)
2161 memcpy(®s->gprs, &vcpu->run->s.regs.gprs, sizeof(regs->gprs));
2165 int kvm_arch_vcpu_ioctl_set_sregs(struct kvm_vcpu *vcpu,
2166 struct kvm_sregs *sregs)
2168 memcpy(&vcpu->run->s.regs.acrs, &sregs->acrs, sizeof(sregs->acrs));
2169 memcpy(&vcpu->arch.sie_block->gcr, &sregs->crs, sizeof(sregs->crs));
2170 restore_access_regs(vcpu->run->s.regs.acrs);
2174 int kvm_arch_vcpu_ioctl_get_sregs(struct kvm_vcpu *vcpu,
2175 struct kvm_sregs *sregs)
2177 memcpy(&sregs->acrs, &vcpu->run->s.regs.acrs, sizeof(sregs->acrs));
2178 memcpy(&sregs->crs, &vcpu->arch.sie_block->gcr, sizeof(sregs->crs));
2182 int kvm_arch_vcpu_ioctl_set_fpu(struct kvm_vcpu *vcpu, struct kvm_fpu *fpu)
2184 /* make sure the new values will be lazily loaded */
2186 if (test_fp_ctl(fpu->fpc))
2188 current->thread.fpu.fpc = fpu->fpc;
2190 convert_fp_to_vx(current->thread.fpu.vxrs, (freg_t *)fpu->fprs);
2192 memcpy(current->thread.fpu.fprs, &fpu->fprs, sizeof(fpu->fprs));
2196 int kvm_arch_vcpu_ioctl_get_fpu(struct kvm_vcpu *vcpu, struct kvm_fpu *fpu)
2198 /* make sure we have the latest values */
2201 convert_vx_to_fp((freg_t *)fpu->fprs, current->thread.fpu.vxrs);
2203 memcpy(fpu->fprs, current->thread.fpu.fprs, sizeof(fpu->fprs));
2204 fpu->fpc = current->thread.fpu.fpc;
2208 static int kvm_arch_vcpu_ioctl_set_initial_psw(struct kvm_vcpu *vcpu, psw_t psw)
2212 if (!is_vcpu_stopped(vcpu))
2215 vcpu->run->psw_mask = psw.mask;
2216 vcpu->run->psw_addr = psw.addr;
2221 int kvm_arch_vcpu_ioctl_translate(struct kvm_vcpu *vcpu,
2222 struct kvm_translation *tr)
2224 return -EINVAL; /* not implemented yet */
2227 #define VALID_GUESTDBG_FLAGS (KVM_GUESTDBG_SINGLESTEP | \
2228 KVM_GUESTDBG_USE_HW_BP | \
2229 KVM_GUESTDBG_ENABLE)
2231 int kvm_arch_vcpu_ioctl_set_guest_debug(struct kvm_vcpu *vcpu,
2232 struct kvm_guest_debug *dbg)
2236 vcpu->guest_debug = 0;
2237 kvm_s390_clear_bp_data(vcpu);
2239 if (dbg->control & ~VALID_GUESTDBG_FLAGS)
2241 if (!sclp.has_gpere)
2244 if (dbg->control & KVM_GUESTDBG_ENABLE) {
2245 vcpu->guest_debug = dbg->control;
2246 /* enforce guest PER */
2247 atomic_or(CPUSTAT_P, &vcpu->arch.sie_block->cpuflags);
2249 if (dbg->control & KVM_GUESTDBG_USE_HW_BP)
2250 rc = kvm_s390_import_bp_data(vcpu, dbg);
2252 atomic_andnot(CPUSTAT_P, &vcpu->arch.sie_block->cpuflags);
2253 vcpu->arch.guestdbg.last_bp = 0;
2257 vcpu->guest_debug = 0;
2258 kvm_s390_clear_bp_data(vcpu);
2259 atomic_andnot(CPUSTAT_P, &vcpu->arch.sie_block->cpuflags);
2265 int kvm_arch_vcpu_ioctl_get_mpstate(struct kvm_vcpu *vcpu,
2266 struct kvm_mp_state *mp_state)
2268 /* CHECK_STOP and LOAD are not supported yet */
2269 return is_vcpu_stopped(vcpu) ? KVM_MP_STATE_STOPPED :
2270 KVM_MP_STATE_OPERATING;
2273 int kvm_arch_vcpu_ioctl_set_mpstate(struct kvm_vcpu *vcpu,
2274 struct kvm_mp_state *mp_state)
2278 /* user space knows about this interface - let it control the state */
2279 vcpu->kvm->arch.user_cpu_state_ctrl = 1;
2281 switch (mp_state->mp_state) {
2282 case KVM_MP_STATE_STOPPED:
2283 kvm_s390_vcpu_stop(vcpu);
2285 case KVM_MP_STATE_OPERATING:
2286 kvm_s390_vcpu_start(vcpu);
2288 case KVM_MP_STATE_LOAD:
2289 case KVM_MP_STATE_CHECK_STOP:
2290 /* fall through - CHECK_STOP and LOAD are not supported yet */
2298 static bool ibs_enabled(struct kvm_vcpu *vcpu)
2300 return atomic_read(&vcpu->arch.sie_block->cpuflags) & CPUSTAT_IBS;
2303 static int kvm_s390_handle_requests(struct kvm_vcpu *vcpu)
2306 kvm_s390_vcpu_request_handled(vcpu);
2307 if (!vcpu->requests)
2310 * We use MMU_RELOAD just to re-arm the ipte notifier for the
2311 * guest prefix page. gmap_mprotect_notify will wait on the ptl lock.
2312 * This ensures that the ipte instruction for this request has
2313 * already finished. We might race against a second unmapper that
2314 * wants to set the blocking bit. Lets just retry the request loop.
2316 if (kvm_check_request(KVM_REQ_MMU_RELOAD, vcpu)) {
2318 rc = gmap_mprotect_notify(vcpu->arch.gmap,
2319 kvm_s390_get_prefix(vcpu),
2320 PAGE_SIZE * 2, PROT_WRITE);
2326 if (kvm_check_request(KVM_REQ_TLB_FLUSH, vcpu)) {
2327 vcpu->arch.sie_block->ihcpu = 0xffff;
2331 if (kvm_check_request(KVM_REQ_ENABLE_IBS, vcpu)) {
2332 if (!ibs_enabled(vcpu)) {
2333 trace_kvm_s390_enable_disable_ibs(vcpu->vcpu_id, 1);
2334 atomic_or(CPUSTAT_IBS,
2335 &vcpu->arch.sie_block->cpuflags);
2340 if (kvm_check_request(KVM_REQ_DISABLE_IBS, vcpu)) {
2341 if (ibs_enabled(vcpu)) {
2342 trace_kvm_s390_enable_disable_ibs(vcpu->vcpu_id, 0);
2343 atomic_andnot(CPUSTAT_IBS,
2344 &vcpu->arch.sie_block->cpuflags);
2349 /* nothing to do, just clear the request */
2350 clear_bit(KVM_REQ_UNHALT, &vcpu->requests);
2355 void kvm_s390_set_tod_clock(struct kvm *kvm, u64 tod)
2357 struct kvm_vcpu *vcpu;
2360 mutex_lock(&kvm->lock);
2362 kvm->arch.epoch = tod - get_tod_clock();
2363 kvm_s390_vcpu_block_all(kvm);
2364 kvm_for_each_vcpu(i, vcpu, kvm)
2365 vcpu->arch.sie_block->epoch = kvm->arch.epoch;
2366 kvm_s390_vcpu_unblock_all(kvm);
2368 mutex_unlock(&kvm->lock);
2372 * kvm_arch_fault_in_page - fault-in guest page if necessary
2373 * @vcpu: The corresponding virtual cpu
2374 * @gpa: Guest physical address
2375 * @writable: Whether the page should be writable or not
2377 * Make sure that a guest page has been faulted-in on the host.
2379 * Return: Zero on success, negative error code otherwise.
2381 long kvm_arch_fault_in_page(struct kvm_vcpu *vcpu, gpa_t gpa, int writable)
2383 return gmap_fault(vcpu->arch.gmap, gpa,
2384 writable ? FAULT_FLAG_WRITE : 0);
2387 static void __kvm_inject_pfault_token(struct kvm_vcpu *vcpu, bool start_token,
2388 unsigned long token)
2390 struct kvm_s390_interrupt inti;
2391 struct kvm_s390_irq irq;
2394 irq.u.ext.ext_params2 = token;
2395 irq.type = KVM_S390_INT_PFAULT_INIT;
2396 WARN_ON_ONCE(kvm_s390_inject_vcpu(vcpu, &irq));
2398 inti.type = KVM_S390_INT_PFAULT_DONE;
2399 inti.parm64 = token;
2400 WARN_ON_ONCE(kvm_s390_inject_vm(vcpu->kvm, &inti));
2404 void kvm_arch_async_page_not_present(struct kvm_vcpu *vcpu,
2405 struct kvm_async_pf *work)
2407 trace_kvm_s390_pfault_init(vcpu, work->arch.pfault_token);
2408 __kvm_inject_pfault_token(vcpu, true, work->arch.pfault_token);
2411 void kvm_arch_async_page_present(struct kvm_vcpu *vcpu,
2412 struct kvm_async_pf *work)
2414 trace_kvm_s390_pfault_done(vcpu, work->arch.pfault_token);
2415 __kvm_inject_pfault_token(vcpu, false, work->arch.pfault_token);
2418 void kvm_arch_async_page_ready(struct kvm_vcpu *vcpu,
2419 struct kvm_async_pf *work)
2421 /* s390 will always inject the page directly */
2424 bool kvm_arch_can_inject_async_page_present(struct kvm_vcpu *vcpu)
2427 * s390 will always inject the page directly,
2428 * but we still want check_async_completion to cleanup
2433 static int kvm_arch_setup_async_pf(struct kvm_vcpu *vcpu)
2436 struct kvm_arch_async_pf arch;
2439 if (vcpu->arch.pfault_token == KVM_S390_PFAULT_TOKEN_INVALID)
2441 if ((vcpu->arch.sie_block->gpsw.mask & vcpu->arch.pfault_select) !=
2442 vcpu->arch.pfault_compare)
2444 if (psw_extint_disabled(vcpu))
2446 if (kvm_s390_vcpu_has_irq(vcpu, 0))
2448 if (!(vcpu->arch.sie_block->gcr[0] & 0x200ul))
2450 if (!vcpu->arch.gmap->pfault_enabled)
2453 hva = gfn_to_hva(vcpu->kvm, gpa_to_gfn(current->thread.gmap_addr));
2454 hva += current->thread.gmap_addr & ~PAGE_MASK;
2455 if (read_guest_real(vcpu, vcpu->arch.pfault_token, &arch.pfault_token, 8))
2458 rc = kvm_setup_async_pf(vcpu, current->thread.gmap_addr, hva, &arch);
2462 static int vcpu_pre_run(struct kvm_vcpu *vcpu)
2467 * On s390 notifications for arriving pages will be delivered directly
2468 * to the guest but the house keeping for completed pfaults is
2469 * handled outside the worker.
2471 kvm_check_async_pf_completion(vcpu);
2473 vcpu->arch.sie_block->gg14 = vcpu->run->s.regs.gprs[14];
2474 vcpu->arch.sie_block->gg15 = vcpu->run->s.regs.gprs[15];
2479 if (test_cpu_flag(CIF_MCCK_PENDING))
2482 if (!kvm_is_ucontrol(vcpu->kvm)) {
2483 rc = kvm_s390_deliver_pending_interrupts(vcpu);
2488 rc = kvm_s390_handle_requests(vcpu);
2492 if (guestdbg_enabled(vcpu)) {
2493 kvm_s390_backup_guest_per_regs(vcpu);
2494 kvm_s390_patch_guest_per_regs(vcpu);
2497 vcpu->arch.sie_block->icptcode = 0;
2498 cpuflags = atomic_read(&vcpu->arch.sie_block->cpuflags);
2499 VCPU_EVENT(vcpu, 6, "entering sie flags %x", cpuflags);
2500 trace_kvm_s390_sie_enter(vcpu, cpuflags);
2505 static int vcpu_post_run_fault_in_sie(struct kvm_vcpu *vcpu)
2507 struct kvm_s390_pgm_info pgm_info = {
2508 .code = PGM_ADDRESSING,
2513 VCPU_EVENT(vcpu, 3, "%s", "fault in sie instruction");
2514 trace_kvm_s390_sie_fault(vcpu);
2517 * We want to inject an addressing exception, which is defined as a
2518 * suppressing or terminating exception. However, since we came here
2519 * by a DAT access exception, the PSW still points to the faulting
2520 * instruction since DAT exceptions are nullifying. So we've got
2521 * to look up the current opcode to get the length of the instruction
2522 * to be able to forward the PSW.
2524 rc = read_guest_instr(vcpu, &opcode, 1);
2525 ilen = insn_length(opcode);
2529 /* Instruction-Fetching Exceptions - we can't detect the ilen.
2530 * Forward by arbitrary ilc, injection will take care of
2531 * nullification if necessary.
2533 pgm_info = vcpu->arch.pgm;
2536 pgm_info.flags = ilen | KVM_S390_PGM_FLAGS_ILC_VALID;
2537 kvm_s390_forward_psw(vcpu, ilen);
2538 return kvm_s390_inject_prog_irq(vcpu, &pgm_info);
2541 static int vcpu_post_run(struct kvm_vcpu *vcpu, int exit_reason)
2543 VCPU_EVENT(vcpu, 6, "exit sie icptcode %d",
2544 vcpu->arch.sie_block->icptcode);
2545 trace_kvm_s390_sie_exit(vcpu, vcpu->arch.sie_block->icptcode);
2547 if (guestdbg_enabled(vcpu))
2548 kvm_s390_restore_guest_per_regs(vcpu);
2550 vcpu->run->s.regs.gprs[14] = vcpu->arch.sie_block->gg14;
2551 vcpu->run->s.regs.gprs[15] = vcpu->arch.sie_block->gg15;
2553 if (vcpu->arch.sie_block->icptcode > 0) {
2554 int rc = kvm_handle_sie_intercept(vcpu);
2556 if (rc != -EOPNOTSUPP)
2558 vcpu->run->exit_reason = KVM_EXIT_S390_SIEIC;
2559 vcpu->run->s390_sieic.icptcode = vcpu->arch.sie_block->icptcode;
2560 vcpu->run->s390_sieic.ipa = vcpu->arch.sie_block->ipa;
2561 vcpu->run->s390_sieic.ipb = vcpu->arch.sie_block->ipb;
2563 } else if (exit_reason != -EFAULT) {
2564 vcpu->stat.exit_null++;
2566 } else if (kvm_is_ucontrol(vcpu->kvm)) {
2567 vcpu->run->exit_reason = KVM_EXIT_S390_UCONTROL;
2568 vcpu->run->s390_ucontrol.trans_exc_code =
2569 current->thread.gmap_addr;
2570 vcpu->run->s390_ucontrol.pgm_code = 0x10;
2572 } else if (current->thread.gmap_pfault) {
2573 trace_kvm_s390_major_guest_pfault(vcpu);
2574 current->thread.gmap_pfault = 0;
2575 if (kvm_arch_setup_async_pf(vcpu))
2577 return kvm_arch_fault_in_page(vcpu, current->thread.gmap_addr, 1);
2579 return vcpu_post_run_fault_in_sie(vcpu);
2582 static int __vcpu_run(struct kvm_vcpu *vcpu)
2584 int rc, exit_reason;
2587 * We try to hold kvm->srcu during most of vcpu_run (except when run-
2588 * ning the guest), so that memslots (and other stuff) are protected
2590 vcpu->srcu_idx = srcu_read_lock(&vcpu->kvm->srcu);
2593 rc = vcpu_pre_run(vcpu);
2597 srcu_read_unlock(&vcpu->kvm->srcu, vcpu->srcu_idx);
2599 * As PF_VCPU will be used in fault handler, between
2600 * guest_enter and guest_exit should be no uaccess.
2602 local_irq_disable();
2603 __kvm_guest_enter();
2604 __disable_cpu_timer_accounting(vcpu);
2606 exit_reason = sie64a(vcpu->arch.sie_block,
2607 vcpu->run->s.regs.gprs);
2608 local_irq_disable();
2609 __enable_cpu_timer_accounting(vcpu);
2612 vcpu->srcu_idx = srcu_read_lock(&vcpu->kvm->srcu);
2614 rc = vcpu_post_run(vcpu, exit_reason);
2615 } while (!signal_pending(current) && !guestdbg_exit_pending(vcpu) && !rc);
2617 srcu_read_unlock(&vcpu->kvm->srcu, vcpu->srcu_idx);
2621 static void sync_regs(struct kvm_vcpu *vcpu, struct kvm_run *kvm_run)
2623 vcpu->arch.sie_block->gpsw.mask = kvm_run->psw_mask;
2624 vcpu->arch.sie_block->gpsw.addr = kvm_run->psw_addr;
2625 if (kvm_run->kvm_dirty_regs & KVM_SYNC_PREFIX)
2626 kvm_s390_set_prefix(vcpu, kvm_run->s.regs.prefix);
2627 if (kvm_run->kvm_dirty_regs & KVM_SYNC_CRS) {
2628 memcpy(&vcpu->arch.sie_block->gcr, &kvm_run->s.regs.crs, 128);
2629 /* some control register changes require a tlb flush */
2630 kvm_make_request(KVM_REQ_TLB_FLUSH, vcpu);
2632 if (kvm_run->kvm_dirty_regs & KVM_SYNC_ARCH0) {
2633 kvm_s390_set_cpu_timer(vcpu, kvm_run->s.regs.cputm);
2634 vcpu->arch.sie_block->ckc = kvm_run->s.regs.ckc;
2635 vcpu->arch.sie_block->todpr = kvm_run->s.regs.todpr;
2636 vcpu->arch.sie_block->pp = kvm_run->s.regs.pp;
2637 vcpu->arch.sie_block->gbea = kvm_run->s.regs.gbea;
2639 if (kvm_run->kvm_dirty_regs & KVM_SYNC_PFAULT) {
2640 vcpu->arch.pfault_token = kvm_run->s.regs.pft;
2641 vcpu->arch.pfault_select = kvm_run->s.regs.pfs;
2642 vcpu->arch.pfault_compare = kvm_run->s.regs.pfc;
2643 if (vcpu->arch.pfault_token == KVM_S390_PFAULT_TOKEN_INVALID)
2644 kvm_clear_async_pf_completion_queue(vcpu);
2646 kvm_run->kvm_dirty_regs = 0;
2649 static void store_regs(struct kvm_vcpu *vcpu, struct kvm_run *kvm_run)
2651 kvm_run->psw_mask = vcpu->arch.sie_block->gpsw.mask;
2652 kvm_run->psw_addr = vcpu->arch.sie_block->gpsw.addr;
2653 kvm_run->s.regs.prefix = kvm_s390_get_prefix(vcpu);
2654 memcpy(&kvm_run->s.regs.crs, &vcpu->arch.sie_block->gcr, 128);
2655 kvm_run->s.regs.cputm = kvm_s390_get_cpu_timer(vcpu);
2656 kvm_run->s.regs.ckc = vcpu->arch.sie_block->ckc;
2657 kvm_run->s.regs.todpr = vcpu->arch.sie_block->todpr;
2658 kvm_run->s.regs.pp = vcpu->arch.sie_block->pp;
2659 kvm_run->s.regs.gbea = vcpu->arch.sie_block->gbea;
2660 kvm_run->s.regs.pft = vcpu->arch.pfault_token;
2661 kvm_run->s.regs.pfs = vcpu->arch.pfault_select;
2662 kvm_run->s.regs.pfc = vcpu->arch.pfault_compare;
2665 int kvm_arch_vcpu_ioctl_run(struct kvm_vcpu *vcpu, struct kvm_run *kvm_run)
2670 if (guestdbg_exit_pending(vcpu)) {
2671 kvm_s390_prepare_debug_exit(vcpu);
2675 if (vcpu->sigset_active)
2676 sigprocmask(SIG_SETMASK, &vcpu->sigset, &sigsaved);
2678 if (!kvm_s390_user_cpu_state_ctrl(vcpu->kvm)) {
2679 kvm_s390_vcpu_start(vcpu);
2680 } else if (is_vcpu_stopped(vcpu)) {
2681 pr_err_ratelimited("can't run stopped vcpu %d\n",
2686 sync_regs(vcpu, kvm_run);
2687 enable_cpu_timer_accounting(vcpu);
2690 rc = __vcpu_run(vcpu);
2692 if (signal_pending(current) && !rc) {
2693 kvm_run->exit_reason = KVM_EXIT_INTR;
2697 if (guestdbg_exit_pending(vcpu) && !rc) {
2698 kvm_s390_prepare_debug_exit(vcpu);
2702 if (rc == -EREMOTE) {
2703 /* userspace support is needed, kvm_run has been prepared */
2707 disable_cpu_timer_accounting(vcpu);
2708 store_regs(vcpu, kvm_run);
2710 if (vcpu->sigset_active)
2711 sigprocmask(SIG_SETMASK, &sigsaved, NULL);
2713 vcpu->stat.exit_userspace++;
2718 * store status at address
2719 * we use have two special cases:
2720 * KVM_S390_STORE_STATUS_NOADDR: -> 0x1200 on 64 bit
2721 * KVM_S390_STORE_STATUS_PREFIXED: -> prefix
2723 int kvm_s390_store_status_unloaded(struct kvm_vcpu *vcpu, unsigned long gpa)
2725 unsigned char archmode = 1;
2726 freg_t fprs[NUM_FPRS];
2731 px = kvm_s390_get_prefix(vcpu);
2732 if (gpa == KVM_S390_STORE_STATUS_NOADDR) {
2733 if (write_guest_abs(vcpu, 163, &archmode, 1))
2736 } else if (gpa == KVM_S390_STORE_STATUS_PREFIXED) {
2737 if (write_guest_real(vcpu, 163, &archmode, 1))
2741 gpa -= __LC_FPREGS_SAVE_AREA;
2743 /* manually convert vector registers if necessary */
2744 if (MACHINE_HAS_VX) {
2745 convert_vx_to_fp(fprs, (__vector128 *) vcpu->run->s.regs.vrs);
2746 rc = write_guest_abs(vcpu, gpa + __LC_FPREGS_SAVE_AREA,
2749 rc = write_guest_abs(vcpu, gpa + __LC_FPREGS_SAVE_AREA,
2750 vcpu->run->s.regs.fprs, 128);
2752 rc |= write_guest_abs(vcpu, gpa + __LC_GPREGS_SAVE_AREA,
2753 vcpu->run->s.regs.gprs, 128);
2754 rc |= write_guest_abs(vcpu, gpa + __LC_PSW_SAVE_AREA,
2755 &vcpu->arch.sie_block->gpsw, 16);
2756 rc |= write_guest_abs(vcpu, gpa + __LC_PREFIX_SAVE_AREA,
2758 rc |= write_guest_abs(vcpu, gpa + __LC_FP_CREG_SAVE_AREA,
2759 &vcpu->run->s.regs.fpc, 4);
2760 rc |= write_guest_abs(vcpu, gpa + __LC_TOD_PROGREG_SAVE_AREA,
2761 &vcpu->arch.sie_block->todpr, 4);
2762 cputm = kvm_s390_get_cpu_timer(vcpu);
2763 rc |= write_guest_abs(vcpu, gpa + __LC_CPU_TIMER_SAVE_AREA,
2765 clkcomp = vcpu->arch.sie_block->ckc >> 8;
2766 rc |= write_guest_abs(vcpu, gpa + __LC_CLOCK_COMP_SAVE_AREA,
2768 rc |= write_guest_abs(vcpu, gpa + __LC_AREGS_SAVE_AREA,
2769 &vcpu->run->s.regs.acrs, 64);
2770 rc |= write_guest_abs(vcpu, gpa + __LC_CREGS_SAVE_AREA,
2771 &vcpu->arch.sie_block->gcr, 128);
2772 return rc ? -EFAULT : 0;
2775 int kvm_s390_vcpu_store_status(struct kvm_vcpu *vcpu, unsigned long addr)
2778 * The guest FPRS and ACRS are in the host FPRS/ACRS due to the lazy
2779 * copying in vcpu load/put. Lets update our copies before we save
2780 * it into the save area
2783 vcpu->run->s.regs.fpc = current->thread.fpu.fpc;
2784 save_access_regs(vcpu->run->s.regs.acrs);
2786 return kvm_s390_store_status_unloaded(vcpu, addr);
2790 * store additional status at address
2792 int kvm_s390_store_adtl_status_unloaded(struct kvm_vcpu *vcpu,
2795 /* Only bits 0-53 are used for address formation */
2796 if (!(gpa & ~0x3ff))
2799 return write_guest_abs(vcpu, gpa & ~0x3ff,
2800 (void *)&vcpu->run->s.regs.vrs, 512);
2803 int kvm_s390_vcpu_store_adtl_status(struct kvm_vcpu *vcpu, unsigned long addr)
2805 if (!test_kvm_facility(vcpu->kvm, 129))
2809 * The guest VXRS are in the host VXRs due to the lazy
2810 * copying in vcpu load/put. We can simply call save_fpu_regs()
2811 * to save the current register state because we are in the
2812 * middle of a load/put cycle.
2814 * Let's update our copies before we save it into the save area.
2818 return kvm_s390_store_adtl_status_unloaded(vcpu, addr);
2821 static void __disable_ibs_on_vcpu(struct kvm_vcpu *vcpu)
2823 kvm_check_request(KVM_REQ_ENABLE_IBS, vcpu);
2824 kvm_s390_sync_request(KVM_REQ_DISABLE_IBS, vcpu);
2827 static void __disable_ibs_on_all_vcpus(struct kvm *kvm)
2830 struct kvm_vcpu *vcpu;
2832 kvm_for_each_vcpu(i, vcpu, kvm) {
2833 __disable_ibs_on_vcpu(vcpu);
2837 static void __enable_ibs_on_vcpu(struct kvm_vcpu *vcpu)
2841 kvm_check_request(KVM_REQ_DISABLE_IBS, vcpu);
2842 kvm_s390_sync_request(KVM_REQ_ENABLE_IBS, vcpu);
2845 void kvm_s390_vcpu_start(struct kvm_vcpu *vcpu)
2847 int i, online_vcpus, started_vcpus = 0;
2849 if (!is_vcpu_stopped(vcpu))
2852 trace_kvm_s390_vcpu_start_stop(vcpu->vcpu_id, 1);
2853 /* Only one cpu at a time may enter/leave the STOPPED state. */
2854 spin_lock(&vcpu->kvm->arch.start_stop_lock);
2855 online_vcpus = atomic_read(&vcpu->kvm->online_vcpus);
2857 for (i = 0; i < online_vcpus; i++) {
2858 if (!is_vcpu_stopped(vcpu->kvm->vcpus[i]))
2862 if (started_vcpus == 0) {
2863 /* we're the only active VCPU -> speed it up */
2864 __enable_ibs_on_vcpu(vcpu);
2865 } else if (started_vcpus == 1) {
2867 * As we are starting a second VCPU, we have to disable
2868 * the IBS facility on all VCPUs to remove potentially
2869 * oustanding ENABLE requests.
2871 __disable_ibs_on_all_vcpus(vcpu->kvm);
2874 atomic_andnot(CPUSTAT_STOPPED, &vcpu->arch.sie_block->cpuflags);
2876 * Another VCPU might have used IBS while we were offline.
2877 * Let's play safe and flush the VCPU at startup.
2879 kvm_make_request(KVM_REQ_TLB_FLUSH, vcpu);
2880 spin_unlock(&vcpu->kvm->arch.start_stop_lock);
2884 void kvm_s390_vcpu_stop(struct kvm_vcpu *vcpu)
2886 int i, online_vcpus, started_vcpus = 0;
2887 struct kvm_vcpu *started_vcpu = NULL;
2889 if (is_vcpu_stopped(vcpu))
2892 trace_kvm_s390_vcpu_start_stop(vcpu->vcpu_id, 0);
2893 /* Only one cpu at a time may enter/leave the STOPPED state. */
2894 spin_lock(&vcpu->kvm->arch.start_stop_lock);
2895 online_vcpus = atomic_read(&vcpu->kvm->online_vcpus);
2897 /* SIGP STOP and SIGP STOP AND STORE STATUS has been fully processed */
2898 kvm_s390_clear_stop_irq(vcpu);
2900 atomic_or(CPUSTAT_STOPPED, &vcpu->arch.sie_block->cpuflags);
2901 __disable_ibs_on_vcpu(vcpu);
2903 for (i = 0; i < online_vcpus; i++) {
2904 if (!is_vcpu_stopped(vcpu->kvm->vcpus[i])) {
2906 started_vcpu = vcpu->kvm->vcpus[i];
2910 if (started_vcpus == 1) {
2912 * As we only have one VCPU left, we want to enable the
2913 * IBS facility for that VCPU to speed it up.
2915 __enable_ibs_on_vcpu(started_vcpu);
2918 spin_unlock(&vcpu->kvm->arch.start_stop_lock);
2922 static int kvm_vcpu_ioctl_enable_cap(struct kvm_vcpu *vcpu,
2923 struct kvm_enable_cap *cap)
2931 case KVM_CAP_S390_CSS_SUPPORT:
2932 if (!vcpu->kvm->arch.css_support) {
2933 vcpu->kvm->arch.css_support = 1;
2934 VM_EVENT(vcpu->kvm, 3, "%s", "ENABLE: CSS support");
2935 trace_kvm_s390_enable_css(vcpu->kvm);
2946 static long kvm_s390_guest_mem_op(struct kvm_vcpu *vcpu,
2947 struct kvm_s390_mem_op *mop)
2949 void __user *uaddr = (void __user *)mop->buf;
2950 void *tmpbuf = NULL;
2952 const u64 supported_flags = KVM_S390_MEMOP_F_INJECT_EXCEPTION
2953 | KVM_S390_MEMOP_F_CHECK_ONLY;
2955 if (mop->flags & ~supported_flags)
2958 if (mop->size > MEM_OP_MAX_SIZE)
2961 if (!(mop->flags & KVM_S390_MEMOP_F_CHECK_ONLY)) {
2962 tmpbuf = vmalloc(mop->size);
2967 srcu_idx = srcu_read_lock(&vcpu->kvm->srcu);
2970 case KVM_S390_MEMOP_LOGICAL_READ:
2971 if (mop->flags & KVM_S390_MEMOP_F_CHECK_ONLY) {
2972 r = check_gva_range(vcpu, mop->gaddr, mop->ar,
2973 mop->size, GACC_FETCH);
2976 r = read_guest(vcpu, mop->gaddr, mop->ar, tmpbuf, mop->size);
2978 if (copy_to_user(uaddr, tmpbuf, mop->size))
2982 case KVM_S390_MEMOP_LOGICAL_WRITE:
2983 if (mop->flags & KVM_S390_MEMOP_F_CHECK_ONLY) {
2984 r = check_gva_range(vcpu, mop->gaddr, mop->ar,
2985 mop->size, GACC_STORE);
2988 if (copy_from_user(tmpbuf, uaddr, mop->size)) {
2992 r = write_guest(vcpu, mop->gaddr, mop->ar, tmpbuf, mop->size);
2998 srcu_read_unlock(&vcpu->kvm->srcu, srcu_idx);
3000 if (r > 0 && (mop->flags & KVM_S390_MEMOP_F_INJECT_EXCEPTION) != 0)
3001 kvm_s390_inject_prog_irq(vcpu, &vcpu->arch.pgm);
3007 long kvm_arch_vcpu_ioctl(struct file *filp,
3008 unsigned int ioctl, unsigned long arg)
3010 struct kvm_vcpu *vcpu = filp->private_data;
3011 void __user *argp = (void __user *)arg;
3016 case KVM_S390_IRQ: {
3017 struct kvm_s390_irq s390irq;
3020 if (copy_from_user(&s390irq, argp, sizeof(s390irq)))
3022 r = kvm_s390_inject_vcpu(vcpu, &s390irq);
3025 case KVM_S390_INTERRUPT: {
3026 struct kvm_s390_interrupt s390int;
3027 struct kvm_s390_irq s390irq;
3030 if (copy_from_user(&s390int, argp, sizeof(s390int)))
3032 if (s390int_to_s390irq(&s390int, &s390irq))
3034 r = kvm_s390_inject_vcpu(vcpu, &s390irq);
3037 case KVM_S390_STORE_STATUS:
3038 idx = srcu_read_lock(&vcpu->kvm->srcu);
3039 r = kvm_s390_vcpu_store_status(vcpu, arg);
3040 srcu_read_unlock(&vcpu->kvm->srcu, idx);
3042 case KVM_S390_SET_INITIAL_PSW: {
3046 if (copy_from_user(&psw, argp, sizeof(psw)))
3048 r = kvm_arch_vcpu_ioctl_set_initial_psw(vcpu, psw);
3051 case KVM_S390_INITIAL_RESET:
3052 r = kvm_arch_vcpu_ioctl_initial_reset(vcpu);
3054 case KVM_SET_ONE_REG:
3055 case KVM_GET_ONE_REG: {
3056 struct kvm_one_reg reg;
3058 if (copy_from_user(®, argp, sizeof(reg)))
3060 if (ioctl == KVM_SET_ONE_REG)
3061 r = kvm_arch_vcpu_ioctl_set_one_reg(vcpu, ®);
3063 r = kvm_arch_vcpu_ioctl_get_one_reg(vcpu, ®);
3066 #ifdef CONFIG_KVM_S390_UCONTROL
3067 case KVM_S390_UCAS_MAP: {
3068 struct kvm_s390_ucas_mapping ucasmap;
3070 if (copy_from_user(&ucasmap, argp, sizeof(ucasmap))) {
3075 if (!kvm_is_ucontrol(vcpu->kvm)) {
3080 r = gmap_map_segment(vcpu->arch.gmap, ucasmap.user_addr,
3081 ucasmap.vcpu_addr, ucasmap.length);
3084 case KVM_S390_UCAS_UNMAP: {
3085 struct kvm_s390_ucas_mapping ucasmap;
3087 if (copy_from_user(&ucasmap, argp, sizeof(ucasmap))) {
3092 if (!kvm_is_ucontrol(vcpu->kvm)) {
3097 r = gmap_unmap_segment(vcpu->arch.gmap, ucasmap.vcpu_addr,
3102 case KVM_S390_VCPU_FAULT: {
3103 r = gmap_fault(vcpu->arch.gmap, arg, 0);
3106 case KVM_ENABLE_CAP:
3108 struct kvm_enable_cap cap;
3110 if (copy_from_user(&cap, argp, sizeof(cap)))
3112 r = kvm_vcpu_ioctl_enable_cap(vcpu, &cap);
3115 case KVM_S390_MEM_OP: {
3116 struct kvm_s390_mem_op mem_op;
3118 if (copy_from_user(&mem_op, argp, sizeof(mem_op)) == 0)
3119 r = kvm_s390_guest_mem_op(vcpu, &mem_op);
3124 case KVM_S390_SET_IRQ_STATE: {
3125 struct kvm_s390_irq_state irq_state;
3128 if (copy_from_user(&irq_state, argp, sizeof(irq_state)))
3130 if (irq_state.len > VCPU_IRQS_MAX_BUF ||
3131 irq_state.len == 0 ||
3132 irq_state.len % sizeof(struct kvm_s390_irq) > 0) {
3136 r = kvm_s390_set_irq_state(vcpu,
3137 (void __user *) irq_state.buf,
3141 case KVM_S390_GET_IRQ_STATE: {
3142 struct kvm_s390_irq_state irq_state;
3145 if (copy_from_user(&irq_state, argp, sizeof(irq_state)))
3147 if (irq_state.len == 0) {
3151 r = kvm_s390_get_irq_state(vcpu,
3152 (__u8 __user *) irq_state.buf,
3162 int kvm_arch_vcpu_fault(struct kvm_vcpu *vcpu, struct vm_fault *vmf)
3164 #ifdef CONFIG_KVM_S390_UCONTROL
3165 if ((vmf->pgoff == KVM_S390_SIE_PAGE_OFFSET)
3166 && (kvm_is_ucontrol(vcpu->kvm))) {
3167 vmf->page = virt_to_page(vcpu->arch.sie_block);
3168 get_page(vmf->page);
3172 return VM_FAULT_SIGBUS;
3175 int kvm_arch_create_memslot(struct kvm *kvm, struct kvm_memory_slot *slot,
3176 unsigned long npages)
3181 /* Section: memory related */
3182 int kvm_arch_prepare_memory_region(struct kvm *kvm,
3183 struct kvm_memory_slot *memslot,
3184 const struct kvm_userspace_memory_region *mem,
3185 enum kvm_mr_change change)
3187 /* A few sanity checks. We can have memory slots which have to be
3188 located/ended at a segment boundary (1MB). The memory in userland is
3189 ok to be fragmented into various different vmas. It is okay to mmap()
3190 and munmap() stuff in this slot after doing this call at any time */
3192 if (mem->userspace_addr & 0xffffful)
3195 if (mem->memory_size & 0xffffful)
3198 if (mem->guest_phys_addr + mem->memory_size > kvm->arch.mem_limit)
3204 void kvm_arch_commit_memory_region(struct kvm *kvm,
3205 const struct kvm_userspace_memory_region *mem,
3206 const struct kvm_memory_slot *old,
3207 const struct kvm_memory_slot *new,
3208 enum kvm_mr_change change)
3212 /* If the basics of the memslot do not change, we do not want
3213 * to update the gmap. Every update causes several unnecessary
3214 * segment translation exceptions. This is usually handled just
3215 * fine by the normal fault handler + gmap, but it will also
3216 * cause faults on the prefix page of running guest CPUs.
3218 if (old->userspace_addr == mem->userspace_addr &&
3219 old->base_gfn * PAGE_SIZE == mem->guest_phys_addr &&
3220 old->npages * PAGE_SIZE == mem->memory_size)
3223 rc = gmap_map_segment(kvm->arch.gmap, mem->userspace_addr,
3224 mem->guest_phys_addr, mem->memory_size);
3226 pr_warn("failed to commit memory region\n");
3230 static inline unsigned long nonhyp_mask(int i)
3232 unsigned int nonhyp_fai = (sclp.hmfai << i * 2) >> 30;
3234 return 0x0000ffffffffffffUL >> (nonhyp_fai << 4);
3237 void kvm_arch_vcpu_block_finish(struct kvm_vcpu *vcpu)
3239 vcpu->valid_wakeup = false;
3242 static int __init kvm_s390_init(void)
3246 if (!sclp.has_sief2) {
3247 pr_info("SIE not available\n");
3251 for (i = 0; i < 16; i++)
3252 kvm_s390_fac_list_mask[i] |=
3253 S390_lowcore.stfle_fac_list[i] & nonhyp_mask(i);
3255 return kvm_init(NULL, sizeof(struct kvm_vcpu), 0, THIS_MODULE);
3258 static void __exit kvm_s390_exit(void)
3263 module_init(kvm_s390_init);
3264 module_exit(kvm_s390_exit);
3267 * Enable autoloading of the kvm module.
3268 * Note that we add the module alias here instead of virt/kvm/kvm_main.c
3269 * since x86 takes a different approach.
3271 #include <linux/miscdevice.h>
3272 MODULE_ALIAS_MISCDEV(KVM_MINOR);
3273 MODULE_ALIAS("devname:kvm");