Linux 3.16-rc2
[linux/fpc-iii.git] / arch / s390 / kvm / kvm-s390.c
blob2f3e14fe91a4882d0c5ed5599e1d6f0da2f750f0
1 /*
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>
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/slab.h>
26 #include <linux/timer.h>
27 #include <asm/asm-offsets.h>
28 #include <asm/lowcore.h>
29 #include <asm/pgtable.h>
30 #include <asm/nmi.h>
31 #include <asm/switch_to.h>
32 #include <asm/facility.h>
33 #include <asm/sclp.h>
34 #include "kvm-s390.h"
35 #include "gaccess.h"
37 #define CREATE_TRACE_POINTS
38 #include "trace.h"
39 #include "trace-s390.h"
41 #define VCPU_STAT(x) offsetof(struct kvm_vcpu, stat.x), KVM_STAT_VCPU
43 struct kvm_stats_debugfs_item debugfs_entries[] = {
44 { "userspace_handled", VCPU_STAT(exit_userspace) },
45 { "exit_null", VCPU_STAT(exit_null) },
46 { "exit_validity", VCPU_STAT(exit_validity) },
47 { "exit_stop_request", VCPU_STAT(exit_stop_request) },
48 { "exit_external_request", VCPU_STAT(exit_external_request) },
49 { "exit_external_interrupt", VCPU_STAT(exit_external_interrupt) },
50 { "exit_instruction", VCPU_STAT(exit_instruction) },
51 { "exit_program_interruption", VCPU_STAT(exit_program_interruption) },
52 { "exit_instr_and_program_int", VCPU_STAT(exit_instr_and_program) },
53 { "instruction_lctlg", VCPU_STAT(instruction_lctlg) },
54 { "instruction_lctl", VCPU_STAT(instruction_lctl) },
55 { "instruction_stctl", VCPU_STAT(instruction_stctl) },
56 { "instruction_stctg", VCPU_STAT(instruction_stctg) },
57 { "deliver_emergency_signal", VCPU_STAT(deliver_emergency_signal) },
58 { "deliver_external_call", VCPU_STAT(deliver_external_call) },
59 { "deliver_service_signal", VCPU_STAT(deliver_service_signal) },
60 { "deliver_virtio_interrupt", VCPU_STAT(deliver_virtio_interrupt) },
61 { "deliver_stop_signal", VCPU_STAT(deliver_stop_signal) },
62 { "deliver_prefix_signal", VCPU_STAT(deliver_prefix_signal) },
63 { "deliver_restart_signal", VCPU_STAT(deliver_restart_signal) },
64 { "deliver_program_interruption", VCPU_STAT(deliver_program_int) },
65 { "exit_wait_state", VCPU_STAT(exit_wait_state) },
66 { "instruction_pfmf", VCPU_STAT(instruction_pfmf) },
67 { "instruction_stidp", VCPU_STAT(instruction_stidp) },
68 { "instruction_spx", VCPU_STAT(instruction_spx) },
69 { "instruction_stpx", VCPU_STAT(instruction_stpx) },
70 { "instruction_stap", VCPU_STAT(instruction_stap) },
71 { "instruction_storage_key", VCPU_STAT(instruction_storage_key) },
72 { "instruction_ipte_interlock", VCPU_STAT(instruction_ipte_interlock) },
73 { "instruction_stsch", VCPU_STAT(instruction_stsch) },
74 { "instruction_chsc", VCPU_STAT(instruction_chsc) },
75 { "instruction_essa", VCPU_STAT(instruction_essa) },
76 { "instruction_stsi", VCPU_STAT(instruction_stsi) },
77 { "instruction_stfl", VCPU_STAT(instruction_stfl) },
78 { "instruction_tprot", VCPU_STAT(instruction_tprot) },
79 { "instruction_sigp_sense", VCPU_STAT(instruction_sigp_sense) },
80 { "instruction_sigp_sense_running", VCPU_STAT(instruction_sigp_sense_running) },
81 { "instruction_sigp_external_call", VCPU_STAT(instruction_sigp_external_call) },
82 { "instruction_sigp_emergency", VCPU_STAT(instruction_sigp_emergency) },
83 { "instruction_sigp_stop", VCPU_STAT(instruction_sigp_stop) },
84 { "instruction_sigp_set_arch", VCPU_STAT(instruction_sigp_arch) },
85 { "instruction_sigp_set_prefix", VCPU_STAT(instruction_sigp_prefix) },
86 { "instruction_sigp_restart", VCPU_STAT(instruction_sigp_restart) },
87 { "diagnose_10", VCPU_STAT(diagnose_10) },
88 { "diagnose_44", VCPU_STAT(diagnose_44) },
89 { "diagnose_9c", VCPU_STAT(diagnose_9c) },
90 { NULL }
93 unsigned long *vfacilities;
94 static struct gmap_notifier gmap_notifier;
96 /* test availability of vfacility */
97 int test_vfacility(unsigned long nr)
99 return __test_facility(nr, (void *) vfacilities);
102 /* Section: not file related */
103 int kvm_arch_hardware_enable(void *garbage)
105 /* every s390 is virtualization enabled ;-) */
106 return 0;
109 void kvm_arch_hardware_disable(void *garbage)
113 static void kvm_gmap_notifier(struct gmap *gmap, unsigned long address);
115 int kvm_arch_hardware_setup(void)
117 gmap_notifier.notifier_call = kvm_gmap_notifier;
118 gmap_register_ipte_notifier(&gmap_notifier);
119 return 0;
122 void kvm_arch_hardware_unsetup(void)
124 gmap_unregister_ipte_notifier(&gmap_notifier);
127 void kvm_arch_check_processor_compat(void *rtn)
131 int kvm_arch_init(void *opaque)
133 return 0;
136 void kvm_arch_exit(void)
140 /* Section: device related */
141 long kvm_arch_dev_ioctl(struct file *filp,
142 unsigned int ioctl, unsigned long arg)
144 if (ioctl == KVM_S390_ENABLE_SIE)
145 return s390_enable_sie();
146 return -EINVAL;
149 int kvm_dev_ioctl_check_extension(long ext)
151 int r;
153 switch (ext) {
154 case KVM_CAP_S390_PSW:
155 case KVM_CAP_S390_GMAP:
156 case KVM_CAP_SYNC_MMU:
157 #ifdef CONFIG_KVM_S390_UCONTROL
158 case KVM_CAP_S390_UCONTROL:
159 #endif
160 case KVM_CAP_ASYNC_PF:
161 case KVM_CAP_SYNC_REGS:
162 case KVM_CAP_ONE_REG:
163 case KVM_CAP_ENABLE_CAP:
164 case KVM_CAP_S390_CSS_SUPPORT:
165 case KVM_CAP_IRQFD:
166 case KVM_CAP_IOEVENTFD:
167 case KVM_CAP_DEVICE_CTRL:
168 case KVM_CAP_ENABLE_CAP_VM:
169 case KVM_CAP_VM_ATTRIBUTES:
170 r = 1;
171 break;
172 case KVM_CAP_NR_VCPUS:
173 case KVM_CAP_MAX_VCPUS:
174 r = KVM_MAX_VCPUS;
175 break;
176 case KVM_CAP_NR_MEMSLOTS:
177 r = KVM_USER_MEM_SLOTS;
178 break;
179 case KVM_CAP_S390_COW:
180 r = MACHINE_HAS_ESOP;
181 break;
182 default:
183 r = 0;
185 return r;
188 static void kvm_s390_sync_dirty_log(struct kvm *kvm,
189 struct kvm_memory_slot *memslot)
191 gfn_t cur_gfn, last_gfn;
192 unsigned long address;
193 struct gmap *gmap = kvm->arch.gmap;
195 down_read(&gmap->mm->mmap_sem);
196 /* Loop over all guest pages */
197 last_gfn = memslot->base_gfn + memslot->npages;
198 for (cur_gfn = memslot->base_gfn; cur_gfn <= last_gfn; cur_gfn++) {
199 address = gfn_to_hva_memslot(memslot, cur_gfn);
201 if (gmap_test_and_clear_dirty(address, gmap))
202 mark_page_dirty(kvm, cur_gfn);
204 up_read(&gmap->mm->mmap_sem);
207 /* Section: vm related */
209 * Get (and clear) the dirty memory log for a memory slot.
211 int kvm_vm_ioctl_get_dirty_log(struct kvm *kvm,
212 struct kvm_dirty_log *log)
214 int r;
215 unsigned long n;
216 struct kvm_memory_slot *memslot;
217 int is_dirty = 0;
219 mutex_lock(&kvm->slots_lock);
221 r = -EINVAL;
222 if (log->slot >= KVM_USER_MEM_SLOTS)
223 goto out;
225 memslot = id_to_memslot(kvm->memslots, log->slot);
226 r = -ENOENT;
227 if (!memslot->dirty_bitmap)
228 goto out;
230 kvm_s390_sync_dirty_log(kvm, memslot);
231 r = kvm_get_dirty_log(kvm, log, &is_dirty);
232 if (r)
233 goto out;
235 /* Clear the dirty log */
236 if (is_dirty) {
237 n = kvm_dirty_bitmap_bytes(memslot);
238 memset(memslot->dirty_bitmap, 0, n);
240 r = 0;
241 out:
242 mutex_unlock(&kvm->slots_lock);
243 return r;
246 static int kvm_vm_ioctl_enable_cap(struct kvm *kvm, struct kvm_enable_cap *cap)
248 int r;
250 if (cap->flags)
251 return -EINVAL;
253 switch (cap->cap) {
254 case KVM_CAP_S390_IRQCHIP:
255 kvm->arch.use_irqchip = 1;
256 r = 0;
257 break;
258 default:
259 r = -EINVAL;
260 break;
262 return r;
265 static int kvm_s390_mem_control(struct kvm *kvm, struct kvm_device_attr *attr)
267 int ret;
268 unsigned int idx;
269 switch (attr->attr) {
270 case KVM_S390_VM_MEM_ENABLE_CMMA:
271 ret = -EBUSY;
272 mutex_lock(&kvm->lock);
273 if (atomic_read(&kvm->online_vcpus) == 0) {
274 kvm->arch.use_cmma = 1;
275 ret = 0;
277 mutex_unlock(&kvm->lock);
278 break;
279 case KVM_S390_VM_MEM_CLR_CMMA:
280 mutex_lock(&kvm->lock);
281 idx = srcu_read_lock(&kvm->srcu);
282 page_table_reset_pgste(kvm->arch.gmap->mm, 0, TASK_SIZE, false);
283 srcu_read_unlock(&kvm->srcu, idx);
284 mutex_unlock(&kvm->lock);
285 ret = 0;
286 break;
287 default:
288 ret = -ENXIO;
289 break;
291 return ret;
294 static int kvm_s390_vm_set_attr(struct kvm *kvm, struct kvm_device_attr *attr)
296 int ret;
298 switch (attr->group) {
299 case KVM_S390_VM_MEM_CTRL:
300 ret = kvm_s390_mem_control(kvm, attr);
301 break;
302 default:
303 ret = -ENXIO;
304 break;
307 return ret;
310 static int kvm_s390_vm_get_attr(struct kvm *kvm, struct kvm_device_attr *attr)
312 return -ENXIO;
315 static int kvm_s390_vm_has_attr(struct kvm *kvm, struct kvm_device_attr *attr)
317 int ret;
319 switch (attr->group) {
320 case KVM_S390_VM_MEM_CTRL:
321 switch (attr->attr) {
322 case KVM_S390_VM_MEM_ENABLE_CMMA:
323 case KVM_S390_VM_MEM_CLR_CMMA:
324 ret = 0;
325 break;
326 default:
327 ret = -ENXIO;
328 break;
330 break;
331 default:
332 ret = -ENXIO;
333 break;
336 return ret;
339 long kvm_arch_vm_ioctl(struct file *filp,
340 unsigned int ioctl, unsigned long arg)
342 struct kvm *kvm = filp->private_data;
343 void __user *argp = (void __user *)arg;
344 struct kvm_device_attr attr;
345 int r;
347 switch (ioctl) {
348 case KVM_S390_INTERRUPT: {
349 struct kvm_s390_interrupt s390int;
351 r = -EFAULT;
352 if (copy_from_user(&s390int, argp, sizeof(s390int)))
353 break;
354 r = kvm_s390_inject_vm(kvm, &s390int);
355 break;
357 case KVM_ENABLE_CAP: {
358 struct kvm_enable_cap cap;
359 r = -EFAULT;
360 if (copy_from_user(&cap, argp, sizeof(cap)))
361 break;
362 r = kvm_vm_ioctl_enable_cap(kvm, &cap);
363 break;
365 case KVM_CREATE_IRQCHIP: {
366 struct kvm_irq_routing_entry routing;
368 r = -EINVAL;
369 if (kvm->arch.use_irqchip) {
370 /* Set up dummy routing. */
371 memset(&routing, 0, sizeof(routing));
372 kvm_set_irq_routing(kvm, &routing, 0, 0);
373 r = 0;
375 break;
377 case KVM_SET_DEVICE_ATTR: {
378 r = -EFAULT;
379 if (copy_from_user(&attr, (void __user *)arg, sizeof(attr)))
380 break;
381 r = kvm_s390_vm_set_attr(kvm, &attr);
382 break;
384 case KVM_GET_DEVICE_ATTR: {
385 r = -EFAULT;
386 if (copy_from_user(&attr, (void __user *)arg, sizeof(attr)))
387 break;
388 r = kvm_s390_vm_get_attr(kvm, &attr);
389 break;
391 case KVM_HAS_DEVICE_ATTR: {
392 r = -EFAULT;
393 if (copy_from_user(&attr, (void __user *)arg, sizeof(attr)))
394 break;
395 r = kvm_s390_vm_has_attr(kvm, &attr);
396 break;
398 default:
399 r = -ENOTTY;
402 return r;
405 int kvm_arch_init_vm(struct kvm *kvm, unsigned long type)
407 int rc;
408 char debug_name[16];
409 static unsigned long sca_offset;
411 rc = -EINVAL;
412 #ifdef CONFIG_KVM_S390_UCONTROL
413 if (type & ~KVM_VM_S390_UCONTROL)
414 goto out_err;
415 if ((type & KVM_VM_S390_UCONTROL) && (!capable(CAP_SYS_ADMIN)))
416 goto out_err;
417 #else
418 if (type)
419 goto out_err;
420 #endif
422 rc = s390_enable_sie();
423 if (rc)
424 goto out_err;
426 rc = -ENOMEM;
428 kvm->arch.sca = (struct sca_block *) get_zeroed_page(GFP_KERNEL);
429 if (!kvm->arch.sca)
430 goto out_err;
431 spin_lock(&kvm_lock);
432 sca_offset = (sca_offset + 16) & 0x7f0;
433 kvm->arch.sca = (struct sca_block *) ((char *) kvm->arch.sca + sca_offset);
434 spin_unlock(&kvm_lock);
436 sprintf(debug_name, "kvm-%u", current->pid);
438 kvm->arch.dbf = debug_register(debug_name, 8, 2, 8 * sizeof(long));
439 if (!kvm->arch.dbf)
440 goto out_nodbf;
442 spin_lock_init(&kvm->arch.float_int.lock);
443 INIT_LIST_HEAD(&kvm->arch.float_int.list);
444 init_waitqueue_head(&kvm->arch.ipte_wq);
446 debug_register_view(kvm->arch.dbf, &debug_sprintf_view);
447 VM_EVENT(kvm, 3, "%s", "vm created");
449 if (type & KVM_VM_S390_UCONTROL) {
450 kvm->arch.gmap = NULL;
451 } else {
452 kvm->arch.gmap = gmap_alloc(current->mm);
453 if (!kvm->arch.gmap)
454 goto out_nogmap;
455 kvm->arch.gmap->private = kvm;
456 kvm->arch.gmap->pfault_enabled = 0;
459 kvm->arch.css_support = 0;
460 kvm->arch.use_irqchip = 0;
462 spin_lock_init(&kvm->arch.start_stop_lock);
464 return 0;
465 out_nogmap:
466 debug_unregister(kvm->arch.dbf);
467 out_nodbf:
468 free_page((unsigned long)(kvm->arch.sca));
469 out_err:
470 return rc;
473 void kvm_arch_vcpu_destroy(struct kvm_vcpu *vcpu)
475 VCPU_EVENT(vcpu, 3, "%s", "free cpu");
476 trace_kvm_s390_destroy_vcpu(vcpu->vcpu_id);
477 kvm_s390_clear_local_irqs(vcpu);
478 kvm_clear_async_pf_completion_queue(vcpu);
479 if (!kvm_is_ucontrol(vcpu->kvm)) {
480 clear_bit(63 - vcpu->vcpu_id,
481 (unsigned long *) &vcpu->kvm->arch.sca->mcn);
482 if (vcpu->kvm->arch.sca->cpu[vcpu->vcpu_id].sda ==
483 (__u64) vcpu->arch.sie_block)
484 vcpu->kvm->arch.sca->cpu[vcpu->vcpu_id].sda = 0;
486 smp_mb();
488 if (kvm_is_ucontrol(vcpu->kvm))
489 gmap_free(vcpu->arch.gmap);
491 if (kvm_s390_cmma_enabled(vcpu->kvm))
492 kvm_s390_vcpu_unsetup_cmma(vcpu);
493 free_page((unsigned long)(vcpu->arch.sie_block));
495 kvm_vcpu_uninit(vcpu);
496 kmem_cache_free(kvm_vcpu_cache, vcpu);
499 static void kvm_free_vcpus(struct kvm *kvm)
501 unsigned int i;
502 struct kvm_vcpu *vcpu;
504 kvm_for_each_vcpu(i, vcpu, kvm)
505 kvm_arch_vcpu_destroy(vcpu);
507 mutex_lock(&kvm->lock);
508 for (i = 0; i < atomic_read(&kvm->online_vcpus); i++)
509 kvm->vcpus[i] = NULL;
511 atomic_set(&kvm->online_vcpus, 0);
512 mutex_unlock(&kvm->lock);
515 void kvm_arch_sync_events(struct kvm *kvm)
519 void kvm_arch_destroy_vm(struct kvm *kvm)
521 kvm_free_vcpus(kvm);
522 free_page((unsigned long)(kvm->arch.sca));
523 debug_unregister(kvm->arch.dbf);
524 if (!kvm_is_ucontrol(kvm))
525 gmap_free(kvm->arch.gmap);
526 kvm_s390_destroy_adapters(kvm);
527 kvm_s390_clear_float_irqs(kvm);
530 /* Section: vcpu related */
531 int kvm_arch_vcpu_init(struct kvm_vcpu *vcpu)
533 vcpu->arch.pfault_token = KVM_S390_PFAULT_TOKEN_INVALID;
534 kvm_clear_async_pf_completion_queue(vcpu);
535 if (kvm_is_ucontrol(vcpu->kvm)) {
536 vcpu->arch.gmap = gmap_alloc(current->mm);
537 if (!vcpu->arch.gmap)
538 return -ENOMEM;
539 vcpu->arch.gmap->private = vcpu->kvm;
540 return 0;
543 vcpu->arch.gmap = vcpu->kvm->arch.gmap;
544 vcpu->run->kvm_valid_regs = KVM_SYNC_PREFIX |
545 KVM_SYNC_GPRS |
546 KVM_SYNC_ACRS |
547 KVM_SYNC_CRS;
548 return 0;
551 void kvm_arch_vcpu_uninit(struct kvm_vcpu *vcpu)
553 /* Nothing todo */
556 void kvm_arch_vcpu_load(struct kvm_vcpu *vcpu, int cpu)
558 save_fp_ctl(&vcpu->arch.host_fpregs.fpc);
559 save_fp_regs(vcpu->arch.host_fpregs.fprs);
560 save_access_regs(vcpu->arch.host_acrs);
561 restore_fp_ctl(&vcpu->arch.guest_fpregs.fpc);
562 restore_fp_regs(vcpu->arch.guest_fpregs.fprs);
563 restore_access_regs(vcpu->run->s.regs.acrs);
564 gmap_enable(vcpu->arch.gmap);
565 atomic_set_mask(CPUSTAT_RUNNING, &vcpu->arch.sie_block->cpuflags);
568 void kvm_arch_vcpu_put(struct kvm_vcpu *vcpu)
570 atomic_clear_mask(CPUSTAT_RUNNING, &vcpu->arch.sie_block->cpuflags);
571 gmap_disable(vcpu->arch.gmap);
572 save_fp_ctl(&vcpu->arch.guest_fpregs.fpc);
573 save_fp_regs(vcpu->arch.guest_fpregs.fprs);
574 save_access_regs(vcpu->run->s.regs.acrs);
575 restore_fp_ctl(&vcpu->arch.host_fpregs.fpc);
576 restore_fp_regs(vcpu->arch.host_fpregs.fprs);
577 restore_access_regs(vcpu->arch.host_acrs);
580 static void kvm_s390_vcpu_initial_reset(struct kvm_vcpu *vcpu)
582 /* this equals initial cpu reset in pop, but we don't switch to ESA */
583 vcpu->arch.sie_block->gpsw.mask = 0UL;
584 vcpu->arch.sie_block->gpsw.addr = 0UL;
585 kvm_s390_set_prefix(vcpu, 0);
586 vcpu->arch.sie_block->cputm = 0UL;
587 vcpu->arch.sie_block->ckc = 0UL;
588 vcpu->arch.sie_block->todpr = 0;
589 memset(vcpu->arch.sie_block->gcr, 0, 16 * sizeof(__u64));
590 vcpu->arch.sie_block->gcr[0] = 0xE0UL;
591 vcpu->arch.sie_block->gcr[14] = 0xC2000000UL;
592 vcpu->arch.guest_fpregs.fpc = 0;
593 asm volatile("lfpc %0" : : "Q" (vcpu->arch.guest_fpregs.fpc));
594 vcpu->arch.sie_block->gbea = 1;
595 vcpu->arch.sie_block->pp = 0;
596 vcpu->arch.pfault_token = KVM_S390_PFAULT_TOKEN_INVALID;
597 kvm_clear_async_pf_completion_queue(vcpu);
598 kvm_s390_vcpu_stop(vcpu);
599 kvm_s390_clear_local_irqs(vcpu);
602 int kvm_arch_vcpu_postcreate(struct kvm_vcpu *vcpu)
604 return 0;
607 void kvm_s390_vcpu_unsetup_cmma(struct kvm_vcpu *vcpu)
609 free_page(vcpu->arch.sie_block->cbrlo);
610 vcpu->arch.sie_block->cbrlo = 0;
613 int kvm_s390_vcpu_setup_cmma(struct kvm_vcpu *vcpu)
615 vcpu->arch.sie_block->cbrlo = get_zeroed_page(GFP_KERNEL);
616 if (!vcpu->arch.sie_block->cbrlo)
617 return -ENOMEM;
619 vcpu->arch.sie_block->ecb2 |= 0x80;
620 vcpu->arch.sie_block->ecb2 &= ~0x08;
621 return 0;
624 int kvm_arch_vcpu_setup(struct kvm_vcpu *vcpu)
626 int rc = 0;
628 atomic_set(&vcpu->arch.sie_block->cpuflags, CPUSTAT_ZARCH |
629 CPUSTAT_SM |
630 CPUSTAT_STOPPED |
631 CPUSTAT_GED);
632 vcpu->arch.sie_block->ecb = 6;
633 if (test_vfacility(50) && test_vfacility(73))
634 vcpu->arch.sie_block->ecb |= 0x10;
636 vcpu->arch.sie_block->ecb2 = 8;
637 vcpu->arch.sie_block->eca = 0xD1002000U;
638 if (sclp_has_siif())
639 vcpu->arch.sie_block->eca |= 1;
640 vcpu->arch.sie_block->fac = (int) (long) vfacilities;
641 vcpu->arch.sie_block->ictl |= ICTL_ISKE | ICTL_SSKE | ICTL_RRBE |
642 ICTL_TPROT;
644 if (kvm_s390_cmma_enabled(vcpu->kvm)) {
645 rc = kvm_s390_vcpu_setup_cmma(vcpu);
646 if (rc)
647 return rc;
649 hrtimer_init(&vcpu->arch.ckc_timer, CLOCK_REALTIME, HRTIMER_MODE_ABS);
650 tasklet_init(&vcpu->arch.tasklet, kvm_s390_tasklet,
651 (unsigned long) vcpu);
652 vcpu->arch.ckc_timer.function = kvm_s390_idle_wakeup;
653 get_cpu_id(&vcpu->arch.cpu_id);
654 vcpu->arch.cpu_id.version = 0xff;
655 return rc;
658 struct kvm_vcpu *kvm_arch_vcpu_create(struct kvm *kvm,
659 unsigned int id)
661 struct kvm_vcpu *vcpu;
662 struct sie_page *sie_page;
663 int rc = -EINVAL;
665 if (id >= KVM_MAX_VCPUS)
666 goto out;
668 rc = -ENOMEM;
670 vcpu = kmem_cache_zalloc(kvm_vcpu_cache, GFP_KERNEL);
671 if (!vcpu)
672 goto out;
674 sie_page = (struct sie_page *) get_zeroed_page(GFP_KERNEL);
675 if (!sie_page)
676 goto out_free_cpu;
678 vcpu->arch.sie_block = &sie_page->sie_block;
679 vcpu->arch.sie_block->itdba = (unsigned long) &sie_page->itdb;
681 vcpu->arch.sie_block->icpua = id;
682 if (!kvm_is_ucontrol(kvm)) {
683 if (!kvm->arch.sca) {
684 WARN_ON_ONCE(1);
685 goto out_free_cpu;
687 if (!kvm->arch.sca->cpu[id].sda)
688 kvm->arch.sca->cpu[id].sda =
689 (__u64) vcpu->arch.sie_block;
690 vcpu->arch.sie_block->scaoh =
691 (__u32)(((__u64)kvm->arch.sca) >> 32);
692 vcpu->arch.sie_block->scaol = (__u32)(__u64)kvm->arch.sca;
693 set_bit(63 - id, (unsigned long *) &kvm->arch.sca->mcn);
696 spin_lock_init(&vcpu->arch.local_int.lock);
697 INIT_LIST_HEAD(&vcpu->arch.local_int.list);
698 vcpu->arch.local_int.float_int = &kvm->arch.float_int;
699 vcpu->arch.local_int.wq = &vcpu->wq;
700 vcpu->arch.local_int.cpuflags = &vcpu->arch.sie_block->cpuflags;
702 rc = kvm_vcpu_init(vcpu, kvm, id);
703 if (rc)
704 goto out_free_sie_block;
705 VM_EVENT(kvm, 3, "create cpu %d at %p, sie block at %p", id, vcpu,
706 vcpu->arch.sie_block);
707 trace_kvm_s390_create_vcpu(id, vcpu, vcpu->arch.sie_block);
709 return vcpu;
710 out_free_sie_block:
711 free_page((unsigned long)(vcpu->arch.sie_block));
712 out_free_cpu:
713 kmem_cache_free(kvm_vcpu_cache, vcpu);
714 out:
715 return ERR_PTR(rc);
718 int kvm_arch_vcpu_runnable(struct kvm_vcpu *vcpu)
720 return kvm_cpu_has_interrupt(vcpu);
723 void s390_vcpu_block(struct kvm_vcpu *vcpu)
725 atomic_set_mask(PROG_BLOCK_SIE, &vcpu->arch.sie_block->prog20);
728 void s390_vcpu_unblock(struct kvm_vcpu *vcpu)
730 atomic_clear_mask(PROG_BLOCK_SIE, &vcpu->arch.sie_block->prog20);
734 * Kick a guest cpu out of SIE and wait until SIE is not running.
735 * If the CPU is not running (e.g. waiting as idle) the function will
736 * return immediately. */
737 void exit_sie(struct kvm_vcpu *vcpu)
739 atomic_set_mask(CPUSTAT_STOP_INT, &vcpu->arch.sie_block->cpuflags);
740 while (vcpu->arch.sie_block->prog0c & PROG_IN_SIE)
741 cpu_relax();
744 /* Kick a guest cpu out of SIE and prevent SIE-reentry */
745 void exit_sie_sync(struct kvm_vcpu *vcpu)
747 s390_vcpu_block(vcpu);
748 exit_sie(vcpu);
751 static void kvm_gmap_notifier(struct gmap *gmap, unsigned long address)
753 int i;
754 struct kvm *kvm = gmap->private;
755 struct kvm_vcpu *vcpu;
757 kvm_for_each_vcpu(i, vcpu, kvm) {
758 /* match against both prefix pages */
759 if (kvm_s390_get_prefix(vcpu) == (address & ~0x1000UL)) {
760 VCPU_EVENT(vcpu, 2, "gmap notifier for %lx", address);
761 kvm_make_request(KVM_REQ_MMU_RELOAD, vcpu);
762 exit_sie_sync(vcpu);
767 int kvm_arch_vcpu_should_kick(struct kvm_vcpu *vcpu)
769 /* kvm common code refers to this, but never calls it */
770 BUG();
771 return 0;
774 static int kvm_arch_vcpu_ioctl_get_one_reg(struct kvm_vcpu *vcpu,
775 struct kvm_one_reg *reg)
777 int r = -EINVAL;
779 switch (reg->id) {
780 case KVM_REG_S390_TODPR:
781 r = put_user(vcpu->arch.sie_block->todpr,
782 (u32 __user *)reg->addr);
783 break;
784 case KVM_REG_S390_EPOCHDIFF:
785 r = put_user(vcpu->arch.sie_block->epoch,
786 (u64 __user *)reg->addr);
787 break;
788 case KVM_REG_S390_CPU_TIMER:
789 r = put_user(vcpu->arch.sie_block->cputm,
790 (u64 __user *)reg->addr);
791 break;
792 case KVM_REG_S390_CLOCK_COMP:
793 r = put_user(vcpu->arch.sie_block->ckc,
794 (u64 __user *)reg->addr);
795 break;
796 case KVM_REG_S390_PFTOKEN:
797 r = put_user(vcpu->arch.pfault_token,
798 (u64 __user *)reg->addr);
799 break;
800 case KVM_REG_S390_PFCOMPARE:
801 r = put_user(vcpu->arch.pfault_compare,
802 (u64 __user *)reg->addr);
803 break;
804 case KVM_REG_S390_PFSELECT:
805 r = put_user(vcpu->arch.pfault_select,
806 (u64 __user *)reg->addr);
807 break;
808 case KVM_REG_S390_PP:
809 r = put_user(vcpu->arch.sie_block->pp,
810 (u64 __user *)reg->addr);
811 break;
812 case KVM_REG_S390_GBEA:
813 r = put_user(vcpu->arch.sie_block->gbea,
814 (u64 __user *)reg->addr);
815 break;
816 default:
817 break;
820 return r;
823 static int kvm_arch_vcpu_ioctl_set_one_reg(struct kvm_vcpu *vcpu,
824 struct kvm_one_reg *reg)
826 int r = -EINVAL;
828 switch (reg->id) {
829 case KVM_REG_S390_TODPR:
830 r = get_user(vcpu->arch.sie_block->todpr,
831 (u32 __user *)reg->addr);
832 break;
833 case KVM_REG_S390_EPOCHDIFF:
834 r = get_user(vcpu->arch.sie_block->epoch,
835 (u64 __user *)reg->addr);
836 break;
837 case KVM_REG_S390_CPU_TIMER:
838 r = get_user(vcpu->arch.sie_block->cputm,
839 (u64 __user *)reg->addr);
840 break;
841 case KVM_REG_S390_CLOCK_COMP:
842 r = get_user(vcpu->arch.sie_block->ckc,
843 (u64 __user *)reg->addr);
844 break;
845 case KVM_REG_S390_PFTOKEN:
846 r = get_user(vcpu->arch.pfault_token,
847 (u64 __user *)reg->addr);
848 break;
849 case KVM_REG_S390_PFCOMPARE:
850 r = get_user(vcpu->arch.pfault_compare,
851 (u64 __user *)reg->addr);
852 break;
853 case KVM_REG_S390_PFSELECT:
854 r = get_user(vcpu->arch.pfault_select,
855 (u64 __user *)reg->addr);
856 break;
857 case KVM_REG_S390_PP:
858 r = get_user(vcpu->arch.sie_block->pp,
859 (u64 __user *)reg->addr);
860 break;
861 case KVM_REG_S390_GBEA:
862 r = get_user(vcpu->arch.sie_block->gbea,
863 (u64 __user *)reg->addr);
864 break;
865 default:
866 break;
869 return r;
872 static int kvm_arch_vcpu_ioctl_initial_reset(struct kvm_vcpu *vcpu)
874 kvm_s390_vcpu_initial_reset(vcpu);
875 return 0;
878 int kvm_arch_vcpu_ioctl_set_regs(struct kvm_vcpu *vcpu, struct kvm_regs *regs)
880 memcpy(&vcpu->run->s.regs.gprs, &regs->gprs, sizeof(regs->gprs));
881 return 0;
884 int kvm_arch_vcpu_ioctl_get_regs(struct kvm_vcpu *vcpu, struct kvm_regs *regs)
886 memcpy(&regs->gprs, &vcpu->run->s.regs.gprs, sizeof(regs->gprs));
887 return 0;
890 int kvm_arch_vcpu_ioctl_set_sregs(struct kvm_vcpu *vcpu,
891 struct kvm_sregs *sregs)
893 memcpy(&vcpu->run->s.regs.acrs, &sregs->acrs, sizeof(sregs->acrs));
894 memcpy(&vcpu->arch.sie_block->gcr, &sregs->crs, sizeof(sregs->crs));
895 restore_access_regs(vcpu->run->s.regs.acrs);
896 return 0;
899 int kvm_arch_vcpu_ioctl_get_sregs(struct kvm_vcpu *vcpu,
900 struct kvm_sregs *sregs)
902 memcpy(&sregs->acrs, &vcpu->run->s.regs.acrs, sizeof(sregs->acrs));
903 memcpy(&sregs->crs, &vcpu->arch.sie_block->gcr, sizeof(sregs->crs));
904 return 0;
907 int kvm_arch_vcpu_ioctl_set_fpu(struct kvm_vcpu *vcpu, struct kvm_fpu *fpu)
909 if (test_fp_ctl(fpu->fpc))
910 return -EINVAL;
911 memcpy(&vcpu->arch.guest_fpregs.fprs, &fpu->fprs, sizeof(fpu->fprs));
912 vcpu->arch.guest_fpregs.fpc = fpu->fpc;
913 restore_fp_ctl(&vcpu->arch.guest_fpregs.fpc);
914 restore_fp_regs(vcpu->arch.guest_fpregs.fprs);
915 return 0;
918 int kvm_arch_vcpu_ioctl_get_fpu(struct kvm_vcpu *vcpu, struct kvm_fpu *fpu)
920 memcpy(&fpu->fprs, &vcpu->arch.guest_fpregs.fprs, sizeof(fpu->fprs));
921 fpu->fpc = vcpu->arch.guest_fpregs.fpc;
922 return 0;
925 static int kvm_arch_vcpu_ioctl_set_initial_psw(struct kvm_vcpu *vcpu, psw_t psw)
927 int rc = 0;
929 if (!(atomic_read(&vcpu->arch.sie_block->cpuflags) & CPUSTAT_STOPPED))
930 rc = -EBUSY;
931 else {
932 vcpu->run->psw_mask = psw.mask;
933 vcpu->run->psw_addr = psw.addr;
935 return rc;
938 int kvm_arch_vcpu_ioctl_translate(struct kvm_vcpu *vcpu,
939 struct kvm_translation *tr)
941 return -EINVAL; /* not implemented yet */
944 #define VALID_GUESTDBG_FLAGS (KVM_GUESTDBG_SINGLESTEP | \
945 KVM_GUESTDBG_USE_HW_BP | \
946 KVM_GUESTDBG_ENABLE)
948 int kvm_arch_vcpu_ioctl_set_guest_debug(struct kvm_vcpu *vcpu,
949 struct kvm_guest_debug *dbg)
951 int rc = 0;
953 vcpu->guest_debug = 0;
954 kvm_s390_clear_bp_data(vcpu);
956 if (dbg->control & ~VALID_GUESTDBG_FLAGS)
957 return -EINVAL;
959 if (dbg->control & KVM_GUESTDBG_ENABLE) {
960 vcpu->guest_debug = dbg->control;
961 /* enforce guest PER */
962 atomic_set_mask(CPUSTAT_P, &vcpu->arch.sie_block->cpuflags);
964 if (dbg->control & KVM_GUESTDBG_USE_HW_BP)
965 rc = kvm_s390_import_bp_data(vcpu, dbg);
966 } else {
967 atomic_clear_mask(CPUSTAT_P, &vcpu->arch.sie_block->cpuflags);
968 vcpu->arch.guestdbg.last_bp = 0;
971 if (rc) {
972 vcpu->guest_debug = 0;
973 kvm_s390_clear_bp_data(vcpu);
974 atomic_clear_mask(CPUSTAT_P, &vcpu->arch.sie_block->cpuflags);
977 return rc;
980 int kvm_arch_vcpu_ioctl_get_mpstate(struct kvm_vcpu *vcpu,
981 struct kvm_mp_state *mp_state)
983 return -EINVAL; /* not implemented yet */
986 int kvm_arch_vcpu_ioctl_set_mpstate(struct kvm_vcpu *vcpu,
987 struct kvm_mp_state *mp_state)
989 return -EINVAL; /* not implemented yet */
992 bool kvm_s390_cmma_enabled(struct kvm *kvm)
994 if (!MACHINE_IS_LPAR)
995 return false;
996 /* only enable for z10 and later */
997 if (!MACHINE_HAS_EDAT1)
998 return false;
999 if (!kvm->arch.use_cmma)
1000 return false;
1001 return true;
1004 static bool ibs_enabled(struct kvm_vcpu *vcpu)
1006 return atomic_read(&vcpu->arch.sie_block->cpuflags) & CPUSTAT_IBS;
1009 static int kvm_s390_handle_requests(struct kvm_vcpu *vcpu)
1011 retry:
1012 s390_vcpu_unblock(vcpu);
1014 * We use MMU_RELOAD just to re-arm the ipte notifier for the
1015 * guest prefix page. gmap_ipte_notify will wait on the ptl lock.
1016 * This ensures that the ipte instruction for this request has
1017 * already finished. We might race against a second unmapper that
1018 * wants to set the blocking bit. Lets just retry the request loop.
1020 if (kvm_check_request(KVM_REQ_MMU_RELOAD, vcpu)) {
1021 int rc;
1022 rc = gmap_ipte_notify(vcpu->arch.gmap,
1023 kvm_s390_get_prefix(vcpu),
1024 PAGE_SIZE * 2);
1025 if (rc)
1026 return rc;
1027 goto retry;
1030 if (kvm_check_request(KVM_REQ_ENABLE_IBS, vcpu)) {
1031 if (!ibs_enabled(vcpu)) {
1032 trace_kvm_s390_enable_disable_ibs(vcpu->vcpu_id, 1);
1033 atomic_set_mask(CPUSTAT_IBS,
1034 &vcpu->arch.sie_block->cpuflags);
1036 goto retry;
1039 if (kvm_check_request(KVM_REQ_DISABLE_IBS, vcpu)) {
1040 if (ibs_enabled(vcpu)) {
1041 trace_kvm_s390_enable_disable_ibs(vcpu->vcpu_id, 0);
1042 atomic_clear_mask(CPUSTAT_IBS,
1043 &vcpu->arch.sie_block->cpuflags);
1045 goto retry;
1048 return 0;
1052 * kvm_arch_fault_in_page - fault-in guest page if necessary
1053 * @vcpu: The corresponding virtual cpu
1054 * @gpa: Guest physical address
1055 * @writable: Whether the page should be writable or not
1057 * Make sure that a guest page has been faulted-in on the host.
1059 * Return: Zero on success, negative error code otherwise.
1061 long kvm_arch_fault_in_page(struct kvm_vcpu *vcpu, gpa_t gpa, int writable)
1063 struct mm_struct *mm = current->mm;
1064 hva_t hva;
1065 long rc;
1067 hva = gmap_fault(gpa, vcpu->arch.gmap);
1068 if (IS_ERR_VALUE(hva))
1069 return (long)hva;
1070 down_read(&mm->mmap_sem);
1071 rc = get_user_pages(current, mm, hva, 1, writable, 0, NULL, NULL);
1072 up_read(&mm->mmap_sem);
1074 return rc < 0 ? rc : 0;
1077 static void __kvm_inject_pfault_token(struct kvm_vcpu *vcpu, bool start_token,
1078 unsigned long token)
1080 struct kvm_s390_interrupt inti;
1081 inti.parm64 = token;
1083 if (start_token) {
1084 inti.type = KVM_S390_INT_PFAULT_INIT;
1085 WARN_ON_ONCE(kvm_s390_inject_vcpu(vcpu, &inti));
1086 } else {
1087 inti.type = KVM_S390_INT_PFAULT_DONE;
1088 WARN_ON_ONCE(kvm_s390_inject_vm(vcpu->kvm, &inti));
1092 void kvm_arch_async_page_not_present(struct kvm_vcpu *vcpu,
1093 struct kvm_async_pf *work)
1095 trace_kvm_s390_pfault_init(vcpu, work->arch.pfault_token);
1096 __kvm_inject_pfault_token(vcpu, true, work->arch.pfault_token);
1099 void kvm_arch_async_page_present(struct kvm_vcpu *vcpu,
1100 struct kvm_async_pf *work)
1102 trace_kvm_s390_pfault_done(vcpu, work->arch.pfault_token);
1103 __kvm_inject_pfault_token(vcpu, false, work->arch.pfault_token);
1106 void kvm_arch_async_page_ready(struct kvm_vcpu *vcpu,
1107 struct kvm_async_pf *work)
1109 /* s390 will always inject the page directly */
1112 bool kvm_arch_can_inject_async_page_present(struct kvm_vcpu *vcpu)
1115 * s390 will always inject the page directly,
1116 * but we still want check_async_completion to cleanup
1118 return true;
1121 static int kvm_arch_setup_async_pf(struct kvm_vcpu *vcpu)
1123 hva_t hva;
1124 struct kvm_arch_async_pf arch;
1125 int rc;
1127 if (vcpu->arch.pfault_token == KVM_S390_PFAULT_TOKEN_INVALID)
1128 return 0;
1129 if ((vcpu->arch.sie_block->gpsw.mask & vcpu->arch.pfault_select) !=
1130 vcpu->arch.pfault_compare)
1131 return 0;
1132 if (psw_extint_disabled(vcpu))
1133 return 0;
1134 if (kvm_cpu_has_interrupt(vcpu))
1135 return 0;
1136 if (!(vcpu->arch.sie_block->gcr[0] & 0x200ul))
1137 return 0;
1138 if (!vcpu->arch.gmap->pfault_enabled)
1139 return 0;
1141 hva = gfn_to_hva(vcpu->kvm, gpa_to_gfn(current->thread.gmap_addr));
1142 hva += current->thread.gmap_addr & ~PAGE_MASK;
1143 if (read_guest_real(vcpu, vcpu->arch.pfault_token, &arch.pfault_token, 8))
1144 return 0;
1146 rc = kvm_setup_async_pf(vcpu, current->thread.gmap_addr, hva, &arch);
1147 return rc;
1150 static int vcpu_pre_run(struct kvm_vcpu *vcpu)
1152 int rc, cpuflags;
1155 * On s390 notifications for arriving pages will be delivered directly
1156 * to the guest but the house keeping for completed pfaults is
1157 * handled outside the worker.
1159 kvm_check_async_pf_completion(vcpu);
1161 memcpy(&vcpu->arch.sie_block->gg14, &vcpu->run->s.regs.gprs[14], 16);
1163 if (need_resched())
1164 schedule();
1166 if (test_cpu_flag(CIF_MCCK_PENDING))
1167 s390_handle_mcck();
1169 if (!kvm_is_ucontrol(vcpu->kvm))
1170 kvm_s390_deliver_pending_interrupts(vcpu);
1172 rc = kvm_s390_handle_requests(vcpu);
1173 if (rc)
1174 return rc;
1176 if (guestdbg_enabled(vcpu)) {
1177 kvm_s390_backup_guest_per_regs(vcpu);
1178 kvm_s390_patch_guest_per_regs(vcpu);
1181 vcpu->arch.sie_block->icptcode = 0;
1182 cpuflags = atomic_read(&vcpu->arch.sie_block->cpuflags);
1183 VCPU_EVENT(vcpu, 6, "entering sie flags %x", cpuflags);
1184 trace_kvm_s390_sie_enter(vcpu, cpuflags);
1186 return 0;
1189 static int vcpu_post_run(struct kvm_vcpu *vcpu, int exit_reason)
1191 int rc = -1;
1193 VCPU_EVENT(vcpu, 6, "exit sie icptcode %d",
1194 vcpu->arch.sie_block->icptcode);
1195 trace_kvm_s390_sie_exit(vcpu, vcpu->arch.sie_block->icptcode);
1197 if (guestdbg_enabled(vcpu))
1198 kvm_s390_restore_guest_per_regs(vcpu);
1200 if (exit_reason >= 0) {
1201 rc = 0;
1202 } else if (kvm_is_ucontrol(vcpu->kvm)) {
1203 vcpu->run->exit_reason = KVM_EXIT_S390_UCONTROL;
1204 vcpu->run->s390_ucontrol.trans_exc_code =
1205 current->thread.gmap_addr;
1206 vcpu->run->s390_ucontrol.pgm_code = 0x10;
1207 rc = -EREMOTE;
1209 } else if (current->thread.gmap_pfault) {
1210 trace_kvm_s390_major_guest_pfault(vcpu);
1211 current->thread.gmap_pfault = 0;
1212 if (kvm_arch_setup_async_pf(vcpu)) {
1213 rc = 0;
1214 } else {
1215 gpa_t gpa = current->thread.gmap_addr;
1216 rc = kvm_arch_fault_in_page(vcpu, gpa, 1);
1220 if (rc == -1) {
1221 VCPU_EVENT(vcpu, 3, "%s", "fault in sie instruction");
1222 trace_kvm_s390_sie_fault(vcpu);
1223 rc = kvm_s390_inject_program_int(vcpu, PGM_ADDRESSING);
1226 memcpy(&vcpu->run->s.regs.gprs[14], &vcpu->arch.sie_block->gg14, 16);
1228 if (rc == 0) {
1229 if (kvm_is_ucontrol(vcpu->kvm))
1230 /* Don't exit for host interrupts. */
1231 rc = vcpu->arch.sie_block->icptcode ? -EOPNOTSUPP : 0;
1232 else
1233 rc = kvm_handle_sie_intercept(vcpu);
1236 return rc;
1239 static int __vcpu_run(struct kvm_vcpu *vcpu)
1241 int rc, exit_reason;
1244 * We try to hold kvm->srcu during most of vcpu_run (except when run-
1245 * ning the guest), so that memslots (and other stuff) are protected
1247 vcpu->srcu_idx = srcu_read_lock(&vcpu->kvm->srcu);
1249 do {
1250 rc = vcpu_pre_run(vcpu);
1251 if (rc)
1252 break;
1254 srcu_read_unlock(&vcpu->kvm->srcu, vcpu->srcu_idx);
1256 * As PF_VCPU will be used in fault handler, between
1257 * guest_enter and guest_exit should be no uaccess.
1259 preempt_disable();
1260 kvm_guest_enter();
1261 preempt_enable();
1262 exit_reason = sie64a(vcpu->arch.sie_block,
1263 vcpu->run->s.regs.gprs);
1264 kvm_guest_exit();
1265 vcpu->srcu_idx = srcu_read_lock(&vcpu->kvm->srcu);
1267 rc = vcpu_post_run(vcpu, exit_reason);
1268 } while (!signal_pending(current) && !guestdbg_exit_pending(vcpu) && !rc);
1270 srcu_read_unlock(&vcpu->kvm->srcu, vcpu->srcu_idx);
1271 return rc;
1274 int kvm_arch_vcpu_ioctl_run(struct kvm_vcpu *vcpu, struct kvm_run *kvm_run)
1276 int rc;
1277 sigset_t sigsaved;
1279 if (guestdbg_exit_pending(vcpu)) {
1280 kvm_s390_prepare_debug_exit(vcpu);
1281 return 0;
1284 if (vcpu->sigset_active)
1285 sigprocmask(SIG_SETMASK, &vcpu->sigset, &sigsaved);
1287 kvm_s390_vcpu_start(vcpu);
1289 switch (kvm_run->exit_reason) {
1290 case KVM_EXIT_S390_SIEIC:
1291 case KVM_EXIT_UNKNOWN:
1292 case KVM_EXIT_INTR:
1293 case KVM_EXIT_S390_RESET:
1294 case KVM_EXIT_S390_UCONTROL:
1295 case KVM_EXIT_S390_TSCH:
1296 case KVM_EXIT_DEBUG:
1297 break;
1298 default:
1299 BUG();
1302 vcpu->arch.sie_block->gpsw.mask = kvm_run->psw_mask;
1303 vcpu->arch.sie_block->gpsw.addr = kvm_run->psw_addr;
1304 if (kvm_run->kvm_dirty_regs & KVM_SYNC_PREFIX) {
1305 kvm_run->kvm_dirty_regs &= ~KVM_SYNC_PREFIX;
1306 kvm_s390_set_prefix(vcpu, kvm_run->s.regs.prefix);
1308 if (kvm_run->kvm_dirty_regs & KVM_SYNC_CRS) {
1309 kvm_run->kvm_dirty_regs &= ~KVM_SYNC_CRS;
1310 memcpy(&vcpu->arch.sie_block->gcr, &kvm_run->s.regs.crs, 128);
1311 kvm_s390_set_prefix(vcpu, kvm_run->s.regs.prefix);
1314 might_fault();
1315 rc = __vcpu_run(vcpu);
1317 if (signal_pending(current) && !rc) {
1318 kvm_run->exit_reason = KVM_EXIT_INTR;
1319 rc = -EINTR;
1322 if (guestdbg_exit_pending(vcpu) && !rc) {
1323 kvm_s390_prepare_debug_exit(vcpu);
1324 rc = 0;
1327 if (rc == -EOPNOTSUPP) {
1328 /* intercept cannot be handled in-kernel, prepare kvm-run */
1329 kvm_run->exit_reason = KVM_EXIT_S390_SIEIC;
1330 kvm_run->s390_sieic.icptcode = vcpu->arch.sie_block->icptcode;
1331 kvm_run->s390_sieic.ipa = vcpu->arch.sie_block->ipa;
1332 kvm_run->s390_sieic.ipb = vcpu->arch.sie_block->ipb;
1333 rc = 0;
1336 if (rc == -EREMOTE) {
1337 /* intercept was handled, but userspace support is needed
1338 * kvm_run has been prepared by the handler */
1339 rc = 0;
1342 kvm_run->psw_mask = vcpu->arch.sie_block->gpsw.mask;
1343 kvm_run->psw_addr = vcpu->arch.sie_block->gpsw.addr;
1344 kvm_run->s.regs.prefix = kvm_s390_get_prefix(vcpu);
1345 memcpy(&kvm_run->s.regs.crs, &vcpu->arch.sie_block->gcr, 128);
1347 if (vcpu->sigset_active)
1348 sigprocmask(SIG_SETMASK, &sigsaved, NULL);
1350 vcpu->stat.exit_userspace++;
1351 return rc;
1355 * store status at address
1356 * we use have two special cases:
1357 * KVM_S390_STORE_STATUS_NOADDR: -> 0x1200 on 64 bit
1358 * KVM_S390_STORE_STATUS_PREFIXED: -> prefix
1360 int kvm_s390_store_status_unloaded(struct kvm_vcpu *vcpu, unsigned long gpa)
1362 unsigned char archmode = 1;
1363 unsigned int px;
1364 u64 clkcomp;
1365 int rc;
1367 if (gpa == KVM_S390_STORE_STATUS_NOADDR) {
1368 if (write_guest_abs(vcpu, 163, &archmode, 1))
1369 return -EFAULT;
1370 gpa = SAVE_AREA_BASE;
1371 } else if (gpa == KVM_S390_STORE_STATUS_PREFIXED) {
1372 if (write_guest_real(vcpu, 163, &archmode, 1))
1373 return -EFAULT;
1374 gpa = kvm_s390_real_to_abs(vcpu, SAVE_AREA_BASE);
1376 rc = write_guest_abs(vcpu, gpa + offsetof(struct save_area, fp_regs),
1377 vcpu->arch.guest_fpregs.fprs, 128);
1378 rc |= write_guest_abs(vcpu, gpa + offsetof(struct save_area, gp_regs),
1379 vcpu->run->s.regs.gprs, 128);
1380 rc |= write_guest_abs(vcpu, gpa + offsetof(struct save_area, psw),
1381 &vcpu->arch.sie_block->gpsw, 16);
1382 px = kvm_s390_get_prefix(vcpu);
1383 rc |= write_guest_abs(vcpu, gpa + offsetof(struct save_area, pref_reg),
1384 &px, 4);
1385 rc |= write_guest_abs(vcpu,
1386 gpa + offsetof(struct save_area, fp_ctrl_reg),
1387 &vcpu->arch.guest_fpregs.fpc, 4);
1388 rc |= write_guest_abs(vcpu, gpa + offsetof(struct save_area, tod_reg),
1389 &vcpu->arch.sie_block->todpr, 4);
1390 rc |= write_guest_abs(vcpu, gpa + offsetof(struct save_area, timer),
1391 &vcpu->arch.sie_block->cputm, 8);
1392 clkcomp = vcpu->arch.sie_block->ckc >> 8;
1393 rc |= write_guest_abs(vcpu, gpa + offsetof(struct save_area, clk_cmp),
1394 &clkcomp, 8);
1395 rc |= write_guest_abs(vcpu, gpa + offsetof(struct save_area, acc_regs),
1396 &vcpu->run->s.regs.acrs, 64);
1397 rc |= write_guest_abs(vcpu, gpa + offsetof(struct save_area, ctrl_regs),
1398 &vcpu->arch.sie_block->gcr, 128);
1399 return rc ? -EFAULT : 0;
1402 int kvm_s390_vcpu_store_status(struct kvm_vcpu *vcpu, unsigned long addr)
1405 * The guest FPRS and ACRS are in the host FPRS/ACRS due to the lazy
1406 * copying in vcpu load/put. Lets update our copies before we save
1407 * it into the save area
1409 save_fp_ctl(&vcpu->arch.guest_fpregs.fpc);
1410 save_fp_regs(vcpu->arch.guest_fpregs.fprs);
1411 save_access_regs(vcpu->run->s.regs.acrs);
1413 return kvm_s390_store_status_unloaded(vcpu, addr);
1416 static inline int is_vcpu_stopped(struct kvm_vcpu *vcpu)
1418 return atomic_read(&(vcpu)->arch.sie_block->cpuflags) & CPUSTAT_STOPPED;
1421 static void __disable_ibs_on_vcpu(struct kvm_vcpu *vcpu)
1423 kvm_check_request(KVM_REQ_ENABLE_IBS, vcpu);
1424 kvm_make_request(KVM_REQ_DISABLE_IBS, vcpu);
1425 exit_sie_sync(vcpu);
1428 static void __disable_ibs_on_all_vcpus(struct kvm *kvm)
1430 unsigned int i;
1431 struct kvm_vcpu *vcpu;
1433 kvm_for_each_vcpu(i, vcpu, kvm) {
1434 __disable_ibs_on_vcpu(vcpu);
1438 static void __enable_ibs_on_vcpu(struct kvm_vcpu *vcpu)
1440 kvm_check_request(KVM_REQ_DISABLE_IBS, vcpu);
1441 kvm_make_request(KVM_REQ_ENABLE_IBS, vcpu);
1442 exit_sie_sync(vcpu);
1445 void kvm_s390_vcpu_start(struct kvm_vcpu *vcpu)
1447 int i, online_vcpus, started_vcpus = 0;
1449 if (!is_vcpu_stopped(vcpu))
1450 return;
1452 trace_kvm_s390_vcpu_start_stop(vcpu->vcpu_id, 1);
1453 /* Only one cpu at a time may enter/leave the STOPPED state. */
1454 spin_lock_bh(&vcpu->kvm->arch.start_stop_lock);
1455 online_vcpus = atomic_read(&vcpu->kvm->online_vcpus);
1457 for (i = 0; i < online_vcpus; i++) {
1458 if (!is_vcpu_stopped(vcpu->kvm->vcpus[i]))
1459 started_vcpus++;
1462 if (started_vcpus == 0) {
1463 /* we're the only active VCPU -> speed it up */
1464 __enable_ibs_on_vcpu(vcpu);
1465 } else if (started_vcpus == 1) {
1467 * As we are starting a second VCPU, we have to disable
1468 * the IBS facility on all VCPUs to remove potentially
1469 * oustanding ENABLE requests.
1471 __disable_ibs_on_all_vcpus(vcpu->kvm);
1474 atomic_clear_mask(CPUSTAT_STOPPED, &vcpu->arch.sie_block->cpuflags);
1476 * Another VCPU might have used IBS while we were offline.
1477 * Let's play safe and flush the VCPU at startup.
1479 vcpu->arch.sie_block->ihcpu = 0xffff;
1480 spin_unlock_bh(&vcpu->kvm->arch.start_stop_lock);
1481 return;
1484 void kvm_s390_vcpu_stop(struct kvm_vcpu *vcpu)
1486 int i, online_vcpus, started_vcpus = 0;
1487 struct kvm_vcpu *started_vcpu = NULL;
1489 if (is_vcpu_stopped(vcpu))
1490 return;
1492 trace_kvm_s390_vcpu_start_stop(vcpu->vcpu_id, 0);
1493 /* Only one cpu at a time may enter/leave the STOPPED state. */
1494 spin_lock_bh(&vcpu->kvm->arch.start_stop_lock);
1495 online_vcpus = atomic_read(&vcpu->kvm->online_vcpus);
1497 atomic_set_mask(CPUSTAT_STOPPED, &vcpu->arch.sie_block->cpuflags);
1498 __disable_ibs_on_vcpu(vcpu);
1500 for (i = 0; i < online_vcpus; i++) {
1501 if (!is_vcpu_stopped(vcpu->kvm->vcpus[i])) {
1502 started_vcpus++;
1503 started_vcpu = vcpu->kvm->vcpus[i];
1507 if (started_vcpus == 1) {
1509 * As we only have one VCPU left, we want to enable the
1510 * IBS facility for that VCPU to speed it up.
1512 __enable_ibs_on_vcpu(started_vcpu);
1515 spin_unlock_bh(&vcpu->kvm->arch.start_stop_lock);
1516 return;
1519 static int kvm_vcpu_ioctl_enable_cap(struct kvm_vcpu *vcpu,
1520 struct kvm_enable_cap *cap)
1522 int r;
1524 if (cap->flags)
1525 return -EINVAL;
1527 switch (cap->cap) {
1528 case KVM_CAP_S390_CSS_SUPPORT:
1529 if (!vcpu->kvm->arch.css_support) {
1530 vcpu->kvm->arch.css_support = 1;
1531 trace_kvm_s390_enable_css(vcpu->kvm);
1533 r = 0;
1534 break;
1535 default:
1536 r = -EINVAL;
1537 break;
1539 return r;
1542 long kvm_arch_vcpu_ioctl(struct file *filp,
1543 unsigned int ioctl, unsigned long arg)
1545 struct kvm_vcpu *vcpu = filp->private_data;
1546 void __user *argp = (void __user *)arg;
1547 int idx;
1548 long r;
1550 switch (ioctl) {
1551 case KVM_S390_INTERRUPT: {
1552 struct kvm_s390_interrupt s390int;
1554 r = -EFAULT;
1555 if (copy_from_user(&s390int, argp, sizeof(s390int)))
1556 break;
1557 r = kvm_s390_inject_vcpu(vcpu, &s390int);
1558 break;
1560 case KVM_S390_STORE_STATUS:
1561 idx = srcu_read_lock(&vcpu->kvm->srcu);
1562 r = kvm_s390_vcpu_store_status(vcpu, arg);
1563 srcu_read_unlock(&vcpu->kvm->srcu, idx);
1564 break;
1565 case KVM_S390_SET_INITIAL_PSW: {
1566 psw_t psw;
1568 r = -EFAULT;
1569 if (copy_from_user(&psw, argp, sizeof(psw)))
1570 break;
1571 r = kvm_arch_vcpu_ioctl_set_initial_psw(vcpu, psw);
1572 break;
1574 case KVM_S390_INITIAL_RESET:
1575 r = kvm_arch_vcpu_ioctl_initial_reset(vcpu);
1576 break;
1577 case KVM_SET_ONE_REG:
1578 case KVM_GET_ONE_REG: {
1579 struct kvm_one_reg reg;
1580 r = -EFAULT;
1581 if (copy_from_user(&reg, argp, sizeof(reg)))
1582 break;
1583 if (ioctl == KVM_SET_ONE_REG)
1584 r = kvm_arch_vcpu_ioctl_set_one_reg(vcpu, &reg);
1585 else
1586 r = kvm_arch_vcpu_ioctl_get_one_reg(vcpu, &reg);
1587 break;
1589 #ifdef CONFIG_KVM_S390_UCONTROL
1590 case KVM_S390_UCAS_MAP: {
1591 struct kvm_s390_ucas_mapping ucasmap;
1593 if (copy_from_user(&ucasmap, argp, sizeof(ucasmap))) {
1594 r = -EFAULT;
1595 break;
1598 if (!kvm_is_ucontrol(vcpu->kvm)) {
1599 r = -EINVAL;
1600 break;
1603 r = gmap_map_segment(vcpu->arch.gmap, ucasmap.user_addr,
1604 ucasmap.vcpu_addr, ucasmap.length);
1605 break;
1607 case KVM_S390_UCAS_UNMAP: {
1608 struct kvm_s390_ucas_mapping ucasmap;
1610 if (copy_from_user(&ucasmap, argp, sizeof(ucasmap))) {
1611 r = -EFAULT;
1612 break;
1615 if (!kvm_is_ucontrol(vcpu->kvm)) {
1616 r = -EINVAL;
1617 break;
1620 r = gmap_unmap_segment(vcpu->arch.gmap, ucasmap.vcpu_addr,
1621 ucasmap.length);
1622 break;
1624 #endif
1625 case KVM_S390_VCPU_FAULT: {
1626 r = gmap_fault(arg, vcpu->arch.gmap);
1627 if (!IS_ERR_VALUE(r))
1628 r = 0;
1629 break;
1631 case KVM_ENABLE_CAP:
1633 struct kvm_enable_cap cap;
1634 r = -EFAULT;
1635 if (copy_from_user(&cap, argp, sizeof(cap)))
1636 break;
1637 r = kvm_vcpu_ioctl_enable_cap(vcpu, &cap);
1638 break;
1640 default:
1641 r = -ENOTTY;
1643 return r;
1646 int kvm_arch_vcpu_fault(struct kvm_vcpu *vcpu, struct vm_fault *vmf)
1648 #ifdef CONFIG_KVM_S390_UCONTROL
1649 if ((vmf->pgoff == KVM_S390_SIE_PAGE_OFFSET)
1650 && (kvm_is_ucontrol(vcpu->kvm))) {
1651 vmf->page = virt_to_page(vcpu->arch.sie_block);
1652 get_page(vmf->page);
1653 return 0;
1655 #endif
1656 return VM_FAULT_SIGBUS;
1659 void kvm_arch_free_memslot(struct kvm *kvm, struct kvm_memory_slot *free,
1660 struct kvm_memory_slot *dont)
1664 int kvm_arch_create_memslot(struct kvm *kvm, struct kvm_memory_slot *slot,
1665 unsigned long npages)
1667 return 0;
1670 void kvm_arch_memslots_updated(struct kvm *kvm)
1674 /* Section: memory related */
1675 int kvm_arch_prepare_memory_region(struct kvm *kvm,
1676 struct kvm_memory_slot *memslot,
1677 struct kvm_userspace_memory_region *mem,
1678 enum kvm_mr_change change)
1680 /* A few sanity checks. We can have memory slots which have to be
1681 located/ended at a segment boundary (1MB). The memory in userland is
1682 ok to be fragmented into various different vmas. It is okay to mmap()
1683 and munmap() stuff in this slot after doing this call at any time */
1685 if (mem->userspace_addr & 0xffffful)
1686 return -EINVAL;
1688 if (mem->memory_size & 0xffffful)
1689 return -EINVAL;
1691 return 0;
1694 void kvm_arch_commit_memory_region(struct kvm *kvm,
1695 struct kvm_userspace_memory_region *mem,
1696 const struct kvm_memory_slot *old,
1697 enum kvm_mr_change change)
1699 int rc;
1701 /* If the basics of the memslot do not change, we do not want
1702 * to update the gmap. Every update causes several unnecessary
1703 * segment translation exceptions. This is usually handled just
1704 * fine by the normal fault handler + gmap, but it will also
1705 * cause faults on the prefix page of running guest CPUs.
1707 if (old->userspace_addr == mem->userspace_addr &&
1708 old->base_gfn * PAGE_SIZE == mem->guest_phys_addr &&
1709 old->npages * PAGE_SIZE == mem->memory_size)
1710 return;
1712 rc = gmap_map_segment(kvm->arch.gmap, mem->userspace_addr,
1713 mem->guest_phys_addr, mem->memory_size);
1714 if (rc)
1715 printk(KERN_WARNING "kvm-s390: failed to commit memory region\n");
1716 return;
1719 void kvm_arch_flush_shadow_all(struct kvm *kvm)
1723 void kvm_arch_flush_shadow_memslot(struct kvm *kvm,
1724 struct kvm_memory_slot *slot)
1728 static int __init kvm_s390_init(void)
1730 int ret;
1731 ret = kvm_init(NULL, sizeof(struct kvm_vcpu), 0, THIS_MODULE);
1732 if (ret)
1733 return ret;
1736 * guests can ask for up to 255+1 double words, we need a full page
1737 * to hold the maximum amount of facilities. On the other hand, we
1738 * only set facilities that are known to work in KVM.
1740 vfacilities = (unsigned long *) get_zeroed_page(GFP_KERNEL|GFP_DMA);
1741 if (!vfacilities) {
1742 kvm_exit();
1743 return -ENOMEM;
1745 memcpy(vfacilities, S390_lowcore.stfle_fac_list, 16);
1746 vfacilities[0] &= 0xff82fff3f4fc2000UL;
1747 vfacilities[1] &= 0x005c000000000000UL;
1748 return 0;
1751 static void __exit kvm_s390_exit(void)
1753 free_page((unsigned long) vfacilities);
1754 kvm_exit();
1757 module_init(kvm_s390_init);
1758 module_exit(kvm_s390_exit);
1761 * Enable autoloading of the kvm module.
1762 * Note that we add the module alias here instead of virt/kvm/kvm_main.c
1763 * since x86 takes a different approach.
1765 #include <linux/miscdevice.h>
1766 MODULE_ALIAS_MISCDEV(KVM_MINOR);
1767 MODULE_ALIAS("devname:kvm");