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/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>
31 #include <asm/switch_to.h>
32 #include <asm/facility.h>
37 #define CREATE_TRACE_POINTS
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) },
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 ;-) */
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);
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)
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();
149 int kvm_dev_ioctl_check_extension(long 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:
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:
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 case KVM_CAP_MP_STATE:
173 case KVM_CAP_NR_VCPUS:
174 case KVM_CAP_MAX_VCPUS:
177 case KVM_CAP_NR_MEMSLOTS:
178 r = KVM_USER_MEM_SLOTS;
180 case KVM_CAP_S390_COW:
181 r = MACHINE_HAS_ESOP;
189 static void kvm_s390_sync_dirty_log(struct kvm *kvm,
190 struct kvm_memory_slot *memslot)
192 gfn_t cur_gfn, last_gfn;
193 unsigned long address;
194 struct gmap *gmap = kvm->arch.gmap;
196 down_read(&gmap->mm->mmap_sem);
197 /* Loop over all guest pages */
198 last_gfn = memslot->base_gfn + memslot->npages;
199 for (cur_gfn = memslot->base_gfn; cur_gfn <= last_gfn; cur_gfn++) {
200 address = gfn_to_hva_memslot(memslot, cur_gfn);
202 if (gmap_test_and_clear_dirty(address, gmap))
203 mark_page_dirty(kvm, cur_gfn);
205 up_read(&gmap->mm->mmap_sem);
208 /* Section: vm related */
210 * Get (and clear) the dirty memory log for a memory slot.
212 int kvm_vm_ioctl_get_dirty_log(struct kvm *kvm,
213 struct kvm_dirty_log *log)
217 struct kvm_memory_slot *memslot;
220 mutex_lock(&kvm->slots_lock);
223 if (log->slot >= KVM_USER_MEM_SLOTS)
226 memslot = id_to_memslot(kvm->memslots, log->slot);
228 if (!memslot->dirty_bitmap)
231 kvm_s390_sync_dirty_log(kvm, memslot);
232 r = kvm_get_dirty_log(kvm, log, &is_dirty);
236 /* Clear the dirty log */
238 n = kvm_dirty_bitmap_bytes(memslot);
239 memset(memslot->dirty_bitmap, 0, n);
243 mutex_unlock(&kvm->slots_lock);
247 static int kvm_vm_ioctl_enable_cap(struct kvm *kvm, struct kvm_enable_cap *cap)
255 case KVM_CAP_S390_IRQCHIP:
256 kvm->arch.use_irqchip = 1;
266 static int kvm_s390_mem_control(struct kvm *kvm, struct kvm_device_attr *attr)
270 switch (attr->attr) {
271 case KVM_S390_VM_MEM_ENABLE_CMMA:
273 mutex_lock(&kvm->lock);
274 if (atomic_read(&kvm->online_vcpus) == 0) {
275 kvm->arch.use_cmma = 1;
278 mutex_unlock(&kvm->lock);
280 case KVM_S390_VM_MEM_CLR_CMMA:
281 mutex_lock(&kvm->lock);
282 idx = srcu_read_lock(&kvm->srcu);
283 page_table_reset_pgste(kvm->arch.gmap->mm, 0, TASK_SIZE, false);
284 srcu_read_unlock(&kvm->srcu, idx);
285 mutex_unlock(&kvm->lock);
295 static int kvm_s390_vm_set_attr(struct kvm *kvm, struct kvm_device_attr *attr)
299 switch (attr->group) {
300 case KVM_S390_VM_MEM_CTRL:
301 ret = kvm_s390_mem_control(kvm, attr);
311 static int kvm_s390_vm_get_attr(struct kvm *kvm, struct kvm_device_attr *attr)
316 static int kvm_s390_vm_has_attr(struct kvm *kvm, struct kvm_device_attr *attr)
320 switch (attr->group) {
321 case KVM_S390_VM_MEM_CTRL:
322 switch (attr->attr) {
323 case KVM_S390_VM_MEM_ENABLE_CMMA:
324 case KVM_S390_VM_MEM_CLR_CMMA:
340 long kvm_arch_vm_ioctl(struct file *filp,
341 unsigned int ioctl, unsigned long arg)
343 struct kvm *kvm = filp->private_data;
344 void __user *argp = (void __user *)arg;
345 struct kvm_device_attr attr;
349 case KVM_S390_INTERRUPT: {
350 struct kvm_s390_interrupt s390int;
353 if (copy_from_user(&s390int, argp, sizeof(s390int)))
355 r = kvm_s390_inject_vm(kvm, &s390int);
358 case KVM_ENABLE_CAP: {
359 struct kvm_enable_cap cap;
361 if (copy_from_user(&cap, argp, sizeof(cap)))
363 r = kvm_vm_ioctl_enable_cap(kvm, &cap);
366 case KVM_CREATE_IRQCHIP: {
367 struct kvm_irq_routing_entry routing;
370 if (kvm->arch.use_irqchip) {
371 /* Set up dummy routing. */
372 memset(&routing, 0, sizeof(routing));
373 kvm_set_irq_routing(kvm, &routing, 0, 0);
378 case KVM_SET_DEVICE_ATTR: {
380 if (copy_from_user(&attr, (void __user *)arg, sizeof(attr)))
382 r = kvm_s390_vm_set_attr(kvm, &attr);
385 case KVM_GET_DEVICE_ATTR: {
387 if (copy_from_user(&attr, (void __user *)arg, sizeof(attr)))
389 r = kvm_s390_vm_get_attr(kvm, &attr);
392 case KVM_HAS_DEVICE_ATTR: {
394 if (copy_from_user(&attr, (void __user *)arg, sizeof(attr)))
396 r = kvm_s390_vm_has_attr(kvm, &attr);
406 int kvm_arch_init_vm(struct kvm *kvm, unsigned long type)
410 static unsigned long sca_offset;
413 #ifdef CONFIG_KVM_S390_UCONTROL
414 if (type & ~KVM_VM_S390_UCONTROL)
416 if ((type & KVM_VM_S390_UCONTROL) && (!capable(CAP_SYS_ADMIN)))
423 rc = s390_enable_sie();
429 kvm->arch.sca = (struct sca_block *) get_zeroed_page(GFP_KERNEL);
432 spin_lock(&kvm_lock);
433 sca_offset = (sca_offset + 16) & 0x7f0;
434 kvm->arch.sca = (struct sca_block *) ((char *) kvm->arch.sca + sca_offset);
435 spin_unlock(&kvm_lock);
437 sprintf(debug_name, "kvm-%u", current->pid);
439 kvm->arch.dbf = debug_register(debug_name, 8, 2, 8 * sizeof(long));
443 spin_lock_init(&kvm->arch.float_int.lock);
444 INIT_LIST_HEAD(&kvm->arch.float_int.list);
445 init_waitqueue_head(&kvm->arch.ipte_wq);
447 debug_register_view(kvm->arch.dbf, &debug_sprintf_view);
448 VM_EVENT(kvm, 3, "%s", "vm created");
450 if (type & KVM_VM_S390_UCONTROL) {
451 kvm->arch.gmap = NULL;
453 kvm->arch.gmap = gmap_alloc(current->mm);
456 kvm->arch.gmap->private = kvm;
457 kvm->arch.gmap->pfault_enabled = 0;
460 kvm->arch.css_support = 0;
461 kvm->arch.use_irqchip = 0;
463 spin_lock_init(&kvm->arch.start_stop_lock);
467 debug_unregister(kvm->arch.dbf);
469 free_page((unsigned long)(kvm->arch.sca));
474 void kvm_arch_vcpu_destroy(struct kvm_vcpu *vcpu)
476 VCPU_EVENT(vcpu, 3, "%s", "free cpu");
477 trace_kvm_s390_destroy_vcpu(vcpu->vcpu_id);
478 kvm_s390_clear_local_irqs(vcpu);
479 kvm_clear_async_pf_completion_queue(vcpu);
480 if (!kvm_is_ucontrol(vcpu->kvm)) {
481 clear_bit(63 - vcpu->vcpu_id,
482 (unsigned long *) &vcpu->kvm->arch.sca->mcn);
483 if (vcpu->kvm->arch.sca->cpu[vcpu->vcpu_id].sda ==
484 (__u64) vcpu->arch.sie_block)
485 vcpu->kvm->arch.sca->cpu[vcpu->vcpu_id].sda = 0;
489 if (kvm_is_ucontrol(vcpu->kvm))
490 gmap_free(vcpu->arch.gmap);
492 if (kvm_s390_cmma_enabled(vcpu->kvm))
493 kvm_s390_vcpu_unsetup_cmma(vcpu);
494 free_page((unsigned long)(vcpu->arch.sie_block));
496 kvm_vcpu_uninit(vcpu);
497 kmem_cache_free(kvm_vcpu_cache, vcpu);
500 static void kvm_free_vcpus(struct kvm *kvm)
503 struct kvm_vcpu *vcpu;
505 kvm_for_each_vcpu(i, vcpu, kvm)
506 kvm_arch_vcpu_destroy(vcpu);
508 mutex_lock(&kvm->lock);
509 for (i = 0; i < atomic_read(&kvm->online_vcpus); i++)
510 kvm->vcpus[i] = NULL;
512 atomic_set(&kvm->online_vcpus, 0);
513 mutex_unlock(&kvm->lock);
516 void kvm_arch_sync_events(struct kvm *kvm)
520 void kvm_arch_destroy_vm(struct kvm *kvm)
523 free_page((unsigned long)(kvm->arch.sca));
524 debug_unregister(kvm->arch.dbf);
525 if (!kvm_is_ucontrol(kvm))
526 gmap_free(kvm->arch.gmap);
527 kvm_s390_destroy_adapters(kvm);
528 kvm_s390_clear_float_irqs(kvm);
531 /* Section: vcpu related */
532 int kvm_arch_vcpu_init(struct kvm_vcpu *vcpu)
534 vcpu->arch.pfault_token = KVM_S390_PFAULT_TOKEN_INVALID;
535 kvm_clear_async_pf_completion_queue(vcpu);
536 if (kvm_is_ucontrol(vcpu->kvm)) {
537 vcpu->arch.gmap = gmap_alloc(current->mm);
538 if (!vcpu->arch.gmap)
540 vcpu->arch.gmap->private = vcpu->kvm;
544 vcpu->arch.gmap = vcpu->kvm->arch.gmap;
545 vcpu->run->kvm_valid_regs = KVM_SYNC_PREFIX |
552 void kvm_arch_vcpu_uninit(struct kvm_vcpu *vcpu)
557 void kvm_arch_vcpu_load(struct kvm_vcpu *vcpu, int cpu)
559 save_fp_ctl(&vcpu->arch.host_fpregs.fpc);
560 save_fp_regs(vcpu->arch.host_fpregs.fprs);
561 save_access_regs(vcpu->arch.host_acrs);
562 restore_fp_ctl(&vcpu->arch.guest_fpregs.fpc);
563 restore_fp_regs(vcpu->arch.guest_fpregs.fprs);
564 restore_access_regs(vcpu->run->s.regs.acrs);
565 gmap_enable(vcpu->arch.gmap);
566 atomic_set_mask(CPUSTAT_RUNNING, &vcpu->arch.sie_block->cpuflags);
569 void kvm_arch_vcpu_put(struct kvm_vcpu *vcpu)
571 atomic_clear_mask(CPUSTAT_RUNNING, &vcpu->arch.sie_block->cpuflags);
572 gmap_disable(vcpu->arch.gmap);
573 save_fp_ctl(&vcpu->arch.guest_fpregs.fpc);
574 save_fp_regs(vcpu->arch.guest_fpregs.fprs);
575 save_access_regs(vcpu->run->s.regs.acrs);
576 restore_fp_ctl(&vcpu->arch.host_fpregs.fpc);
577 restore_fp_regs(vcpu->arch.host_fpregs.fprs);
578 restore_access_regs(vcpu->arch.host_acrs);
581 static void kvm_s390_vcpu_initial_reset(struct kvm_vcpu *vcpu)
583 /* this equals initial cpu reset in pop, but we don't switch to ESA */
584 vcpu->arch.sie_block->gpsw.mask = 0UL;
585 vcpu->arch.sie_block->gpsw.addr = 0UL;
586 kvm_s390_set_prefix(vcpu, 0);
587 vcpu->arch.sie_block->cputm = 0UL;
588 vcpu->arch.sie_block->ckc = 0UL;
589 vcpu->arch.sie_block->todpr = 0;
590 memset(vcpu->arch.sie_block->gcr, 0, 16 * sizeof(__u64));
591 vcpu->arch.sie_block->gcr[0] = 0xE0UL;
592 vcpu->arch.sie_block->gcr[14] = 0xC2000000UL;
593 vcpu->arch.guest_fpregs.fpc = 0;
594 asm volatile("lfpc %0" : : "Q" (vcpu->arch.guest_fpregs.fpc));
595 vcpu->arch.sie_block->gbea = 1;
596 vcpu->arch.sie_block->pp = 0;
597 vcpu->arch.pfault_token = KVM_S390_PFAULT_TOKEN_INVALID;
598 kvm_clear_async_pf_completion_queue(vcpu);
599 if (!kvm_s390_user_cpu_state_ctrl(vcpu->kvm))
600 kvm_s390_vcpu_stop(vcpu);
601 kvm_s390_clear_local_irqs(vcpu);
604 int kvm_arch_vcpu_postcreate(struct kvm_vcpu *vcpu)
609 void kvm_s390_vcpu_unsetup_cmma(struct kvm_vcpu *vcpu)
611 free_page(vcpu->arch.sie_block->cbrlo);
612 vcpu->arch.sie_block->cbrlo = 0;
615 int kvm_s390_vcpu_setup_cmma(struct kvm_vcpu *vcpu)
617 vcpu->arch.sie_block->cbrlo = get_zeroed_page(GFP_KERNEL);
618 if (!vcpu->arch.sie_block->cbrlo)
621 vcpu->arch.sie_block->ecb2 |= 0x80;
622 vcpu->arch.sie_block->ecb2 &= ~0x08;
626 int kvm_arch_vcpu_setup(struct kvm_vcpu *vcpu)
630 atomic_set(&vcpu->arch.sie_block->cpuflags, CPUSTAT_ZARCH |
634 vcpu->arch.sie_block->ecb = 6;
635 if (test_vfacility(50) && test_vfacility(73))
636 vcpu->arch.sie_block->ecb |= 0x10;
638 vcpu->arch.sie_block->ecb2 = 8;
639 vcpu->arch.sie_block->eca = 0xD1002000U;
641 vcpu->arch.sie_block->eca |= 1;
642 vcpu->arch.sie_block->fac = (int) (long) vfacilities;
643 vcpu->arch.sie_block->ictl |= ICTL_ISKE | ICTL_SSKE | ICTL_RRBE |
646 if (kvm_s390_cmma_enabled(vcpu->kvm)) {
647 rc = kvm_s390_vcpu_setup_cmma(vcpu);
651 hrtimer_init(&vcpu->arch.ckc_timer, CLOCK_REALTIME, HRTIMER_MODE_ABS);
652 tasklet_init(&vcpu->arch.tasklet, kvm_s390_tasklet,
653 (unsigned long) vcpu);
654 vcpu->arch.ckc_timer.function = kvm_s390_idle_wakeup;
655 get_cpu_id(&vcpu->arch.cpu_id);
656 vcpu->arch.cpu_id.version = 0xff;
660 struct kvm_vcpu *kvm_arch_vcpu_create(struct kvm *kvm,
663 struct kvm_vcpu *vcpu;
664 struct sie_page *sie_page;
667 if (id >= KVM_MAX_VCPUS)
672 vcpu = kmem_cache_zalloc(kvm_vcpu_cache, GFP_KERNEL);
676 sie_page = (struct sie_page *) get_zeroed_page(GFP_KERNEL);
680 vcpu->arch.sie_block = &sie_page->sie_block;
681 vcpu->arch.sie_block->itdba = (unsigned long) &sie_page->itdb;
683 vcpu->arch.sie_block->icpua = id;
684 if (!kvm_is_ucontrol(kvm)) {
685 if (!kvm->arch.sca) {
689 if (!kvm->arch.sca->cpu[id].sda)
690 kvm->arch.sca->cpu[id].sda =
691 (__u64) vcpu->arch.sie_block;
692 vcpu->arch.sie_block->scaoh =
693 (__u32)(((__u64)kvm->arch.sca) >> 32);
694 vcpu->arch.sie_block->scaol = (__u32)(__u64)kvm->arch.sca;
695 set_bit(63 - id, (unsigned long *) &kvm->arch.sca->mcn);
698 spin_lock_init(&vcpu->arch.local_int.lock);
699 INIT_LIST_HEAD(&vcpu->arch.local_int.list);
700 vcpu->arch.local_int.float_int = &kvm->arch.float_int;
701 vcpu->arch.local_int.wq = &vcpu->wq;
702 vcpu->arch.local_int.cpuflags = &vcpu->arch.sie_block->cpuflags;
704 rc = kvm_vcpu_init(vcpu, kvm, id);
706 goto out_free_sie_block;
707 VM_EVENT(kvm, 3, "create cpu %d at %p, sie block at %p", id, vcpu,
708 vcpu->arch.sie_block);
709 trace_kvm_s390_create_vcpu(id, vcpu, vcpu->arch.sie_block);
713 free_page((unsigned long)(vcpu->arch.sie_block));
715 kmem_cache_free(kvm_vcpu_cache, vcpu);
720 int kvm_arch_vcpu_runnable(struct kvm_vcpu *vcpu)
722 return kvm_cpu_has_interrupt(vcpu);
725 void s390_vcpu_block(struct kvm_vcpu *vcpu)
727 atomic_set_mask(PROG_BLOCK_SIE, &vcpu->arch.sie_block->prog20);
730 void s390_vcpu_unblock(struct kvm_vcpu *vcpu)
732 atomic_clear_mask(PROG_BLOCK_SIE, &vcpu->arch.sie_block->prog20);
736 * Kick a guest cpu out of SIE and wait until SIE is not running.
737 * If the CPU is not running (e.g. waiting as idle) the function will
738 * return immediately. */
739 void exit_sie(struct kvm_vcpu *vcpu)
741 atomic_set_mask(CPUSTAT_STOP_INT, &vcpu->arch.sie_block->cpuflags);
742 while (vcpu->arch.sie_block->prog0c & PROG_IN_SIE)
746 /* Kick a guest cpu out of SIE and prevent SIE-reentry */
747 void exit_sie_sync(struct kvm_vcpu *vcpu)
749 s390_vcpu_block(vcpu);
753 static void kvm_gmap_notifier(struct gmap *gmap, unsigned long address)
756 struct kvm *kvm = gmap->private;
757 struct kvm_vcpu *vcpu;
759 kvm_for_each_vcpu(i, vcpu, kvm) {
760 /* match against both prefix pages */
761 if (kvm_s390_get_prefix(vcpu) == (address & ~0x1000UL)) {
762 VCPU_EVENT(vcpu, 2, "gmap notifier for %lx", address);
763 kvm_make_request(KVM_REQ_MMU_RELOAD, vcpu);
769 int kvm_arch_vcpu_should_kick(struct kvm_vcpu *vcpu)
771 /* kvm common code refers to this, but never calls it */
776 static int kvm_arch_vcpu_ioctl_get_one_reg(struct kvm_vcpu *vcpu,
777 struct kvm_one_reg *reg)
782 case KVM_REG_S390_TODPR:
783 r = put_user(vcpu->arch.sie_block->todpr,
784 (u32 __user *)reg->addr);
786 case KVM_REG_S390_EPOCHDIFF:
787 r = put_user(vcpu->arch.sie_block->epoch,
788 (u64 __user *)reg->addr);
790 case KVM_REG_S390_CPU_TIMER:
791 r = put_user(vcpu->arch.sie_block->cputm,
792 (u64 __user *)reg->addr);
794 case KVM_REG_S390_CLOCK_COMP:
795 r = put_user(vcpu->arch.sie_block->ckc,
796 (u64 __user *)reg->addr);
798 case KVM_REG_S390_PFTOKEN:
799 r = put_user(vcpu->arch.pfault_token,
800 (u64 __user *)reg->addr);
802 case KVM_REG_S390_PFCOMPARE:
803 r = put_user(vcpu->arch.pfault_compare,
804 (u64 __user *)reg->addr);
806 case KVM_REG_S390_PFSELECT:
807 r = put_user(vcpu->arch.pfault_select,
808 (u64 __user *)reg->addr);
810 case KVM_REG_S390_PP:
811 r = put_user(vcpu->arch.sie_block->pp,
812 (u64 __user *)reg->addr);
814 case KVM_REG_S390_GBEA:
815 r = put_user(vcpu->arch.sie_block->gbea,
816 (u64 __user *)reg->addr);
825 static int kvm_arch_vcpu_ioctl_set_one_reg(struct kvm_vcpu *vcpu,
826 struct kvm_one_reg *reg)
831 case KVM_REG_S390_TODPR:
832 r = get_user(vcpu->arch.sie_block->todpr,
833 (u32 __user *)reg->addr);
835 case KVM_REG_S390_EPOCHDIFF:
836 r = get_user(vcpu->arch.sie_block->epoch,
837 (u64 __user *)reg->addr);
839 case KVM_REG_S390_CPU_TIMER:
840 r = get_user(vcpu->arch.sie_block->cputm,
841 (u64 __user *)reg->addr);
843 case KVM_REG_S390_CLOCK_COMP:
844 r = get_user(vcpu->arch.sie_block->ckc,
845 (u64 __user *)reg->addr);
847 case KVM_REG_S390_PFTOKEN:
848 r = get_user(vcpu->arch.pfault_token,
849 (u64 __user *)reg->addr);
851 case KVM_REG_S390_PFCOMPARE:
852 r = get_user(vcpu->arch.pfault_compare,
853 (u64 __user *)reg->addr);
855 case KVM_REG_S390_PFSELECT:
856 r = get_user(vcpu->arch.pfault_select,
857 (u64 __user *)reg->addr);
859 case KVM_REG_S390_PP:
860 r = get_user(vcpu->arch.sie_block->pp,
861 (u64 __user *)reg->addr);
863 case KVM_REG_S390_GBEA:
864 r = get_user(vcpu->arch.sie_block->gbea,
865 (u64 __user *)reg->addr);
874 static int kvm_arch_vcpu_ioctl_initial_reset(struct kvm_vcpu *vcpu)
876 kvm_s390_vcpu_initial_reset(vcpu);
880 int kvm_arch_vcpu_ioctl_set_regs(struct kvm_vcpu *vcpu, struct kvm_regs *regs)
882 memcpy(&vcpu->run->s.regs.gprs, ®s->gprs, sizeof(regs->gprs));
886 int kvm_arch_vcpu_ioctl_get_regs(struct kvm_vcpu *vcpu, struct kvm_regs *regs)
888 memcpy(®s->gprs, &vcpu->run->s.regs.gprs, sizeof(regs->gprs));
892 int kvm_arch_vcpu_ioctl_set_sregs(struct kvm_vcpu *vcpu,
893 struct kvm_sregs *sregs)
895 memcpy(&vcpu->run->s.regs.acrs, &sregs->acrs, sizeof(sregs->acrs));
896 memcpy(&vcpu->arch.sie_block->gcr, &sregs->crs, sizeof(sregs->crs));
897 restore_access_regs(vcpu->run->s.regs.acrs);
901 int kvm_arch_vcpu_ioctl_get_sregs(struct kvm_vcpu *vcpu,
902 struct kvm_sregs *sregs)
904 memcpy(&sregs->acrs, &vcpu->run->s.regs.acrs, sizeof(sregs->acrs));
905 memcpy(&sregs->crs, &vcpu->arch.sie_block->gcr, sizeof(sregs->crs));
909 int kvm_arch_vcpu_ioctl_set_fpu(struct kvm_vcpu *vcpu, struct kvm_fpu *fpu)
911 if (test_fp_ctl(fpu->fpc))
913 memcpy(&vcpu->arch.guest_fpregs.fprs, &fpu->fprs, sizeof(fpu->fprs));
914 vcpu->arch.guest_fpregs.fpc = fpu->fpc;
915 restore_fp_ctl(&vcpu->arch.guest_fpregs.fpc);
916 restore_fp_regs(vcpu->arch.guest_fpregs.fprs);
920 int kvm_arch_vcpu_ioctl_get_fpu(struct kvm_vcpu *vcpu, struct kvm_fpu *fpu)
922 memcpy(&fpu->fprs, &vcpu->arch.guest_fpregs.fprs, sizeof(fpu->fprs));
923 fpu->fpc = vcpu->arch.guest_fpregs.fpc;
927 static int kvm_arch_vcpu_ioctl_set_initial_psw(struct kvm_vcpu *vcpu, psw_t psw)
931 if (!is_vcpu_stopped(vcpu))
934 vcpu->run->psw_mask = psw.mask;
935 vcpu->run->psw_addr = psw.addr;
940 int kvm_arch_vcpu_ioctl_translate(struct kvm_vcpu *vcpu,
941 struct kvm_translation *tr)
943 return -EINVAL; /* not implemented yet */
946 #define VALID_GUESTDBG_FLAGS (KVM_GUESTDBG_SINGLESTEP | \
947 KVM_GUESTDBG_USE_HW_BP | \
950 int kvm_arch_vcpu_ioctl_set_guest_debug(struct kvm_vcpu *vcpu,
951 struct kvm_guest_debug *dbg)
955 vcpu->guest_debug = 0;
956 kvm_s390_clear_bp_data(vcpu);
958 if (dbg->control & ~VALID_GUESTDBG_FLAGS)
961 if (dbg->control & KVM_GUESTDBG_ENABLE) {
962 vcpu->guest_debug = dbg->control;
963 /* enforce guest PER */
964 atomic_set_mask(CPUSTAT_P, &vcpu->arch.sie_block->cpuflags);
966 if (dbg->control & KVM_GUESTDBG_USE_HW_BP)
967 rc = kvm_s390_import_bp_data(vcpu, dbg);
969 atomic_clear_mask(CPUSTAT_P, &vcpu->arch.sie_block->cpuflags);
970 vcpu->arch.guestdbg.last_bp = 0;
974 vcpu->guest_debug = 0;
975 kvm_s390_clear_bp_data(vcpu);
976 atomic_clear_mask(CPUSTAT_P, &vcpu->arch.sie_block->cpuflags);
982 int kvm_arch_vcpu_ioctl_get_mpstate(struct kvm_vcpu *vcpu,
983 struct kvm_mp_state *mp_state)
985 /* CHECK_STOP and LOAD are not supported yet */
986 return is_vcpu_stopped(vcpu) ? KVM_MP_STATE_STOPPED :
987 KVM_MP_STATE_OPERATING;
990 int kvm_arch_vcpu_ioctl_set_mpstate(struct kvm_vcpu *vcpu,
991 struct kvm_mp_state *mp_state)
995 /* user space knows about this interface - let it control the state */
996 vcpu->kvm->arch.user_cpu_state_ctrl = 1;
998 switch (mp_state->mp_state) {
999 case KVM_MP_STATE_STOPPED:
1000 kvm_s390_vcpu_stop(vcpu);
1002 case KVM_MP_STATE_OPERATING:
1003 kvm_s390_vcpu_start(vcpu);
1005 case KVM_MP_STATE_LOAD:
1006 case KVM_MP_STATE_CHECK_STOP:
1007 /* fall through - CHECK_STOP and LOAD are not supported yet */
1015 bool kvm_s390_cmma_enabled(struct kvm *kvm)
1017 if (!MACHINE_IS_LPAR)
1019 /* only enable for z10 and later */
1020 if (!MACHINE_HAS_EDAT1)
1022 if (!kvm->arch.use_cmma)
1027 static bool ibs_enabled(struct kvm_vcpu *vcpu)
1029 return atomic_read(&vcpu->arch.sie_block->cpuflags) & CPUSTAT_IBS;
1032 static int kvm_s390_handle_requests(struct kvm_vcpu *vcpu)
1035 s390_vcpu_unblock(vcpu);
1037 * We use MMU_RELOAD just to re-arm the ipte notifier for the
1038 * guest prefix page. gmap_ipte_notify will wait on the ptl lock.
1039 * This ensures that the ipte instruction for this request has
1040 * already finished. We might race against a second unmapper that
1041 * wants to set the blocking bit. Lets just retry the request loop.
1043 if (kvm_check_request(KVM_REQ_MMU_RELOAD, vcpu)) {
1045 rc = gmap_ipte_notify(vcpu->arch.gmap,
1046 kvm_s390_get_prefix(vcpu),
1053 if (kvm_check_request(KVM_REQ_ENABLE_IBS, vcpu)) {
1054 if (!ibs_enabled(vcpu)) {
1055 trace_kvm_s390_enable_disable_ibs(vcpu->vcpu_id, 1);
1056 atomic_set_mask(CPUSTAT_IBS,
1057 &vcpu->arch.sie_block->cpuflags);
1062 if (kvm_check_request(KVM_REQ_DISABLE_IBS, vcpu)) {
1063 if (ibs_enabled(vcpu)) {
1064 trace_kvm_s390_enable_disable_ibs(vcpu->vcpu_id, 0);
1065 atomic_clear_mask(CPUSTAT_IBS,
1066 &vcpu->arch.sie_block->cpuflags);
1071 /* nothing to do, just clear the request */
1072 clear_bit(KVM_REQ_UNHALT, &vcpu->requests);
1078 * kvm_arch_fault_in_page - fault-in guest page if necessary
1079 * @vcpu: The corresponding virtual cpu
1080 * @gpa: Guest physical address
1081 * @writable: Whether the page should be writable or not
1083 * Make sure that a guest page has been faulted-in on the host.
1085 * Return: Zero on success, negative error code otherwise.
1087 long kvm_arch_fault_in_page(struct kvm_vcpu *vcpu, gpa_t gpa, int writable)
1089 struct mm_struct *mm = current->mm;
1093 hva = gmap_fault(gpa, vcpu->arch.gmap);
1094 if (IS_ERR_VALUE(hva))
1096 down_read(&mm->mmap_sem);
1097 rc = get_user_pages(current, mm, hva, 1, writable, 0, NULL, NULL);
1098 up_read(&mm->mmap_sem);
1100 return rc < 0 ? rc : 0;
1103 static void __kvm_inject_pfault_token(struct kvm_vcpu *vcpu, bool start_token,
1104 unsigned long token)
1106 struct kvm_s390_interrupt inti;
1107 inti.parm64 = token;
1110 inti.type = KVM_S390_INT_PFAULT_INIT;
1111 WARN_ON_ONCE(kvm_s390_inject_vcpu(vcpu, &inti));
1113 inti.type = KVM_S390_INT_PFAULT_DONE;
1114 WARN_ON_ONCE(kvm_s390_inject_vm(vcpu->kvm, &inti));
1118 void kvm_arch_async_page_not_present(struct kvm_vcpu *vcpu,
1119 struct kvm_async_pf *work)
1121 trace_kvm_s390_pfault_init(vcpu, work->arch.pfault_token);
1122 __kvm_inject_pfault_token(vcpu, true, work->arch.pfault_token);
1125 void kvm_arch_async_page_present(struct kvm_vcpu *vcpu,
1126 struct kvm_async_pf *work)
1128 trace_kvm_s390_pfault_done(vcpu, work->arch.pfault_token);
1129 __kvm_inject_pfault_token(vcpu, false, work->arch.pfault_token);
1132 void kvm_arch_async_page_ready(struct kvm_vcpu *vcpu,
1133 struct kvm_async_pf *work)
1135 /* s390 will always inject the page directly */
1138 bool kvm_arch_can_inject_async_page_present(struct kvm_vcpu *vcpu)
1141 * s390 will always inject the page directly,
1142 * but we still want check_async_completion to cleanup
1147 static int kvm_arch_setup_async_pf(struct kvm_vcpu *vcpu)
1150 struct kvm_arch_async_pf arch;
1153 if (vcpu->arch.pfault_token == KVM_S390_PFAULT_TOKEN_INVALID)
1155 if ((vcpu->arch.sie_block->gpsw.mask & vcpu->arch.pfault_select) !=
1156 vcpu->arch.pfault_compare)
1158 if (psw_extint_disabled(vcpu))
1160 if (kvm_cpu_has_interrupt(vcpu))
1162 if (!(vcpu->arch.sie_block->gcr[0] & 0x200ul))
1164 if (!vcpu->arch.gmap->pfault_enabled)
1167 hva = gfn_to_hva(vcpu->kvm, gpa_to_gfn(current->thread.gmap_addr));
1168 hva += current->thread.gmap_addr & ~PAGE_MASK;
1169 if (read_guest_real(vcpu, vcpu->arch.pfault_token, &arch.pfault_token, 8))
1172 rc = kvm_setup_async_pf(vcpu, current->thread.gmap_addr, hva, &arch);
1176 static int vcpu_pre_run(struct kvm_vcpu *vcpu)
1181 * On s390 notifications for arriving pages will be delivered directly
1182 * to the guest but the house keeping for completed pfaults is
1183 * handled outside the worker.
1185 kvm_check_async_pf_completion(vcpu);
1187 memcpy(&vcpu->arch.sie_block->gg14, &vcpu->run->s.regs.gprs[14], 16);
1192 if (test_cpu_flag(CIF_MCCK_PENDING))
1195 if (!kvm_is_ucontrol(vcpu->kvm))
1196 kvm_s390_deliver_pending_interrupts(vcpu);
1198 rc = kvm_s390_handle_requests(vcpu);
1202 if (guestdbg_enabled(vcpu)) {
1203 kvm_s390_backup_guest_per_regs(vcpu);
1204 kvm_s390_patch_guest_per_regs(vcpu);
1207 vcpu->arch.sie_block->icptcode = 0;
1208 cpuflags = atomic_read(&vcpu->arch.sie_block->cpuflags);
1209 VCPU_EVENT(vcpu, 6, "entering sie flags %x", cpuflags);
1210 trace_kvm_s390_sie_enter(vcpu, cpuflags);
1215 static int vcpu_post_run(struct kvm_vcpu *vcpu, int exit_reason)
1219 VCPU_EVENT(vcpu, 6, "exit sie icptcode %d",
1220 vcpu->arch.sie_block->icptcode);
1221 trace_kvm_s390_sie_exit(vcpu, vcpu->arch.sie_block->icptcode);
1223 if (guestdbg_enabled(vcpu))
1224 kvm_s390_restore_guest_per_regs(vcpu);
1226 if (exit_reason >= 0) {
1228 } else if (kvm_is_ucontrol(vcpu->kvm)) {
1229 vcpu->run->exit_reason = KVM_EXIT_S390_UCONTROL;
1230 vcpu->run->s390_ucontrol.trans_exc_code =
1231 current->thread.gmap_addr;
1232 vcpu->run->s390_ucontrol.pgm_code = 0x10;
1235 } else if (current->thread.gmap_pfault) {
1236 trace_kvm_s390_major_guest_pfault(vcpu);
1237 current->thread.gmap_pfault = 0;
1238 if (kvm_arch_setup_async_pf(vcpu)) {
1241 gpa_t gpa = current->thread.gmap_addr;
1242 rc = kvm_arch_fault_in_page(vcpu, gpa, 1);
1247 VCPU_EVENT(vcpu, 3, "%s", "fault in sie instruction");
1248 trace_kvm_s390_sie_fault(vcpu);
1249 rc = kvm_s390_inject_program_int(vcpu, PGM_ADDRESSING);
1252 memcpy(&vcpu->run->s.regs.gprs[14], &vcpu->arch.sie_block->gg14, 16);
1255 if (kvm_is_ucontrol(vcpu->kvm))
1256 /* Don't exit for host interrupts. */
1257 rc = vcpu->arch.sie_block->icptcode ? -EOPNOTSUPP : 0;
1259 rc = kvm_handle_sie_intercept(vcpu);
1265 static int __vcpu_run(struct kvm_vcpu *vcpu)
1267 int rc, exit_reason;
1270 * We try to hold kvm->srcu during most of vcpu_run (except when run-
1271 * ning the guest), so that memslots (and other stuff) are protected
1273 vcpu->srcu_idx = srcu_read_lock(&vcpu->kvm->srcu);
1276 rc = vcpu_pre_run(vcpu);
1280 srcu_read_unlock(&vcpu->kvm->srcu, vcpu->srcu_idx);
1282 * As PF_VCPU will be used in fault handler, between
1283 * guest_enter and guest_exit should be no uaccess.
1288 exit_reason = sie64a(vcpu->arch.sie_block,
1289 vcpu->run->s.regs.gprs);
1291 vcpu->srcu_idx = srcu_read_lock(&vcpu->kvm->srcu);
1293 rc = vcpu_post_run(vcpu, exit_reason);
1294 } while (!signal_pending(current) && !guestdbg_exit_pending(vcpu) && !rc);
1296 srcu_read_unlock(&vcpu->kvm->srcu, vcpu->srcu_idx);
1300 int kvm_arch_vcpu_ioctl_run(struct kvm_vcpu *vcpu, struct kvm_run *kvm_run)
1305 if (guestdbg_exit_pending(vcpu)) {
1306 kvm_s390_prepare_debug_exit(vcpu);
1310 if (vcpu->sigset_active)
1311 sigprocmask(SIG_SETMASK, &vcpu->sigset, &sigsaved);
1313 if (!kvm_s390_user_cpu_state_ctrl(vcpu->kvm)) {
1314 kvm_s390_vcpu_start(vcpu);
1315 } else if (is_vcpu_stopped(vcpu)) {
1316 pr_err_ratelimited("kvm-s390: can't run stopped vcpu %d\n",
1321 switch (kvm_run->exit_reason) {
1322 case KVM_EXIT_S390_SIEIC:
1323 case KVM_EXIT_UNKNOWN:
1325 case KVM_EXIT_S390_RESET:
1326 case KVM_EXIT_S390_UCONTROL:
1327 case KVM_EXIT_S390_TSCH:
1328 case KVM_EXIT_DEBUG:
1334 vcpu->arch.sie_block->gpsw.mask = kvm_run->psw_mask;
1335 vcpu->arch.sie_block->gpsw.addr = kvm_run->psw_addr;
1336 if (kvm_run->kvm_dirty_regs & KVM_SYNC_PREFIX) {
1337 kvm_run->kvm_dirty_regs &= ~KVM_SYNC_PREFIX;
1338 kvm_s390_set_prefix(vcpu, kvm_run->s.regs.prefix);
1340 if (kvm_run->kvm_dirty_regs & KVM_SYNC_CRS) {
1341 kvm_run->kvm_dirty_regs &= ~KVM_SYNC_CRS;
1342 memcpy(&vcpu->arch.sie_block->gcr, &kvm_run->s.regs.crs, 128);
1343 kvm_s390_set_prefix(vcpu, kvm_run->s.regs.prefix);
1347 rc = __vcpu_run(vcpu);
1349 if (signal_pending(current) && !rc) {
1350 kvm_run->exit_reason = KVM_EXIT_INTR;
1354 if (guestdbg_exit_pending(vcpu) && !rc) {
1355 kvm_s390_prepare_debug_exit(vcpu);
1359 if (rc == -EOPNOTSUPP) {
1360 /* intercept cannot be handled in-kernel, prepare kvm-run */
1361 kvm_run->exit_reason = KVM_EXIT_S390_SIEIC;
1362 kvm_run->s390_sieic.icptcode = vcpu->arch.sie_block->icptcode;
1363 kvm_run->s390_sieic.ipa = vcpu->arch.sie_block->ipa;
1364 kvm_run->s390_sieic.ipb = vcpu->arch.sie_block->ipb;
1368 if (rc == -EREMOTE) {
1369 /* intercept was handled, but userspace support is needed
1370 * kvm_run has been prepared by the handler */
1374 kvm_run->psw_mask = vcpu->arch.sie_block->gpsw.mask;
1375 kvm_run->psw_addr = vcpu->arch.sie_block->gpsw.addr;
1376 kvm_run->s.regs.prefix = kvm_s390_get_prefix(vcpu);
1377 memcpy(&kvm_run->s.regs.crs, &vcpu->arch.sie_block->gcr, 128);
1379 if (vcpu->sigset_active)
1380 sigprocmask(SIG_SETMASK, &sigsaved, NULL);
1382 vcpu->stat.exit_userspace++;
1387 * store status at address
1388 * we use have two special cases:
1389 * KVM_S390_STORE_STATUS_NOADDR: -> 0x1200 on 64 bit
1390 * KVM_S390_STORE_STATUS_PREFIXED: -> prefix
1392 int kvm_s390_store_status_unloaded(struct kvm_vcpu *vcpu, unsigned long gpa)
1394 unsigned char archmode = 1;
1399 if (gpa == KVM_S390_STORE_STATUS_NOADDR) {
1400 if (write_guest_abs(vcpu, 163, &archmode, 1))
1402 gpa = SAVE_AREA_BASE;
1403 } else if (gpa == KVM_S390_STORE_STATUS_PREFIXED) {
1404 if (write_guest_real(vcpu, 163, &archmode, 1))
1406 gpa = kvm_s390_real_to_abs(vcpu, SAVE_AREA_BASE);
1408 rc = write_guest_abs(vcpu, gpa + offsetof(struct save_area, fp_regs),
1409 vcpu->arch.guest_fpregs.fprs, 128);
1410 rc |= write_guest_abs(vcpu, gpa + offsetof(struct save_area, gp_regs),
1411 vcpu->run->s.regs.gprs, 128);
1412 rc |= write_guest_abs(vcpu, gpa + offsetof(struct save_area, psw),
1413 &vcpu->arch.sie_block->gpsw, 16);
1414 px = kvm_s390_get_prefix(vcpu);
1415 rc |= write_guest_abs(vcpu, gpa + offsetof(struct save_area, pref_reg),
1417 rc |= write_guest_abs(vcpu,
1418 gpa + offsetof(struct save_area, fp_ctrl_reg),
1419 &vcpu->arch.guest_fpregs.fpc, 4);
1420 rc |= write_guest_abs(vcpu, gpa + offsetof(struct save_area, tod_reg),
1421 &vcpu->arch.sie_block->todpr, 4);
1422 rc |= write_guest_abs(vcpu, gpa + offsetof(struct save_area, timer),
1423 &vcpu->arch.sie_block->cputm, 8);
1424 clkcomp = vcpu->arch.sie_block->ckc >> 8;
1425 rc |= write_guest_abs(vcpu, gpa + offsetof(struct save_area, clk_cmp),
1427 rc |= write_guest_abs(vcpu, gpa + offsetof(struct save_area, acc_regs),
1428 &vcpu->run->s.regs.acrs, 64);
1429 rc |= write_guest_abs(vcpu, gpa + offsetof(struct save_area, ctrl_regs),
1430 &vcpu->arch.sie_block->gcr, 128);
1431 return rc ? -EFAULT : 0;
1434 int kvm_s390_vcpu_store_status(struct kvm_vcpu *vcpu, unsigned long addr)
1437 * The guest FPRS and ACRS are in the host FPRS/ACRS due to the lazy
1438 * copying in vcpu load/put. Lets update our copies before we save
1439 * it into the save area
1441 save_fp_ctl(&vcpu->arch.guest_fpregs.fpc);
1442 save_fp_regs(vcpu->arch.guest_fpregs.fprs);
1443 save_access_regs(vcpu->run->s.regs.acrs);
1445 return kvm_s390_store_status_unloaded(vcpu, addr);
1448 static void __disable_ibs_on_vcpu(struct kvm_vcpu *vcpu)
1450 kvm_check_request(KVM_REQ_ENABLE_IBS, vcpu);
1451 kvm_make_request(KVM_REQ_DISABLE_IBS, vcpu);
1452 exit_sie_sync(vcpu);
1455 static void __disable_ibs_on_all_vcpus(struct kvm *kvm)
1458 struct kvm_vcpu *vcpu;
1460 kvm_for_each_vcpu(i, vcpu, kvm) {
1461 __disable_ibs_on_vcpu(vcpu);
1465 static void __enable_ibs_on_vcpu(struct kvm_vcpu *vcpu)
1467 kvm_check_request(KVM_REQ_DISABLE_IBS, vcpu);
1468 kvm_make_request(KVM_REQ_ENABLE_IBS, vcpu);
1469 exit_sie_sync(vcpu);
1472 void kvm_s390_vcpu_start(struct kvm_vcpu *vcpu)
1474 int i, online_vcpus, started_vcpus = 0;
1476 if (!is_vcpu_stopped(vcpu))
1479 trace_kvm_s390_vcpu_start_stop(vcpu->vcpu_id, 1);
1480 /* Only one cpu at a time may enter/leave the STOPPED state. */
1481 spin_lock(&vcpu->kvm->arch.start_stop_lock);
1482 online_vcpus = atomic_read(&vcpu->kvm->online_vcpus);
1484 for (i = 0; i < online_vcpus; i++) {
1485 if (!is_vcpu_stopped(vcpu->kvm->vcpus[i]))
1489 if (started_vcpus == 0) {
1490 /* we're the only active VCPU -> speed it up */
1491 __enable_ibs_on_vcpu(vcpu);
1492 } else if (started_vcpus == 1) {
1494 * As we are starting a second VCPU, we have to disable
1495 * the IBS facility on all VCPUs to remove potentially
1496 * oustanding ENABLE requests.
1498 __disable_ibs_on_all_vcpus(vcpu->kvm);
1501 atomic_clear_mask(CPUSTAT_STOPPED, &vcpu->arch.sie_block->cpuflags);
1503 * Another VCPU might have used IBS while we were offline.
1504 * Let's play safe and flush the VCPU at startup.
1506 vcpu->arch.sie_block->ihcpu = 0xffff;
1507 spin_unlock(&vcpu->kvm->arch.start_stop_lock);
1511 void kvm_s390_vcpu_stop(struct kvm_vcpu *vcpu)
1513 int i, online_vcpus, started_vcpus = 0;
1514 struct kvm_vcpu *started_vcpu = NULL;
1516 if (is_vcpu_stopped(vcpu))
1519 trace_kvm_s390_vcpu_start_stop(vcpu->vcpu_id, 0);
1520 /* Only one cpu at a time may enter/leave the STOPPED state. */
1521 spin_lock(&vcpu->kvm->arch.start_stop_lock);
1522 online_vcpus = atomic_read(&vcpu->kvm->online_vcpus);
1524 /* Need to lock access to action_bits to avoid a SIGP race condition */
1525 spin_lock(&vcpu->arch.local_int.lock);
1526 atomic_set_mask(CPUSTAT_STOPPED, &vcpu->arch.sie_block->cpuflags);
1528 /* SIGP STOP and SIGP STOP AND STORE STATUS has been fully processed */
1529 vcpu->arch.local_int.action_bits &=
1530 ~(ACTION_STOP_ON_STOP | ACTION_STORE_ON_STOP);
1531 spin_unlock(&vcpu->arch.local_int.lock);
1533 __disable_ibs_on_vcpu(vcpu);
1535 for (i = 0; i < online_vcpus; i++) {
1536 if (!is_vcpu_stopped(vcpu->kvm->vcpus[i])) {
1538 started_vcpu = vcpu->kvm->vcpus[i];
1542 if (started_vcpus == 1) {
1544 * As we only have one VCPU left, we want to enable the
1545 * IBS facility for that VCPU to speed it up.
1547 __enable_ibs_on_vcpu(started_vcpu);
1550 spin_unlock(&vcpu->kvm->arch.start_stop_lock);
1554 static int kvm_vcpu_ioctl_enable_cap(struct kvm_vcpu *vcpu,
1555 struct kvm_enable_cap *cap)
1563 case KVM_CAP_S390_CSS_SUPPORT:
1564 if (!vcpu->kvm->arch.css_support) {
1565 vcpu->kvm->arch.css_support = 1;
1566 trace_kvm_s390_enable_css(vcpu->kvm);
1577 long kvm_arch_vcpu_ioctl(struct file *filp,
1578 unsigned int ioctl, unsigned long arg)
1580 struct kvm_vcpu *vcpu = filp->private_data;
1581 void __user *argp = (void __user *)arg;
1586 case KVM_S390_INTERRUPT: {
1587 struct kvm_s390_interrupt s390int;
1590 if (copy_from_user(&s390int, argp, sizeof(s390int)))
1592 r = kvm_s390_inject_vcpu(vcpu, &s390int);
1595 case KVM_S390_STORE_STATUS:
1596 idx = srcu_read_lock(&vcpu->kvm->srcu);
1597 r = kvm_s390_vcpu_store_status(vcpu, arg);
1598 srcu_read_unlock(&vcpu->kvm->srcu, idx);
1600 case KVM_S390_SET_INITIAL_PSW: {
1604 if (copy_from_user(&psw, argp, sizeof(psw)))
1606 r = kvm_arch_vcpu_ioctl_set_initial_psw(vcpu, psw);
1609 case KVM_S390_INITIAL_RESET:
1610 r = kvm_arch_vcpu_ioctl_initial_reset(vcpu);
1612 case KVM_SET_ONE_REG:
1613 case KVM_GET_ONE_REG: {
1614 struct kvm_one_reg reg;
1616 if (copy_from_user(®, argp, sizeof(reg)))
1618 if (ioctl == KVM_SET_ONE_REG)
1619 r = kvm_arch_vcpu_ioctl_set_one_reg(vcpu, ®);
1621 r = kvm_arch_vcpu_ioctl_get_one_reg(vcpu, ®);
1624 #ifdef CONFIG_KVM_S390_UCONTROL
1625 case KVM_S390_UCAS_MAP: {
1626 struct kvm_s390_ucas_mapping ucasmap;
1628 if (copy_from_user(&ucasmap, argp, sizeof(ucasmap))) {
1633 if (!kvm_is_ucontrol(vcpu->kvm)) {
1638 r = gmap_map_segment(vcpu->arch.gmap, ucasmap.user_addr,
1639 ucasmap.vcpu_addr, ucasmap.length);
1642 case KVM_S390_UCAS_UNMAP: {
1643 struct kvm_s390_ucas_mapping ucasmap;
1645 if (copy_from_user(&ucasmap, argp, sizeof(ucasmap))) {
1650 if (!kvm_is_ucontrol(vcpu->kvm)) {
1655 r = gmap_unmap_segment(vcpu->arch.gmap, ucasmap.vcpu_addr,
1660 case KVM_S390_VCPU_FAULT: {
1661 r = gmap_fault(arg, vcpu->arch.gmap);
1662 if (!IS_ERR_VALUE(r))
1666 case KVM_ENABLE_CAP:
1668 struct kvm_enable_cap cap;
1670 if (copy_from_user(&cap, argp, sizeof(cap)))
1672 r = kvm_vcpu_ioctl_enable_cap(vcpu, &cap);
1681 int kvm_arch_vcpu_fault(struct kvm_vcpu *vcpu, struct vm_fault *vmf)
1683 #ifdef CONFIG_KVM_S390_UCONTROL
1684 if ((vmf->pgoff == KVM_S390_SIE_PAGE_OFFSET)
1685 && (kvm_is_ucontrol(vcpu->kvm))) {
1686 vmf->page = virt_to_page(vcpu->arch.sie_block);
1687 get_page(vmf->page);
1691 return VM_FAULT_SIGBUS;
1694 void kvm_arch_free_memslot(struct kvm *kvm, struct kvm_memory_slot *free,
1695 struct kvm_memory_slot *dont)
1699 int kvm_arch_create_memslot(struct kvm *kvm, struct kvm_memory_slot *slot,
1700 unsigned long npages)
1705 void kvm_arch_memslots_updated(struct kvm *kvm)
1709 /* Section: memory related */
1710 int kvm_arch_prepare_memory_region(struct kvm *kvm,
1711 struct kvm_memory_slot *memslot,
1712 struct kvm_userspace_memory_region *mem,
1713 enum kvm_mr_change change)
1715 /* A few sanity checks. We can have memory slots which have to be
1716 located/ended at a segment boundary (1MB). The memory in userland is
1717 ok to be fragmented into various different vmas. It is okay to mmap()
1718 and munmap() stuff in this slot after doing this call at any time */
1720 if (mem->userspace_addr & 0xffffful)
1723 if (mem->memory_size & 0xffffful)
1729 void kvm_arch_commit_memory_region(struct kvm *kvm,
1730 struct kvm_userspace_memory_region *mem,
1731 const struct kvm_memory_slot *old,
1732 enum kvm_mr_change change)
1736 /* If the basics of the memslot do not change, we do not want
1737 * to update the gmap. Every update causes several unnecessary
1738 * segment translation exceptions. This is usually handled just
1739 * fine by the normal fault handler + gmap, but it will also
1740 * cause faults on the prefix page of running guest CPUs.
1742 if (old->userspace_addr == mem->userspace_addr &&
1743 old->base_gfn * PAGE_SIZE == mem->guest_phys_addr &&
1744 old->npages * PAGE_SIZE == mem->memory_size)
1747 rc = gmap_map_segment(kvm->arch.gmap, mem->userspace_addr,
1748 mem->guest_phys_addr, mem->memory_size);
1750 printk(KERN_WARNING "kvm-s390: failed to commit memory region\n");
1754 void kvm_arch_flush_shadow_all(struct kvm *kvm)
1758 void kvm_arch_flush_shadow_memslot(struct kvm *kvm,
1759 struct kvm_memory_slot *slot)
1763 static int __init kvm_s390_init(void)
1766 ret = kvm_init(NULL, sizeof(struct kvm_vcpu), 0, THIS_MODULE);
1771 * guests can ask for up to 255+1 double words, we need a full page
1772 * to hold the maximum amount of facilities. On the other hand, we
1773 * only set facilities that are known to work in KVM.
1775 vfacilities = (unsigned long *) get_zeroed_page(GFP_KERNEL|GFP_DMA);
1780 memcpy(vfacilities, S390_lowcore.stfle_fac_list, 16);
1781 vfacilities[0] &= 0xff82fff3f4fc2000UL;
1782 vfacilities[1] &= 0x005c000000000000UL;
1786 static void __exit kvm_s390_exit(void)
1788 free_page((unsigned long) vfacilities);
1792 module_init(kvm_s390_init);
1793 module_exit(kvm_s390_exit);
1796 * Enable autoloading of the kvm module.
1797 * Note that we add the module alias here instead of virt/kvm/kvm_main.c
1798 * since x86 takes a different approach.
1800 #include <linux/miscdevice.h>
1801 MODULE_ALIAS_MISCDEV(KVM_MINOR);
1802 MODULE_ALIAS("devname:kvm");