1 /*
2 * hosting zSeries kernel virtual machines
3 *
4 * Copyright IBM Corp. 2008, 2009
5 *
6 * This program is free software; you can redistribute it and/or modify
7 * it under the terms of the GNU General Public License (version 2 only)
8 * as published by the Free Software Foundation.
9 *
10 * Author(s): Carsten Otte <cotte@de.ibm.com>
11 * Christian Borntraeger <borntraeger@de.ibm.com>
12 * Heiko Carstens <heiko.carstens@de.ibm.com>
13 * Christian Ehrhardt <ehrhardt@de.ibm.com>
14 * Jason J. Herne <jjherne@us.ibm.com>
15 */
16
17 #include <linux/compiler.h>
18 #include <linux/err.h>
19 #include <linux/fs.h>
20 #include <linux/hrtimer.h>
21 #include <linux/init.h>
22 #include <linux/kvm.h>
23 #include <linux/kvm_host.h>
24 #include <linux/module.h>
25 #include <linux/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"
36
37 #define CREATE_TRACE_POINTS
38 #include "trace.h"
39 #include "trace-s390.h"
40
41 #define VCPU_STAT(x) offsetof(struct kvm_vcpu, stat.x), KVM_STAT_VCPU
42
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 { "halt_wakeup", VCPU_STAT(halt_wakeup) },
54 { "instruction_lctlg", VCPU_STAT(instruction_lctlg) },
55 { "instruction_lctl", VCPU_STAT(instruction_lctl) },
56 { "instruction_stctl", VCPU_STAT(instruction_stctl) },
57 { "instruction_stctg", VCPU_STAT(instruction_stctg) },
58 { "deliver_emergency_signal", VCPU_STAT(deliver_emergency_signal) },
59 { "deliver_external_call", VCPU_STAT(deliver_external_call) },
60 { "deliver_service_signal", VCPU_STAT(deliver_service_signal) },
61 { "deliver_virtio_interrupt", VCPU_STAT(deliver_virtio_interrupt) },
62 { "deliver_stop_signal", VCPU_STAT(deliver_stop_signal) },
63 { "deliver_prefix_signal", VCPU_STAT(deliver_prefix_signal) },
64 { "deliver_restart_signal", VCPU_STAT(deliver_restart_signal) },
65 { "deliver_program_interruption", VCPU_STAT(deliver_program_int) },
66 { "exit_wait_state", VCPU_STAT(exit_wait_state) },
67 { "instruction_pfmf", VCPU_STAT(instruction_pfmf) },
68 { "instruction_stidp", VCPU_STAT(instruction_stidp) },
69 { "instruction_spx", VCPU_STAT(instruction_spx) },
70 { "instruction_stpx", VCPU_STAT(instruction_stpx) },
71 { "instruction_stap", VCPU_STAT(instruction_stap) },
72 { "instruction_storage_key", VCPU_STAT(instruction_storage_key) },
73 { "instruction_ipte_interlock", VCPU_STAT(instruction_ipte_interlock) },
74 { "instruction_stsch", VCPU_STAT(instruction_stsch) },
75 { "instruction_chsc", VCPU_STAT(instruction_chsc) },
76 { "instruction_essa", VCPU_STAT(instruction_essa) },
77 { "instruction_stsi", VCPU_STAT(instruction_stsi) },
78 { "instruction_stfl", VCPU_STAT(instruction_stfl) },
79 { "instruction_tprot", VCPU_STAT(instruction_tprot) },
80 { "instruction_sigp_sense", VCPU_STAT(instruction_sigp_sense) },
81 { "instruction_sigp_sense_running", VCPU_STAT(instruction_sigp_sense_running) },
82 { "instruction_sigp_external_call", VCPU_STAT(instruction_sigp_external_call) },
83 { "instruction_sigp_emergency", VCPU_STAT(instruction_sigp_emergency) },
84 { "instruction_sigp_stop", VCPU_STAT(instruction_sigp_stop) },
85 { "instruction_sigp_set_arch", VCPU_STAT(instruction_sigp_arch) },
86 { "instruction_sigp_set_prefix", VCPU_STAT(instruction_sigp_prefix) },
87 { "instruction_sigp_restart", VCPU_STAT(instruction_sigp_restart) },
88 { "diagnose_10", VCPU_STAT(diagnose_10) },
89 { "diagnose_44", VCPU_STAT(diagnose_44) },
90 { "diagnose_9c", VCPU_STAT(diagnose_9c) },
91 { NULL }
92 };
93
94 unsigned long *vfacilities;
95 static struct gmap_notifier gmap_notifier;
96
97 /* test availability of vfacility */
test_vfacility(unsigned long nr)98 int test_vfacility(unsigned long nr)
99 {
100 return __test_facility(nr, (void *) vfacilities);
101 }
102
103 /* Section: not file related */
kvm_arch_hardware_enable(void)104 int kvm_arch_hardware_enable(void)
105 {
106 /* every s390 is virtualization enabled ;-) */
107 return 0;
108 }
109
110 static void kvm_gmap_notifier(struct gmap *gmap, unsigned long address);
111
kvm_arch_hardware_setup(void)112 int kvm_arch_hardware_setup(void)
113 {
114 gmap_notifier.notifier_call = kvm_gmap_notifier;
115 gmap_register_ipte_notifier(&gmap_notifier);
116 return 0;
117 }
118
kvm_arch_hardware_unsetup(void)119 void kvm_arch_hardware_unsetup(void)
120 {
121 gmap_unregister_ipte_notifier(&gmap_notifier);
122 }
123
kvm_arch_init(void * opaque)124 int kvm_arch_init(void *opaque)
125 {
126 /* Register floating interrupt controller interface. */
127 return kvm_register_device_ops(&kvm_flic_ops, KVM_DEV_TYPE_FLIC);
128 }
129
130 /* Section: device related */
kvm_arch_dev_ioctl(struct file * filp,unsigned int ioctl,unsigned long arg)131 long kvm_arch_dev_ioctl(struct file *filp,
132 unsigned int ioctl, unsigned long arg)
133 {
134 if (ioctl == KVM_S390_ENABLE_SIE)
135 return s390_enable_sie();
136 return -EINVAL;
137 }
138
kvm_vm_ioctl_check_extension(struct kvm * kvm,long ext)139 int kvm_vm_ioctl_check_extension(struct kvm *kvm, long ext)
140 {
141 int r;
142
143 switch (ext) {
144 case KVM_CAP_S390_PSW:
145 case KVM_CAP_S390_GMAP:
146 case KVM_CAP_SYNC_MMU:
147 #ifdef CONFIG_KVM_S390_UCONTROL
148 case KVM_CAP_S390_UCONTROL:
149 #endif
150 case KVM_CAP_ASYNC_PF:
151 case KVM_CAP_SYNC_REGS:
152 case KVM_CAP_ONE_REG:
153 case KVM_CAP_ENABLE_CAP:
154 case KVM_CAP_S390_CSS_SUPPORT:
155 case KVM_CAP_IOEVENTFD:
156 case KVM_CAP_DEVICE_CTRL:
157 case KVM_CAP_ENABLE_CAP_VM:
158 case KVM_CAP_S390_IRQCHIP:
159 case KVM_CAP_VM_ATTRIBUTES:
160 case KVM_CAP_MP_STATE:
161 r = 1;
162 break;
163 case KVM_CAP_NR_VCPUS:
164 case KVM_CAP_MAX_VCPUS:
165 r = KVM_MAX_VCPUS;
166 break;
167 case KVM_CAP_NR_MEMSLOTS:
168 r = KVM_USER_MEM_SLOTS;
169 break;
170 case KVM_CAP_S390_COW:
171 r = MACHINE_HAS_ESOP;
172 break;
173 default:
174 r = 0;
175 }
176 return r;
177 }
178
kvm_s390_sync_dirty_log(struct kvm * kvm,struct kvm_memory_slot * memslot)179 static void kvm_s390_sync_dirty_log(struct kvm *kvm,
180 struct kvm_memory_slot *memslot)
181 {
182 gfn_t cur_gfn, last_gfn;
183 unsigned long address;
184 struct gmap *gmap = kvm->arch.gmap;
185
186 down_read(&gmap->mm->mmap_sem);
187 /* Loop over all guest pages */
188 last_gfn = memslot->base_gfn + memslot->npages;
189 for (cur_gfn = memslot->base_gfn; cur_gfn <= last_gfn; cur_gfn++) {
190 address = gfn_to_hva_memslot(memslot, cur_gfn);
191
192 if (gmap_test_and_clear_dirty(address, gmap))
193 mark_page_dirty(kvm, cur_gfn);
194 }
195 up_read(&gmap->mm->mmap_sem);
196 }
197
198 /* Section: vm related */
199 /*
200 * Get (and clear) the dirty memory log for a memory slot.
201 */
kvm_vm_ioctl_get_dirty_log(struct kvm * kvm,struct kvm_dirty_log * log)202 int kvm_vm_ioctl_get_dirty_log(struct kvm *kvm,
203 struct kvm_dirty_log *log)
204 {
205 int r;
206 unsigned long n;
207 struct kvm_memory_slot *memslot;
208 int is_dirty = 0;
209
210 if (kvm_is_ucontrol(kvm))
211 return -EINVAL;
212
213 mutex_lock(&kvm->slots_lock);
214
215 r = -EINVAL;
216 if (log->slot >= KVM_USER_MEM_SLOTS)
217 goto out;
218
219 memslot = id_to_memslot(kvm->memslots, log->slot);
220 r = -ENOENT;
221 if (!memslot->dirty_bitmap)
222 goto out;
223
224 kvm_s390_sync_dirty_log(kvm, memslot);
225 r = kvm_get_dirty_log(kvm, log, &is_dirty);
226 if (r)
227 goto out;
228
229 /* Clear the dirty log */
230 if (is_dirty) {
231 n = kvm_dirty_bitmap_bytes(memslot);
232 memset(memslot->dirty_bitmap, 0, n);
233 }
234 r = 0;
235 out:
236 mutex_unlock(&kvm->slots_lock);
237 return r;
238 }
239
kvm_vm_ioctl_enable_cap(struct kvm * kvm,struct kvm_enable_cap * cap)240 static int kvm_vm_ioctl_enable_cap(struct kvm *kvm, struct kvm_enable_cap *cap)
241 {
242 int r;
243
244 if (cap->flags)
245 return -EINVAL;
246
247 switch (cap->cap) {
248 case KVM_CAP_S390_IRQCHIP:
249 kvm->arch.use_irqchip = 1;
250 r = 0;
251 break;
252 default:
253 r = -EINVAL;
254 break;
255 }
256 return r;
257 }
258
kvm_s390_mem_control(struct kvm * kvm,struct kvm_device_attr * attr)259 static int kvm_s390_mem_control(struct kvm *kvm, struct kvm_device_attr *attr)
260 {
261 int ret;
262 unsigned int idx;
263 switch (attr->attr) {
264 case KVM_S390_VM_MEM_ENABLE_CMMA:
265 ret = -EBUSY;
266 mutex_lock(&kvm->lock);
267 if (atomic_read(&kvm->online_vcpus) == 0) {
268 kvm->arch.use_cmma = 1;
269 ret = 0;
270 }
271 mutex_unlock(&kvm->lock);
272 break;
273 case KVM_S390_VM_MEM_CLR_CMMA:
274 mutex_lock(&kvm->lock);
275 idx = srcu_read_lock(&kvm->srcu);
276 page_table_reset_pgste(kvm->arch.gmap->mm, 0, TASK_SIZE, false);
277 srcu_read_unlock(&kvm->srcu, idx);
278 mutex_unlock(&kvm->lock);
279 ret = 0;
280 break;
281 default:
282 ret = -ENXIO;
283 break;
284 }
285 return ret;
286 }
287
kvm_s390_vm_set_attr(struct kvm * kvm,struct kvm_device_attr * attr)288 static int kvm_s390_vm_set_attr(struct kvm *kvm, struct kvm_device_attr *attr)
289 {
290 int ret;
291
292 switch (attr->group) {
293 case KVM_S390_VM_MEM_CTRL:
294 ret = kvm_s390_mem_control(kvm, attr);
295 break;
296 default:
297 ret = -ENXIO;
298 break;
299 }
300
301 return ret;
302 }
303
kvm_s390_vm_get_attr(struct kvm * kvm,struct kvm_device_attr * attr)304 static int kvm_s390_vm_get_attr(struct kvm *kvm, struct kvm_device_attr *attr)
305 {
306 return -ENXIO;
307 }
308
kvm_s390_vm_has_attr(struct kvm * kvm,struct kvm_device_attr * attr)309 static int kvm_s390_vm_has_attr(struct kvm *kvm, struct kvm_device_attr *attr)
310 {
311 int ret;
312
313 switch (attr->group) {
314 case KVM_S390_VM_MEM_CTRL:
315 switch (attr->attr) {
316 case KVM_S390_VM_MEM_ENABLE_CMMA:
317 case KVM_S390_VM_MEM_CLR_CMMA:
318 ret = 0;
319 break;
320 default:
321 ret = -ENXIO;
322 break;
323 }
324 break;
325 default:
326 ret = -ENXIO;
327 break;
328 }
329
330 return ret;
331 }
332
kvm_arch_vm_ioctl(struct file * filp,unsigned int ioctl,unsigned long arg)333 long kvm_arch_vm_ioctl(struct file *filp,
334 unsigned int ioctl, unsigned long arg)
335 {
336 struct kvm *kvm = filp->private_data;
337 void __user *argp = (void __user *)arg;
338 struct kvm_device_attr attr;
339 int r;
340
341 switch (ioctl) {
342 case KVM_S390_INTERRUPT: {
343 struct kvm_s390_interrupt s390int;
344
345 r = -EFAULT;
346 if (copy_from_user(&s390int, argp, sizeof(s390int)))
347 break;
348 r = kvm_s390_inject_vm(kvm, &s390int);
349 break;
350 }
351 case KVM_ENABLE_CAP: {
352 struct kvm_enable_cap cap;
353 r = -EFAULT;
354 if (copy_from_user(&cap, argp, sizeof(cap)))
355 break;
356 r = kvm_vm_ioctl_enable_cap(kvm, &cap);
357 break;
358 }
359 case KVM_CREATE_IRQCHIP: {
360 struct kvm_irq_routing_entry routing;
361
362 r = -EINVAL;
363 if (kvm->arch.use_irqchip) {
364 /* Set up dummy routing. */
365 memset(&routing, 0, sizeof(routing));
366 kvm_set_irq_routing(kvm, &routing, 0, 0);
367 r = 0;
368 }
369 break;
370 }
371 case KVM_SET_DEVICE_ATTR: {
372 r = -EFAULT;
373 if (copy_from_user(&attr, (void __user *)arg, sizeof(attr)))
374 break;
375 r = kvm_s390_vm_set_attr(kvm, &attr);
376 break;
377 }
378 case KVM_GET_DEVICE_ATTR: {
379 r = -EFAULT;
380 if (copy_from_user(&attr, (void __user *)arg, sizeof(attr)))
381 break;
382 r = kvm_s390_vm_get_attr(kvm, &attr);
383 break;
384 }
385 case KVM_HAS_DEVICE_ATTR: {
386 r = -EFAULT;
387 if (copy_from_user(&attr, (void __user *)arg, sizeof(attr)))
388 break;
389 r = kvm_s390_vm_has_attr(kvm, &attr);
390 break;
391 }
392 default:
393 r = -ENOTTY;
394 }
395
396 return r;
397 }
398
kvm_s390_crypto_init(struct kvm * kvm)399 static int kvm_s390_crypto_init(struct kvm *kvm)
400 {
401 if (!test_vfacility(76))
402 return 0;
403
404 kvm->arch.crypto.crycb = kzalloc(sizeof(*kvm->arch.crypto.crycb),
405 GFP_KERNEL | GFP_DMA);
406 if (!kvm->arch.crypto.crycb)
407 return -ENOMEM;
408
409 kvm->arch.crypto.crycbd = (__u32) (unsigned long) kvm->arch.crypto.crycb |
410 CRYCB_FORMAT1;
411
412 return 0;
413 }
414
kvm_arch_init_vm(struct kvm * kvm,unsigned long type)415 int kvm_arch_init_vm(struct kvm *kvm, unsigned long type)
416 {
417 int rc;
418 char debug_name[16];
419 static unsigned long sca_offset;
420
421 rc = -EINVAL;
422 #ifdef CONFIG_KVM_S390_UCONTROL
423 if (type & ~KVM_VM_S390_UCONTROL)
424 goto out_err;
425 if ((type & KVM_VM_S390_UCONTROL) && (!capable(CAP_SYS_ADMIN)))
426 goto out_err;
427 #else
428 if (type)
429 goto out_err;
430 #endif
431
432 rc = s390_enable_sie();
433 if (rc)
434 goto out_err;
435
436 rc = -ENOMEM;
437
438 kvm->arch.sca = (struct sca_block *) get_zeroed_page(GFP_KERNEL);
439 if (!kvm->arch.sca)
440 goto out_err;
441 spin_lock(&kvm_lock);
442 sca_offset = (sca_offset + 16) & 0x7f0;
443 kvm->arch.sca = (struct sca_block *) ((char *) kvm->arch.sca + sca_offset);
444 spin_unlock(&kvm_lock);
445
446 sprintf(debug_name, "kvm-%u", current->pid);
447
448 kvm->arch.dbf = debug_register(debug_name, 8, 2, 8 * sizeof(long));
449 if (!kvm->arch.dbf)
450 goto out_nodbf;
451
452 if (kvm_s390_crypto_init(kvm) < 0)
453 goto out_crypto;
454
455 spin_lock_init(&kvm->arch.float_int.lock);
456 INIT_LIST_HEAD(&kvm->arch.float_int.list);
457 init_waitqueue_head(&kvm->arch.ipte_wq);
458
459 debug_register_view(kvm->arch.dbf, &debug_sprintf_view);
460 VM_EVENT(kvm, 3, "%s", "vm created");
461
462 if (type & KVM_VM_S390_UCONTROL) {
463 kvm->arch.gmap = NULL;
464 } else {
465 kvm->arch.gmap = gmap_alloc(current->mm, (1UL << 44) - 1);
466 if (!kvm->arch.gmap)
467 goto out_nogmap;
468 kvm->arch.gmap->private = kvm;
469 kvm->arch.gmap->pfault_enabled = 0;
470 }
471
472 kvm->arch.css_support = 0;
473 kvm->arch.use_irqchip = 0;
474
475 spin_lock_init(&kvm->arch.start_stop_lock);
476
477 return 0;
478 out_nogmap:
479 kfree(kvm->arch.crypto.crycb);
480 out_crypto:
481 debug_unregister(kvm->arch.dbf);
482 out_nodbf:
483 free_page((unsigned long)(kvm->arch.sca));
484 out_err:
485 return rc;
486 }
487
kvm_arch_vcpu_destroy(struct kvm_vcpu * vcpu)488 void kvm_arch_vcpu_destroy(struct kvm_vcpu *vcpu)
489 {
490 VCPU_EVENT(vcpu, 3, "%s", "free cpu");
491 trace_kvm_s390_destroy_vcpu(vcpu->vcpu_id);
492 kvm_s390_clear_local_irqs(vcpu);
493 kvm_clear_async_pf_completion_queue(vcpu);
494 if (!kvm_is_ucontrol(vcpu->kvm)) {
495 clear_bit(63 - vcpu->vcpu_id,
496 (unsigned long *) &vcpu->kvm->arch.sca->mcn);
497 if (vcpu->kvm->arch.sca->cpu[vcpu->vcpu_id].sda ==
498 (__u64) vcpu->arch.sie_block)
499 vcpu->kvm->arch.sca->cpu[vcpu->vcpu_id].sda = 0;
500 }
501 smp_mb();
502
503 if (kvm_is_ucontrol(vcpu->kvm))
504 gmap_free(vcpu->arch.gmap);
505
506 if (kvm_s390_cmma_enabled(vcpu->kvm))
507 kvm_s390_vcpu_unsetup_cmma(vcpu);
508 free_page((unsigned long)(vcpu->arch.sie_block));
509
510 kvm_vcpu_uninit(vcpu);
511 kmem_cache_free(kvm_vcpu_cache, vcpu);
512 }
513
kvm_free_vcpus(struct kvm * kvm)514 static void kvm_free_vcpus(struct kvm *kvm)
515 {
516 unsigned int i;
517 struct kvm_vcpu *vcpu;
518
519 kvm_for_each_vcpu(i, vcpu, kvm)
520 kvm_arch_vcpu_destroy(vcpu);
521
522 mutex_lock(&kvm->lock);
523 for (i = 0; i < atomic_read(&kvm->online_vcpus); i++)
524 kvm->vcpus[i] = NULL;
525
526 atomic_set(&kvm->online_vcpus, 0);
527 mutex_unlock(&kvm->lock);
528 }
529
kvm_arch_destroy_vm(struct kvm * kvm)530 void kvm_arch_destroy_vm(struct kvm *kvm)
531 {
532 kvm_free_vcpus(kvm);
533 free_page((unsigned long)(kvm->arch.sca));
534 debug_unregister(kvm->arch.dbf);
535 kfree(kvm->arch.crypto.crycb);
536 if (!kvm_is_ucontrol(kvm))
537 gmap_free(kvm->arch.gmap);
538 kvm_s390_destroy_adapters(kvm);
539 kvm_s390_clear_float_irqs(kvm);
540 }
541
542 /* Section: vcpu related */
kvm_arch_vcpu_init(struct kvm_vcpu * vcpu)543 int kvm_arch_vcpu_init(struct kvm_vcpu *vcpu)
544 {
545 vcpu->arch.pfault_token = KVM_S390_PFAULT_TOKEN_INVALID;
546 kvm_clear_async_pf_completion_queue(vcpu);
547 if (kvm_is_ucontrol(vcpu->kvm)) {
548 vcpu->arch.gmap = gmap_alloc(current->mm, -1UL);
549 if (!vcpu->arch.gmap)
550 return -ENOMEM;
551 vcpu->arch.gmap->private = vcpu->kvm;
552 return 0;
553 }
554
555 vcpu->arch.gmap = vcpu->kvm->arch.gmap;
556 vcpu->run->kvm_valid_regs = KVM_SYNC_PREFIX |
557 KVM_SYNC_GPRS |
558 KVM_SYNC_ACRS |
559 KVM_SYNC_CRS |
560 KVM_SYNC_ARCH0 |
561 KVM_SYNC_PFAULT;
562 return 0;
563 }
564
kvm_arch_vcpu_load(struct kvm_vcpu * vcpu,int cpu)565 void kvm_arch_vcpu_load(struct kvm_vcpu *vcpu, int cpu)
566 {
567 save_fp_ctl(&vcpu->arch.host_fpregs.fpc);
568 save_fp_regs(vcpu->arch.host_fpregs.fprs);
569 save_access_regs(vcpu->arch.host_acrs);
570 restore_fp_ctl(&vcpu->arch.guest_fpregs.fpc);
571 restore_fp_regs(vcpu->arch.guest_fpregs.fprs);
572 restore_access_regs(vcpu->run->s.regs.acrs);
573 gmap_enable(vcpu->arch.gmap);
574 atomic_set_mask(CPUSTAT_RUNNING, &vcpu->arch.sie_block->cpuflags);
575 }
576
kvm_arch_vcpu_put(struct kvm_vcpu * vcpu)577 void kvm_arch_vcpu_put(struct kvm_vcpu *vcpu)
578 {
579 atomic_clear_mask(CPUSTAT_RUNNING, &vcpu->arch.sie_block->cpuflags);
580 gmap_disable(vcpu->arch.gmap);
581 save_fp_ctl(&vcpu->arch.guest_fpregs.fpc);
582 save_fp_regs(vcpu->arch.guest_fpregs.fprs);
583 save_access_regs(vcpu->run->s.regs.acrs);
584 restore_fp_ctl(&vcpu->arch.host_fpregs.fpc);
585 restore_fp_regs(vcpu->arch.host_fpregs.fprs);
586 restore_access_regs(vcpu->arch.host_acrs);
587 }
588
kvm_s390_vcpu_initial_reset(struct kvm_vcpu * vcpu)589 static void kvm_s390_vcpu_initial_reset(struct kvm_vcpu *vcpu)
590 {
591 /* this equals initial cpu reset in pop, but we don't switch to ESA */
592 vcpu->arch.sie_block->gpsw.mask = 0UL;
593 vcpu->arch.sie_block->gpsw.addr = 0UL;
594 kvm_s390_set_prefix(vcpu, 0);
595 vcpu->arch.sie_block->cputm = 0UL;
596 vcpu->arch.sie_block->ckc = 0UL;
597 vcpu->arch.sie_block->todpr = 0;
598 memset(vcpu->arch.sie_block->gcr, 0, 16 * sizeof(__u64));
599 vcpu->arch.sie_block->gcr[0] = 0xE0UL;
600 vcpu->arch.sie_block->gcr[14] = 0xC2000000UL;
601 vcpu->arch.guest_fpregs.fpc = 0;
602 asm volatile("lfpc %0" : : "Q" (vcpu->arch.guest_fpregs.fpc));
603 vcpu->arch.sie_block->gbea = 1;
604 vcpu->arch.sie_block->pp = 0;
605 vcpu->arch.pfault_token = KVM_S390_PFAULT_TOKEN_INVALID;
606 kvm_clear_async_pf_completion_queue(vcpu);
607 if (!kvm_s390_user_cpu_state_ctrl(vcpu->kvm))
608 kvm_s390_vcpu_stop(vcpu);
609 kvm_s390_clear_local_irqs(vcpu);
610 }
611
kvm_arch_vcpu_postcreate(struct kvm_vcpu * vcpu)612 int kvm_arch_vcpu_postcreate(struct kvm_vcpu *vcpu)
613 {
614 return 0;
615 }
616
kvm_s390_vcpu_crypto_setup(struct kvm_vcpu * vcpu)617 static void kvm_s390_vcpu_crypto_setup(struct kvm_vcpu *vcpu)
618 {
619 if (!test_vfacility(76))
620 return;
621
622 vcpu->arch.sie_block->crycbd = vcpu->kvm->arch.crypto.crycbd;
623 }
624
kvm_s390_vcpu_unsetup_cmma(struct kvm_vcpu * vcpu)625 void kvm_s390_vcpu_unsetup_cmma(struct kvm_vcpu *vcpu)
626 {
627 free_page(vcpu->arch.sie_block->cbrlo);
628 vcpu->arch.sie_block->cbrlo = 0;
629 }
630
kvm_s390_vcpu_setup_cmma(struct kvm_vcpu * vcpu)631 int kvm_s390_vcpu_setup_cmma(struct kvm_vcpu *vcpu)
632 {
633 vcpu->arch.sie_block->cbrlo = get_zeroed_page(GFP_KERNEL);
634 if (!vcpu->arch.sie_block->cbrlo)
635 return -ENOMEM;
636
637 vcpu->arch.sie_block->ecb2 |= 0x80;
638 vcpu->arch.sie_block->ecb2 &= ~0x08;
639 return 0;
640 }
641
kvm_arch_vcpu_setup(struct kvm_vcpu * vcpu)642 int kvm_arch_vcpu_setup(struct kvm_vcpu *vcpu)
643 {
644 int rc = 0;
645
646 atomic_set(&vcpu->arch.sie_block->cpuflags, CPUSTAT_ZARCH |
647 CPUSTAT_SM |
648 CPUSTAT_STOPPED |
649 CPUSTAT_GED);
650 vcpu->arch.sie_block->ecb = 6;
651 if (test_vfacility(50) && test_vfacility(73))
652 vcpu->arch.sie_block->ecb |= 0x10;
653
654 vcpu->arch.sie_block->ecb2 = 8;
655 vcpu->arch.sie_block->eca = 0xD1002000U;
656 if (sclp_has_siif())
657 vcpu->arch.sie_block->eca |= 1;
658 vcpu->arch.sie_block->fac = (int) (long) vfacilities;
659 vcpu->arch.sie_block->ictl |= ICTL_ISKE | ICTL_SSKE | ICTL_RRBE |
660 ICTL_TPROT;
661
662 if (kvm_s390_cmma_enabled(vcpu->kvm)) {
663 rc = kvm_s390_vcpu_setup_cmma(vcpu);
664 if (rc)
665 return rc;
666 }
667 hrtimer_init(&vcpu->arch.ckc_timer, CLOCK_MONOTONIC, HRTIMER_MODE_REL);
668 vcpu->arch.ckc_timer.function = kvm_s390_idle_wakeup;
669 get_cpu_id(&vcpu->arch.cpu_id);
670 vcpu->arch.cpu_id.version = 0xff;
671
672 kvm_s390_vcpu_crypto_setup(vcpu);
673
674 return rc;
675 }
676
kvm_arch_vcpu_create(struct kvm * kvm,unsigned int id)677 struct kvm_vcpu *kvm_arch_vcpu_create(struct kvm *kvm,
678 unsigned int id)
679 {
680 struct kvm_vcpu *vcpu;
681 struct sie_page *sie_page;
682 int rc = -EINVAL;
683
684 if (id >= KVM_MAX_VCPUS)
685 goto out;
686
687 rc = -ENOMEM;
688
689 vcpu = kmem_cache_zalloc(kvm_vcpu_cache, GFP_KERNEL);
690 if (!vcpu)
691 goto out;
692
693 sie_page = (struct sie_page *) get_zeroed_page(GFP_KERNEL);
694 if (!sie_page)
695 goto out_free_cpu;
696
697 vcpu->arch.sie_block = &sie_page->sie_block;
698 vcpu->arch.sie_block->itdba = (unsigned long) &sie_page->itdb;
699
700 vcpu->arch.sie_block->icpua = id;
701 if (!kvm_is_ucontrol(kvm)) {
702 if (!kvm->arch.sca) {
703 WARN_ON_ONCE(1);
704 goto out_free_cpu;
705 }
706 if (!kvm->arch.sca->cpu[id].sda)
707 kvm->arch.sca->cpu[id].sda =
708 (__u64) vcpu->arch.sie_block;
709 vcpu->arch.sie_block->scaoh =
710 (__u32)(((__u64)kvm->arch.sca) >> 32);
711 vcpu->arch.sie_block->scaol = (__u32)(__u64)kvm->arch.sca;
712 set_bit(63 - id, (unsigned long *) &kvm->arch.sca->mcn);
713 }
714
715 spin_lock_init(&vcpu->arch.local_int.lock);
716 INIT_LIST_HEAD(&vcpu->arch.local_int.list);
717 vcpu->arch.local_int.float_int = &kvm->arch.float_int;
718 vcpu->arch.local_int.wq = &vcpu->wq;
719 vcpu->arch.local_int.cpuflags = &vcpu->arch.sie_block->cpuflags;
720
721 rc = kvm_vcpu_init(vcpu, kvm, id);
722 if (rc)
723 goto out_free_sie_block;
724 VM_EVENT(kvm, 3, "create cpu %d at %p, sie block at %p", id, vcpu,
725 vcpu->arch.sie_block);
726 trace_kvm_s390_create_vcpu(id, vcpu, vcpu->arch.sie_block);
727
728 return vcpu;
729 out_free_sie_block:
730 free_page((unsigned long)(vcpu->arch.sie_block));
731 out_free_cpu:
732 kmem_cache_free(kvm_vcpu_cache, vcpu);
733 out:
734 return ERR_PTR(rc);
735 }
736
kvm_arch_vcpu_runnable(struct kvm_vcpu * vcpu)737 int kvm_arch_vcpu_runnable(struct kvm_vcpu *vcpu)
738 {
739 return kvm_cpu_has_interrupt(vcpu);
740 }
741
s390_vcpu_block(struct kvm_vcpu * vcpu)742 void s390_vcpu_block(struct kvm_vcpu *vcpu)
743 {
744 atomic_set_mask(PROG_BLOCK_SIE, &vcpu->arch.sie_block->prog20);
745 }
746
s390_vcpu_unblock(struct kvm_vcpu * vcpu)747 void s390_vcpu_unblock(struct kvm_vcpu *vcpu)
748 {
749 atomic_clear_mask(PROG_BLOCK_SIE, &vcpu->arch.sie_block->prog20);
750 }
751
752 /*
753 * Kick a guest cpu out of SIE and wait until SIE is not running.
754 * If the CPU is not running (e.g. waiting as idle) the function will
755 * return immediately. */
exit_sie(struct kvm_vcpu * vcpu)756 void exit_sie(struct kvm_vcpu *vcpu)
757 {
758 atomic_set_mask(CPUSTAT_STOP_INT, &vcpu->arch.sie_block->cpuflags);
759 while (vcpu->arch.sie_block->prog0c & PROG_IN_SIE)
760 cpu_relax();
761 }
762
763 /* Kick a guest cpu out of SIE and prevent SIE-reentry */
exit_sie_sync(struct kvm_vcpu * vcpu)764 void exit_sie_sync(struct kvm_vcpu *vcpu)
765 {
766 s390_vcpu_block(vcpu);
767 exit_sie(vcpu);
768 }
769
kvm_gmap_notifier(struct gmap * gmap,unsigned long address)770 static void kvm_gmap_notifier(struct gmap *gmap, unsigned long address)
771 {
772 int i;
773 struct kvm *kvm = gmap->private;
774 struct kvm_vcpu *vcpu;
775
776 kvm_for_each_vcpu(i, vcpu, kvm) {
777 /* match against both prefix pages */
778 if (kvm_s390_get_prefix(vcpu) == (address & ~0x1000UL)) {
779 VCPU_EVENT(vcpu, 2, "gmap notifier for %lx", address);
780 kvm_make_request(KVM_REQ_MMU_RELOAD, vcpu);
781 exit_sie_sync(vcpu);
782 }
783 }
784 }
785
kvm_arch_vcpu_should_kick(struct kvm_vcpu * vcpu)786 int kvm_arch_vcpu_should_kick(struct kvm_vcpu *vcpu)
787 {
788 /* kvm common code refers to this, but never calls it */
789 BUG();
790 return 0;
791 }
792
kvm_arch_vcpu_ioctl_get_one_reg(struct kvm_vcpu * vcpu,struct kvm_one_reg * reg)793 static int kvm_arch_vcpu_ioctl_get_one_reg(struct kvm_vcpu *vcpu,
794 struct kvm_one_reg *reg)
795 {
796 int r = -EINVAL;
797
798 switch (reg->id) {
799 case KVM_REG_S390_TODPR:
800 r = put_user(vcpu->arch.sie_block->todpr,
801 (u32 __user *)reg->addr);
802 break;
803 case KVM_REG_S390_EPOCHDIFF:
804 r = put_user(vcpu->arch.sie_block->epoch,
805 (u64 __user *)reg->addr);
806 break;
807 case KVM_REG_S390_CPU_TIMER:
808 r = put_user(vcpu->arch.sie_block->cputm,
809 (u64 __user *)reg->addr);
810 break;
811 case KVM_REG_S390_CLOCK_COMP:
812 r = put_user(vcpu->arch.sie_block->ckc,
813 (u64 __user *)reg->addr);
814 break;
815 case KVM_REG_S390_PFTOKEN:
816 r = put_user(vcpu->arch.pfault_token,
817 (u64 __user *)reg->addr);
818 break;
819 case KVM_REG_S390_PFCOMPARE:
820 r = put_user(vcpu->arch.pfault_compare,
821 (u64 __user *)reg->addr);
822 break;
823 case KVM_REG_S390_PFSELECT:
824 r = put_user(vcpu->arch.pfault_select,
825 (u64 __user *)reg->addr);
826 break;
827 case KVM_REG_S390_PP:
828 r = put_user(vcpu->arch.sie_block->pp,
829 (u64 __user *)reg->addr);
830 break;
831 case KVM_REG_S390_GBEA:
832 r = put_user(vcpu->arch.sie_block->gbea,
833 (u64 __user *)reg->addr);
834 break;
835 default:
836 break;
837 }
838
839 return r;
840 }
841
kvm_arch_vcpu_ioctl_set_one_reg(struct kvm_vcpu * vcpu,struct kvm_one_reg * reg)842 static int kvm_arch_vcpu_ioctl_set_one_reg(struct kvm_vcpu *vcpu,
843 struct kvm_one_reg *reg)
844 {
845 int r = -EINVAL;
846
847 switch (reg->id) {
848 case KVM_REG_S390_TODPR:
849 r = get_user(vcpu->arch.sie_block->todpr,
850 (u32 __user *)reg->addr);
851 break;
852 case KVM_REG_S390_EPOCHDIFF:
853 r = get_user(vcpu->arch.sie_block->epoch,
854 (u64 __user *)reg->addr);
855 break;
856 case KVM_REG_S390_CPU_TIMER:
857 r = get_user(vcpu->arch.sie_block->cputm,
858 (u64 __user *)reg->addr);
859 break;
860 case KVM_REG_S390_CLOCK_COMP:
861 r = get_user(vcpu->arch.sie_block->ckc,
862 (u64 __user *)reg->addr);
863 break;
864 case KVM_REG_S390_PFTOKEN:
865 r = get_user(vcpu->arch.pfault_token,
866 (u64 __user *)reg->addr);
867 break;
868 case KVM_REG_S390_PFCOMPARE:
869 r = get_user(vcpu->arch.pfault_compare,
870 (u64 __user *)reg->addr);
871 break;
872 case KVM_REG_S390_PFSELECT:
873 r = get_user(vcpu->arch.pfault_select,
874 (u64 __user *)reg->addr);
875 break;
876 case KVM_REG_S390_PP:
877 r = get_user(vcpu->arch.sie_block->pp,
878 (u64 __user *)reg->addr);
879 break;
880 case KVM_REG_S390_GBEA:
881 r = get_user(vcpu->arch.sie_block->gbea,
882 (u64 __user *)reg->addr);
883 break;
884 default:
885 break;
886 }
887
888 return r;
889 }
890
kvm_arch_vcpu_ioctl_initial_reset(struct kvm_vcpu * vcpu)891 static int kvm_arch_vcpu_ioctl_initial_reset(struct kvm_vcpu *vcpu)
892 {
893 kvm_s390_vcpu_initial_reset(vcpu);
894 return 0;
895 }
896
kvm_arch_vcpu_ioctl_set_regs(struct kvm_vcpu * vcpu,struct kvm_regs * regs)897 int kvm_arch_vcpu_ioctl_set_regs(struct kvm_vcpu *vcpu, struct kvm_regs *regs)
898 {
899 memcpy(&vcpu->run->s.regs.gprs, ®s->gprs, sizeof(regs->gprs));
900 return 0;
901 }
902
kvm_arch_vcpu_ioctl_get_regs(struct kvm_vcpu * vcpu,struct kvm_regs * regs)903 int kvm_arch_vcpu_ioctl_get_regs(struct kvm_vcpu *vcpu, struct kvm_regs *regs)
904 {
905 memcpy(®s->gprs, &vcpu->run->s.regs.gprs, sizeof(regs->gprs));
906 return 0;
907 }
908
kvm_arch_vcpu_ioctl_set_sregs(struct kvm_vcpu * vcpu,struct kvm_sregs * sregs)909 int kvm_arch_vcpu_ioctl_set_sregs(struct kvm_vcpu *vcpu,
910 struct kvm_sregs *sregs)
911 {
912 memcpy(&vcpu->run->s.regs.acrs, &sregs->acrs, sizeof(sregs->acrs));
913 memcpy(&vcpu->arch.sie_block->gcr, &sregs->crs, sizeof(sregs->crs));
914 restore_access_regs(vcpu->run->s.regs.acrs);
915 return 0;
916 }
917
kvm_arch_vcpu_ioctl_get_sregs(struct kvm_vcpu * vcpu,struct kvm_sregs * sregs)918 int kvm_arch_vcpu_ioctl_get_sregs(struct kvm_vcpu *vcpu,
919 struct kvm_sregs *sregs)
920 {
921 memcpy(&sregs->acrs, &vcpu->run->s.regs.acrs, sizeof(sregs->acrs));
922 memcpy(&sregs->crs, &vcpu->arch.sie_block->gcr, sizeof(sregs->crs));
923 return 0;
924 }
925
kvm_arch_vcpu_ioctl_set_fpu(struct kvm_vcpu * vcpu,struct kvm_fpu * fpu)926 int kvm_arch_vcpu_ioctl_set_fpu(struct kvm_vcpu *vcpu, struct kvm_fpu *fpu)
927 {
928 if (test_fp_ctl(fpu->fpc))
929 return -EINVAL;
930 memcpy(&vcpu->arch.guest_fpregs.fprs, &fpu->fprs, sizeof(fpu->fprs));
931 vcpu->arch.guest_fpregs.fpc = fpu->fpc;
932 restore_fp_ctl(&vcpu->arch.guest_fpregs.fpc);
933 restore_fp_regs(vcpu->arch.guest_fpregs.fprs);
934 return 0;
935 }
936
kvm_arch_vcpu_ioctl_get_fpu(struct kvm_vcpu * vcpu,struct kvm_fpu * fpu)937 int kvm_arch_vcpu_ioctl_get_fpu(struct kvm_vcpu *vcpu, struct kvm_fpu *fpu)
938 {
939 memcpy(&fpu->fprs, &vcpu->arch.guest_fpregs.fprs, sizeof(fpu->fprs));
940 fpu->fpc = vcpu->arch.guest_fpregs.fpc;
941 return 0;
942 }
943
kvm_arch_vcpu_ioctl_set_initial_psw(struct kvm_vcpu * vcpu,psw_t psw)944 static int kvm_arch_vcpu_ioctl_set_initial_psw(struct kvm_vcpu *vcpu, psw_t psw)
945 {
946 int rc = 0;
947
948 if (!is_vcpu_stopped(vcpu))
949 rc = -EBUSY;
950 else {
951 vcpu->run->psw_mask = psw.mask;
952 vcpu->run->psw_addr = psw.addr;
953 }
954 return rc;
955 }
956
kvm_arch_vcpu_ioctl_translate(struct kvm_vcpu * vcpu,struct kvm_translation * tr)957 int kvm_arch_vcpu_ioctl_translate(struct kvm_vcpu *vcpu,
958 struct kvm_translation *tr)
959 {
960 return -EINVAL; /* not implemented yet */
961 }
962
963 #define VALID_GUESTDBG_FLAGS (KVM_GUESTDBG_SINGLESTEP | \
964 KVM_GUESTDBG_USE_HW_BP | \
965 KVM_GUESTDBG_ENABLE)
966
kvm_arch_vcpu_ioctl_set_guest_debug(struct kvm_vcpu * vcpu,struct kvm_guest_debug * dbg)967 int kvm_arch_vcpu_ioctl_set_guest_debug(struct kvm_vcpu *vcpu,
968 struct kvm_guest_debug *dbg)
969 {
970 int rc = 0;
971
972 vcpu->guest_debug = 0;
973 kvm_s390_clear_bp_data(vcpu);
974
975 if (dbg->control & ~VALID_GUESTDBG_FLAGS)
976 return -EINVAL;
977
978 if (dbg->control & KVM_GUESTDBG_ENABLE) {
979 vcpu->guest_debug = dbg->control;
980 /* enforce guest PER */
981 atomic_set_mask(CPUSTAT_P, &vcpu->arch.sie_block->cpuflags);
982
983 if (dbg->control & KVM_GUESTDBG_USE_HW_BP)
984 rc = kvm_s390_import_bp_data(vcpu, dbg);
985 } else {
986 atomic_clear_mask(CPUSTAT_P, &vcpu->arch.sie_block->cpuflags);
987 vcpu->arch.guestdbg.last_bp = 0;
988 }
989
990 if (rc) {
991 vcpu->guest_debug = 0;
992 kvm_s390_clear_bp_data(vcpu);
993 atomic_clear_mask(CPUSTAT_P, &vcpu->arch.sie_block->cpuflags);
994 }
995
996 return rc;
997 }
998
kvm_arch_vcpu_ioctl_get_mpstate(struct kvm_vcpu * vcpu,struct kvm_mp_state * mp_state)999 int kvm_arch_vcpu_ioctl_get_mpstate(struct kvm_vcpu *vcpu,
1000 struct kvm_mp_state *mp_state)
1001 {
1002 /* CHECK_STOP and LOAD are not supported yet */
1003 return is_vcpu_stopped(vcpu) ? KVM_MP_STATE_STOPPED :
1004 KVM_MP_STATE_OPERATING;
1005 }
1006
kvm_arch_vcpu_ioctl_set_mpstate(struct kvm_vcpu * vcpu,struct kvm_mp_state * mp_state)1007 int kvm_arch_vcpu_ioctl_set_mpstate(struct kvm_vcpu *vcpu,
1008 struct kvm_mp_state *mp_state)
1009 {
1010 int rc = 0;
1011
1012 /* user space knows about this interface - let it control the state */
1013 vcpu->kvm->arch.user_cpu_state_ctrl = 1;
1014
1015 switch (mp_state->mp_state) {
1016 case KVM_MP_STATE_STOPPED:
1017 kvm_s390_vcpu_stop(vcpu);
1018 break;
1019 case KVM_MP_STATE_OPERATING:
1020 kvm_s390_vcpu_start(vcpu);
1021 break;
1022 case KVM_MP_STATE_LOAD:
1023 case KVM_MP_STATE_CHECK_STOP:
1024 /* fall through - CHECK_STOP and LOAD are not supported yet */
1025 default:
1026 rc = -ENXIO;
1027 }
1028
1029 return rc;
1030 }
1031
kvm_s390_cmma_enabled(struct kvm * kvm)1032 bool kvm_s390_cmma_enabled(struct kvm *kvm)
1033 {
1034 if (!MACHINE_IS_LPAR)
1035 return false;
1036 /* only enable for z10 and later */
1037 if (!MACHINE_HAS_EDAT1)
1038 return false;
1039 if (!kvm->arch.use_cmma)
1040 return false;
1041 return true;
1042 }
1043
ibs_enabled(struct kvm_vcpu * vcpu)1044 static bool ibs_enabled(struct kvm_vcpu *vcpu)
1045 {
1046 return atomic_read(&vcpu->arch.sie_block->cpuflags) & CPUSTAT_IBS;
1047 }
1048
kvm_s390_handle_requests(struct kvm_vcpu * vcpu)1049 static int kvm_s390_handle_requests(struct kvm_vcpu *vcpu)
1050 {
1051 retry:
1052 s390_vcpu_unblock(vcpu);
1053 /*
1054 * We use MMU_RELOAD just to re-arm the ipte notifier for the
1055 * guest prefix page. gmap_ipte_notify will wait on the ptl lock.
1056 * This ensures that the ipte instruction for this request has
1057 * already finished. We might race against a second unmapper that
1058 * wants to set the blocking bit. Lets just retry the request loop.
1059 */
1060 if (kvm_check_request(KVM_REQ_MMU_RELOAD, vcpu)) {
1061 int rc;
1062 rc = gmap_ipte_notify(vcpu->arch.gmap,
1063 kvm_s390_get_prefix(vcpu),
1064 PAGE_SIZE * 2);
1065 if (rc)
1066 return rc;
1067 goto retry;
1068 }
1069
1070 if (kvm_check_request(KVM_REQ_TLB_FLUSH, vcpu)) {
1071 vcpu->arch.sie_block->ihcpu = 0xffff;
1072 goto retry;
1073 }
1074
1075 if (kvm_check_request(KVM_REQ_ENABLE_IBS, vcpu)) {
1076 if (!ibs_enabled(vcpu)) {
1077 trace_kvm_s390_enable_disable_ibs(vcpu->vcpu_id, 1);
1078 atomic_set_mask(CPUSTAT_IBS,
1079 &vcpu->arch.sie_block->cpuflags);
1080 }
1081 goto retry;
1082 }
1083
1084 if (kvm_check_request(KVM_REQ_DISABLE_IBS, vcpu)) {
1085 if (ibs_enabled(vcpu)) {
1086 trace_kvm_s390_enable_disable_ibs(vcpu->vcpu_id, 0);
1087 atomic_clear_mask(CPUSTAT_IBS,
1088 &vcpu->arch.sie_block->cpuflags);
1089 }
1090 goto retry;
1091 }
1092
1093 /* nothing to do, just clear the request */
1094 clear_bit(KVM_REQ_UNHALT, &vcpu->requests);
1095
1096 return 0;
1097 }
1098
1099 /**
1100 * kvm_arch_fault_in_page - fault-in guest page if necessary
1101 * @vcpu: The corresponding virtual cpu
1102 * @gpa: Guest physical address
1103 * @writable: Whether the page should be writable or not
1104 *
1105 * Make sure that a guest page has been faulted-in on the host.
1106 *
1107 * Return: Zero on success, negative error code otherwise.
1108 */
kvm_arch_fault_in_page(struct kvm_vcpu * vcpu,gpa_t gpa,int writable)1109 long kvm_arch_fault_in_page(struct kvm_vcpu *vcpu, gpa_t gpa, int writable)
1110 {
1111 return gmap_fault(vcpu->arch.gmap, gpa,
1112 writable ? FAULT_FLAG_WRITE : 0);
1113 }
1114
__kvm_inject_pfault_token(struct kvm_vcpu * vcpu,bool start_token,unsigned long token)1115 static void __kvm_inject_pfault_token(struct kvm_vcpu *vcpu, bool start_token,
1116 unsigned long token)
1117 {
1118 struct kvm_s390_interrupt inti;
1119 inti.parm64 = token;
1120
1121 if (start_token) {
1122 inti.type = KVM_S390_INT_PFAULT_INIT;
1123 WARN_ON_ONCE(kvm_s390_inject_vcpu(vcpu, &inti));
1124 } else {
1125 inti.type = KVM_S390_INT_PFAULT_DONE;
1126 WARN_ON_ONCE(kvm_s390_inject_vm(vcpu->kvm, &inti));
1127 }
1128 }
1129
kvm_arch_async_page_not_present(struct kvm_vcpu * vcpu,struct kvm_async_pf * work)1130 void kvm_arch_async_page_not_present(struct kvm_vcpu *vcpu,
1131 struct kvm_async_pf *work)
1132 {
1133 trace_kvm_s390_pfault_init(vcpu, work->arch.pfault_token);
1134 __kvm_inject_pfault_token(vcpu, true, work->arch.pfault_token);
1135 }
1136
kvm_arch_async_page_present(struct kvm_vcpu * vcpu,struct kvm_async_pf * work)1137 void kvm_arch_async_page_present(struct kvm_vcpu *vcpu,
1138 struct kvm_async_pf *work)
1139 {
1140 trace_kvm_s390_pfault_done(vcpu, work->arch.pfault_token);
1141 __kvm_inject_pfault_token(vcpu, false, work->arch.pfault_token);
1142 }
1143
kvm_arch_async_page_ready(struct kvm_vcpu * vcpu,struct kvm_async_pf * work)1144 void kvm_arch_async_page_ready(struct kvm_vcpu *vcpu,
1145 struct kvm_async_pf *work)
1146 {
1147 /* s390 will always inject the page directly */
1148 }
1149
kvm_arch_can_inject_async_page_present(struct kvm_vcpu * vcpu)1150 bool kvm_arch_can_inject_async_page_present(struct kvm_vcpu *vcpu)
1151 {
1152 /*
1153 * s390 will always inject the page directly,
1154 * but we still want check_async_completion to cleanup
1155 */
1156 return true;
1157 }
1158
kvm_arch_setup_async_pf(struct kvm_vcpu * vcpu)1159 static int kvm_arch_setup_async_pf(struct kvm_vcpu *vcpu)
1160 {
1161 hva_t hva;
1162 struct kvm_arch_async_pf arch;
1163 int rc;
1164
1165 if (vcpu->arch.pfault_token == KVM_S390_PFAULT_TOKEN_INVALID)
1166 return 0;
1167 if ((vcpu->arch.sie_block->gpsw.mask & vcpu->arch.pfault_select) !=
1168 vcpu->arch.pfault_compare)
1169 return 0;
1170 if (psw_extint_disabled(vcpu))
1171 return 0;
1172 if (kvm_cpu_has_interrupt(vcpu))
1173 return 0;
1174 if (!(vcpu->arch.sie_block->gcr[0] & 0x200ul))
1175 return 0;
1176 if (!vcpu->arch.gmap->pfault_enabled)
1177 return 0;
1178
1179 hva = gfn_to_hva(vcpu->kvm, gpa_to_gfn(current->thread.gmap_addr));
1180 hva += current->thread.gmap_addr & ~PAGE_MASK;
1181 if (read_guest_real(vcpu, vcpu->arch.pfault_token, &arch.pfault_token, 8))
1182 return 0;
1183
1184 rc = kvm_setup_async_pf(vcpu, current->thread.gmap_addr, hva, &arch);
1185 return rc;
1186 }
1187
vcpu_pre_run(struct kvm_vcpu * vcpu)1188 static int vcpu_pre_run(struct kvm_vcpu *vcpu)
1189 {
1190 int rc, cpuflags;
1191
1192 /*
1193 * On s390 notifications for arriving pages will be delivered directly
1194 * to the guest but the house keeping for completed pfaults is
1195 * handled outside the worker.
1196 */
1197 kvm_check_async_pf_completion(vcpu);
1198
1199 memcpy(&vcpu->arch.sie_block->gg14, &vcpu->run->s.regs.gprs[14], 16);
1200
1201 if (need_resched())
1202 schedule();
1203
1204 if (test_cpu_flag(CIF_MCCK_PENDING))
1205 s390_handle_mcck();
1206
1207 if (!kvm_is_ucontrol(vcpu->kvm)) {
1208 rc = kvm_s390_deliver_pending_interrupts(vcpu);
1209 if (rc)
1210 return rc;
1211 }
1212
1213 rc = kvm_s390_handle_requests(vcpu);
1214 if (rc)
1215 return rc;
1216
1217 if (guestdbg_enabled(vcpu)) {
1218 kvm_s390_backup_guest_per_regs(vcpu);
1219 kvm_s390_patch_guest_per_regs(vcpu);
1220 }
1221
1222 vcpu->arch.sie_block->icptcode = 0;
1223 cpuflags = atomic_read(&vcpu->arch.sie_block->cpuflags);
1224 VCPU_EVENT(vcpu, 6, "entering sie flags %x", cpuflags);
1225 trace_kvm_s390_sie_enter(vcpu, cpuflags);
1226
1227 return 0;
1228 }
1229
vcpu_post_run(struct kvm_vcpu * vcpu,int exit_reason)1230 static int vcpu_post_run(struct kvm_vcpu *vcpu, int exit_reason)
1231 {
1232 int rc = -1;
1233
1234 VCPU_EVENT(vcpu, 6, "exit sie icptcode %d",
1235 vcpu->arch.sie_block->icptcode);
1236 trace_kvm_s390_sie_exit(vcpu, vcpu->arch.sie_block->icptcode);
1237
1238 if (guestdbg_enabled(vcpu))
1239 kvm_s390_restore_guest_per_regs(vcpu);
1240
1241 if (exit_reason >= 0) {
1242 rc = 0;
1243 } else if (kvm_is_ucontrol(vcpu->kvm)) {
1244 vcpu->run->exit_reason = KVM_EXIT_S390_UCONTROL;
1245 vcpu->run->s390_ucontrol.trans_exc_code =
1246 current->thread.gmap_addr;
1247 vcpu->run->s390_ucontrol.pgm_code = 0x10;
1248 rc = -EREMOTE;
1249
1250 } else if (current->thread.gmap_pfault) {
1251 trace_kvm_s390_major_guest_pfault(vcpu);
1252 current->thread.gmap_pfault = 0;
1253 if (kvm_arch_setup_async_pf(vcpu)) {
1254 rc = 0;
1255 } else {
1256 gpa_t gpa = current->thread.gmap_addr;
1257 rc = kvm_arch_fault_in_page(vcpu, gpa, 1);
1258 }
1259 }
1260
1261 if (rc == -1) {
1262 VCPU_EVENT(vcpu, 3, "%s", "fault in sie instruction");
1263 trace_kvm_s390_sie_fault(vcpu);
1264 rc = kvm_s390_inject_program_int(vcpu, PGM_ADDRESSING);
1265 }
1266
1267 memcpy(&vcpu->run->s.regs.gprs[14], &vcpu->arch.sie_block->gg14, 16);
1268
1269 if (rc == 0) {
1270 if (kvm_is_ucontrol(vcpu->kvm))
1271 /* Don't exit for host interrupts. */
1272 rc = vcpu->arch.sie_block->icptcode ? -EOPNOTSUPP : 0;
1273 else
1274 rc = kvm_handle_sie_intercept(vcpu);
1275 }
1276
1277 return rc;
1278 }
1279
__vcpu_run(struct kvm_vcpu * vcpu)1280 static int __vcpu_run(struct kvm_vcpu *vcpu)
1281 {
1282 int rc, exit_reason;
1283
1284 /*
1285 * We try to hold kvm->srcu during most of vcpu_run (except when run-
1286 * ning the guest), so that memslots (and other stuff) are protected
1287 */
1288 vcpu->srcu_idx = srcu_read_lock(&vcpu->kvm->srcu);
1289
1290 do {
1291 rc = vcpu_pre_run(vcpu);
1292 if (rc)
1293 break;
1294
1295 srcu_read_unlock(&vcpu->kvm->srcu, vcpu->srcu_idx);
1296 /*
1297 * As PF_VCPU will be used in fault handler, between
1298 * guest_enter and guest_exit should be no uaccess.
1299 */
1300 preempt_disable();
1301 kvm_guest_enter();
1302 preempt_enable();
1303 exit_reason = sie64a(vcpu->arch.sie_block,
1304 vcpu->run->s.regs.gprs);
1305 kvm_guest_exit();
1306 vcpu->srcu_idx = srcu_read_lock(&vcpu->kvm->srcu);
1307
1308 rc = vcpu_post_run(vcpu, exit_reason);
1309 } while (!signal_pending(current) && !guestdbg_exit_pending(vcpu) && !rc);
1310
1311 srcu_read_unlock(&vcpu->kvm->srcu, vcpu->srcu_idx);
1312 return rc;
1313 }
1314
sync_regs(struct kvm_vcpu * vcpu,struct kvm_run * kvm_run)1315 static void sync_regs(struct kvm_vcpu *vcpu, struct kvm_run *kvm_run)
1316 {
1317 vcpu->arch.sie_block->gpsw.mask = kvm_run->psw_mask;
1318 vcpu->arch.sie_block->gpsw.addr = kvm_run->psw_addr;
1319 if (kvm_run->kvm_dirty_regs & KVM_SYNC_PREFIX)
1320 kvm_s390_set_prefix(vcpu, kvm_run->s.regs.prefix);
1321 if (kvm_run->kvm_dirty_regs & KVM_SYNC_CRS) {
1322 memcpy(&vcpu->arch.sie_block->gcr, &kvm_run->s.regs.crs, 128);
1323 /* some control register changes require a tlb flush */
1324 kvm_make_request(KVM_REQ_TLB_FLUSH, vcpu);
1325 }
1326 if (kvm_run->kvm_dirty_regs & KVM_SYNC_ARCH0) {
1327 vcpu->arch.sie_block->cputm = kvm_run->s.regs.cputm;
1328 vcpu->arch.sie_block->ckc = kvm_run->s.regs.ckc;
1329 vcpu->arch.sie_block->todpr = kvm_run->s.regs.todpr;
1330 vcpu->arch.sie_block->pp = kvm_run->s.regs.pp;
1331 vcpu->arch.sie_block->gbea = kvm_run->s.regs.gbea;
1332 }
1333 if (kvm_run->kvm_dirty_regs & KVM_SYNC_PFAULT) {
1334 vcpu->arch.pfault_token = kvm_run->s.regs.pft;
1335 vcpu->arch.pfault_select = kvm_run->s.regs.pfs;
1336 vcpu->arch.pfault_compare = kvm_run->s.regs.pfc;
1337 }
1338 kvm_run->kvm_dirty_regs = 0;
1339 }
1340
store_regs(struct kvm_vcpu * vcpu,struct kvm_run * kvm_run)1341 static void store_regs(struct kvm_vcpu *vcpu, struct kvm_run *kvm_run)
1342 {
1343 kvm_run->psw_mask = vcpu->arch.sie_block->gpsw.mask;
1344 kvm_run->psw_addr = vcpu->arch.sie_block->gpsw.addr;
1345 kvm_run->s.regs.prefix = kvm_s390_get_prefix(vcpu);
1346 memcpy(&kvm_run->s.regs.crs, &vcpu->arch.sie_block->gcr, 128);
1347 kvm_run->s.regs.cputm = vcpu->arch.sie_block->cputm;
1348 kvm_run->s.regs.ckc = vcpu->arch.sie_block->ckc;
1349 kvm_run->s.regs.todpr = vcpu->arch.sie_block->todpr;
1350 kvm_run->s.regs.pp = vcpu->arch.sie_block->pp;
1351 kvm_run->s.regs.gbea = vcpu->arch.sie_block->gbea;
1352 kvm_run->s.regs.pft = vcpu->arch.pfault_token;
1353 kvm_run->s.regs.pfs = vcpu->arch.pfault_select;
1354 kvm_run->s.regs.pfc = vcpu->arch.pfault_compare;
1355 }
1356
kvm_arch_vcpu_ioctl_run(struct kvm_vcpu * vcpu,struct kvm_run * kvm_run)1357 int kvm_arch_vcpu_ioctl_run(struct kvm_vcpu *vcpu, struct kvm_run *kvm_run)
1358 {
1359 int rc;
1360 sigset_t sigsaved;
1361
1362 if (guestdbg_exit_pending(vcpu)) {
1363 kvm_s390_prepare_debug_exit(vcpu);
1364 return 0;
1365 }
1366
1367 if (vcpu->sigset_active)
1368 sigprocmask(SIG_SETMASK, &vcpu->sigset, &sigsaved);
1369
1370 if (!kvm_s390_user_cpu_state_ctrl(vcpu->kvm)) {
1371 kvm_s390_vcpu_start(vcpu);
1372 } else if (is_vcpu_stopped(vcpu)) {
1373 pr_err_ratelimited("kvm-s390: can't run stopped vcpu %d\n",
1374 vcpu->vcpu_id);
1375 return -EINVAL;
1376 }
1377
1378 sync_regs(vcpu, kvm_run);
1379
1380 might_fault();
1381 rc = __vcpu_run(vcpu);
1382
1383 if (signal_pending(current) && !rc) {
1384 kvm_run->exit_reason = KVM_EXIT_INTR;
1385 rc = -EINTR;
1386 }
1387
1388 if (guestdbg_exit_pending(vcpu) && !rc) {
1389 kvm_s390_prepare_debug_exit(vcpu);
1390 rc = 0;
1391 }
1392
1393 if (rc == -EOPNOTSUPP) {
1394 /* intercept cannot be handled in-kernel, prepare kvm-run */
1395 kvm_run->exit_reason = KVM_EXIT_S390_SIEIC;
1396 kvm_run->s390_sieic.icptcode = vcpu->arch.sie_block->icptcode;
1397 kvm_run->s390_sieic.ipa = vcpu->arch.sie_block->ipa;
1398 kvm_run->s390_sieic.ipb = vcpu->arch.sie_block->ipb;
1399 rc = 0;
1400 }
1401
1402 if (rc == -EREMOTE) {
1403 /* intercept was handled, but userspace support is needed
1404 * kvm_run has been prepared by the handler */
1405 rc = 0;
1406 }
1407
1408 store_regs(vcpu, kvm_run);
1409
1410 if (vcpu->sigset_active)
1411 sigprocmask(SIG_SETMASK, &sigsaved, NULL);
1412
1413 vcpu->stat.exit_userspace++;
1414 return rc;
1415 }
1416
1417 /*
1418 * store status at address
1419 * we use have two special cases:
1420 * KVM_S390_STORE_STATUS_NOADDR: -> 0x1200 on 64 bit
1421 * KVM_S390_STORE_STATUS_PREFIXED: -> prefix
1422 */
kvm_s390_store_status_unloaded(struct kvm_vcpu * vcpu,unsigned long gpa)1423 int kvm_s390_store_status_unloaded(struct kvm_vcpu *vcpu, unsigned long gpa)
1424 {
1425 unsigned char archmode = 1;
1426 unsigned int px;
1427 u64 clkcomp;
1428 int rc;
1429
1430 if (gpa == KVM_S390_STORE_STATUS_NOADDR) {
1431 if (write_guest_abs(vcpu, 163, &archmode, 1))
1432 return -EFAULT;
1433 gpa = SAVE_AREA_BASE;
1434 } else if (gpa == KVM_S390_STORE_STATUS_PREFIXED) {
1435 if (write_guest_real(vcpu, 163, &archmode, 1))
1436 return -EFAULT;
1437 gpa = kvm_s390_real_to_abs(vcpu, SAVE_AREA_BASE);
1438 }
1439 rc = write_guest_abs(vcpu, gpa + offsetof(struct save_area, fp_regs),
1440 vcpu->arch.guest_fpregs.fprs, 128);
1441 rc |= write_guest_abs(vcpu, gpa + offsetof(struct save_area, gp_regs),
1442 vcpu->run->s.regs.gprs, 128);
1443 rc |= write_guest_abs(vcpu, gpa + offsetof(struct save_area, psw),
1444 &vcpu->arch.sie_block->gpsw, 16);
1445 px = kvm_s390_get_prefix(vcpu);
1446 rc |= write_guest_abs(vcpu, gpa + offsetof(struct save_area, pref_reg),
1447 &px, 4);
1448 rc |= write_guest_abs(vcpu,
1449 gpa + offsetof(struct save_area, fp_ctrl_reg),
1450 &vcpu->arch.guest_fpregs.fpc, 4);
1451 rc |= write_guest_abs(vcpu, gpa + offsetof(struct save_area, tod_reg),
1452 &vcpu->arch.sie_block->todpr, 4);
1453 rc |= write_guest_abs(vcpu, gpa + offsetof(struct save_area, timer),
1454 &vcpu->arch.sie_block->cputm, 8);
1455 clkcomp = vcpu->arch.sie_block->ckc >> 8;
1456 rc |= write_guest_abs(vcpu, gpa + offsetof(struct save_area, clk_cmp),
1457 &clkcomp, 8);
1458 rc |= write_guest_abs(vcpu, gpa + offsetof(struct save_area, acc_regs),
1459 &vcpu->run->s.regs.acrs, 64);
1460 rc |= write_guest_abs(vcpu, gpa + offsetof(struct save_area, ctrl_regs),
1461 &vcpu->arch.sie_block->gcr, 128);
1462 return rc ? -EFAULT : 0;
1463 }
1464
kvm_s390_vcpu_store_status(struct kvm_vcpu * vcpu,unsigned long addr)1465 int kvm_s390_vcpu_store_status(struct kvm_vcpu *vcpu, unsigned long addr)
1466 {
1467 /*
1468 * The guest FPRS and ACRS are in the host FPRS/ACRS due to the lazy
1469 * copying in vcpu load/put. Lets update our copies before we save
1470 * it into the save area
1471 */
1472 save_fp_ctl(&vcpu->arch.guest_fpregs.fpc);
1473 save_fp_regs(vcpu->arch.guest_fpregs.fprs);
1474 save_access_regs(vcpu->run->s.regs.acrs);
1475
1476 return kvm_s390_store_status_unloaded(vcpu, addr);
1477 }
1478
__disable_ibs_on_vcpu(struct kvm_vcpu * vcpu)1479 static void __disable_ibs_on_vcpu(struct kvm_vcpu *vcpu)
1480 {
1481 kvm_check_request(KVM_REQ_ENABLE_IBS, vcpu);
1482 kvm_make_request(KVM_REQ_DISABLE_IBS, vcpu);
1483 exit_sie_sync(vcpu);
1484 }
1485
__disable_ibs_on_all_vcpus(struct kvm * kvm)1486 static void __disable_ibs_on_all_vcpus(struct kvm *kvm)
1487 {
1488 unsigned int i;
1489 struct kvm_vcpu *vcpu;
1490
1491 kvm_for_each_vcpu(i, vcpu, kvm) {
1492 __disable_ibs_on_vcpu(vcpu);
1493 }
1494 }
1495
__enable_ibs_on_vcpu(struct kvm_vcpu * vcpu)1496 static void __enable_ibs_on_vcpu(struct kvm_vcpu *vcpu)
1497 {
1498 kvm_check_request(KVM_REQ_DISABLE_IBS, vcpu);
1499 kvm_make_request(KVM_REQ_ENABLE_IBS, vcpu);
1500 exit_sie_sync(vcpu);
1501 }
1502
kvm_s390_vcpu_start(struct kvm_vcpu * vcpu)1503 void kvm_s390_vcpu_start(struct kvm_vcpu *vcpu)
1504 {
1505 int i, online_vcpus, started_vcpus = 0;
1506
1507 if (!is_vcpu_stopped(vcpu))
1508 return;
1509
1510 trace_kvm_s390_vcpu_start_stop(vcpu->vcpu_id, 1);
1511 /* Only one cpu at a time may enter/leave the STOPPED state. */
1512 spin_lock(&vcpu->kvm->arch.start_stop_lock);
1513 online_vcpus = atomic_read(&vcpu->kvm->online_vcpus);
1514
1515 for (i = 0; i < online_vcpus; i++) {
1516 if (!is_vcpu_stopped(vcpu->kvm->vcpus[i]))
1517 started_vcpus++;
1518 }
1519
1520 if (started_vcpus == 0) {
1521 /* we're the only active VCPU -> speed it up */
1522 __enable_ibs_on_vcpu(vcpu);
1523 } else if (started_vcpus == 1) {
1524 /*
1525 * As we are starting a second VCPU, we have to disable
1526 * the IBS facility on all VCPUs to remove potentially
1527 * oustanding ENABLE requests.
1528 */
1529 __disable_ibs_on_all_vcpus(vcpu->kvm);
1530 }
1531
1532 atomic_clear_mask(CPUSTAT_STOPPED, &vcpu->arch.sie_block->cpuflags);
1533 /*
1534 * Another VCPU might have used IBS while we were offline.
1535 * Let's play safe and flush the VCPU at startup.
1536 */
1537 kvm_make_request(KVM_REQ_TLB_FLUSH, vcpu);
1538 spin_unlock(&vcpu->kvm->arch.start_stop_lock);
1539 return;
1540 }
1541
kvm_s390_vcpu_stop(struct kvm_vcpu * vcpu)1542 void kvm_s390_vcpu_stop(struct kvm_vcpu *vcpu)
1543 {
1544 int i, online_vcpus, started_vcpus = 0;
1545 struct kvm_vcpu *started_vcpu = NULL;
1546
1547 if (is_vcpu_stopped(vcpu))
1548 return;
1549
1550 trace_kvm_s390_vcpu_start_stop(vcpu->vcpu_id, 0);
1551 /* Only one cpu at a time may enter/leave the STOPPED state. */
1552 spin_lock(&vcpu->kvm->arch.start_stop_lock);
1553 online_vcpus = atomic_read(&vcpu->kvm->online_vcpus);
1554
1555 /* Need to lock access to action_bits to avoid a SIGP race condition */
1556 spin_lock(&vcpu->arch.local_int.lock);
1557 atomic_set_mask(CPUSTAT_STOPPED, &vcpu->arch.sie_block->cpuflags);
1558
1559 /* SIGP STOP and SIGP STOP AND STORE STATUS has been fully processed */
1560 vcpu->arch.local_int.action_bits &=
1561 ~(ACTION_STOP_ON_STOP | ACTION_STORE_ON_STOP);
1562 spin_unlock(&vcpu->arch.local_int.lock);
1563
1564 __disable_ibs_on_vcpu(vcpu);
1565
1566 for (i = 0; i < online_vcpus; i++) {
1567 if (!is_vcpu_stopped(vcpu->kvm->vcpus[i])) {
1568 started_vcpus++;
1569 started_vcpu = vcpu->kvm->vcpus[i];
1570 }
1571 }
1572
1573 if (started_vcpus == 1) {
1574 /*
1575 * As we only have one VCPU left, we want to enable the
1576 * IBS facility for that VCPU to speed it up.
1577 */
1578 __enable_ibs_on_vcpu(started_vcpu);
1579 }
1580
1581 spin_unlock(&vcpu->kvm->arch.start_stop_lock);
1582 return;
1583 }
1584
kvm_vcpu_ioctl_enable_cap(struct kvm_vcpu * vcpu,struct kvm_enable_cap * cap)1585 static int kvm_vcpu_ioctl_enable_cap(struct kvm_vcpu *vcpu,
1586 struct kvm_enable_cap *cap)
1587 {
1588 int r;
1589
1590 if (cap->flags)
1591 return -EINVAL;
1592
1593 switch (cap->cap) {
1594 case KVM_CAP_S390_CSS_SUPPORT:
1595 if (!vcpu->kvm->arch.css_support) {
1596 vcpu->kvm->arch.css_support = 1;
1597 trace_kvm_s390_enable_css(vcpu->kvm);
1598 }
1599 r = 0;
1600 break;
1601 default:
1602 r = -EINVAL;
1603 break;
1604 }
1605 return r;
1606 }
1607
kvm_arch_vcpu_ioctl(struct file * filp,unsigned int ioctl,unsigned long arg)1608 long kvm_arch_vcpu_ioctl(struct file *filp,
1609 unsigned int ioctl, unsigned long arg)
1610 {
1611 struct kvm_vcpu *vcpu = filp->private_data;
1612 void __user *argp = (void __user *)arg;
1613 int idx;
1614 long r;
1615
1616 switch (ioctl) {
1617 case KVM_S390_INTERRUPT: {
1618 struct kvm_s390_interrupt s390int;
1619
1620 r = -EFAULT;
1621 if (copy_from_user(&s390int, argp, sizeof(s390int)))
1622 break;
1623 r = kvm_s390_inject_vcpu(vcpu, &s390int);
1624 break;
1625 }
1626 case KVM_S390_STORE_STATUS:
1627 idx = srcu_read_lock(&vcpu->kvm->srcu);
1628 r = kvm_s390_vcpu_store_status(vcpu, arg);
1629 srcu_read_unlock(&vcpu->kvm->srcu, idx);
1630 break;
1631 case KVM_S390_SET_INITIAL_PSW: {
1632 psw_t psw;
1633
1634 r = -EFAULT;
1635 if (copy_from_user(&psw, argp, sizeof(psw)))
1636 break;
1637 r = kvm_arch_vcpu_ioctl_set_initial_psw(vcpu, psw);
1638 break;
1639 }
1640 case KVM_S390_INITIAL_RESET:
1641 r = kvm_arch_vcpu_ioctl_initial_reset(vcpu);
1642 break;
1643 case KVM_SET_ONE_REG:
1644 case KVM_GET_ONE_REG: {
1645 struct kvm_one_reg reg;
1646 r = -EFAULT;
1647 if (copy_from_user(®, argp, sizeof(reg)))
1648 break;
1649 if (ioctl == KVM_SET_ONE_REG)
1650 r = kvm_arch_vcpu_ioctl_set_one_reg(vcpu, ®);
1651 else
1652 r = kvm_arch_vcpu_ioctl_get_one_reg(vcpu, ®);
1653 break;
1654 }
1655 #ifdef CONFIG_KVM_S390_UCONTROL
1656 case KVM_S390_UCAS_MAP: {
1657 struct kvm_s390_ucas_mapping ucasmap;
1658
1659 if (copy_from_user(&ucasmap, argp, sizeof(ucasmap))) {
1660 r = -EFAULT;
1661 break;
1662 }
1663
1664 if (!kvm_is_ucontrol(vcpu->kvm)) {
1665 r = -EINVAL;
1666 break;
1667 }
1668
1669 r = gmap_map_segment(vcpu->arch.gmap, ucasmap.user_addr,
1670 ucasmap.vcpu_addr, ucasmap.length);
1671 break;
1672 }
1673 case KVM_S390_UCAS_UNMAP: {
1674 struct kvm_s390_ucas_mapping ucasmap;
1675
1676 if (copy_from_user(&ucasmap, argp, sizeof(ucasmap))) {
1677 r = -EFAULT;
1678 break;
1679 }
1680
1681 if (!kvm_is_ucontrol(vcpu->kvm)) {
1682 r = -EINVAL;
1683 break;
1684 }
1685
1686 r = gmap_unmap_segment(vcpu->arch.gmap, ucasmap.vcpu_addr,
1687 ucasmap.length);
1688 break;
1689 }
1690 #endif
1691 case KVM_S390_VCPU_FAULT: {
1692 r = gmap_fault(vcpu->arch.gmap, arg, 0);
1693 break;
1694 }
1695 case KVM_ENABLE_CAP:
1696 {
1697 struct kvm_enable_cap cap;
1698 r = -EFAULT;
1699 if (copy_from_user(&cap, argp, sizeof(cap)))
1700 break;
1701 r = kvm_vcpu_ioctl_enable_cap(vcpu, &cap);
1702 break;
1703 }
1704 default:
1705 r = -ENOTTY;
1706 }
1707 return r;
1708 }
1709
kvm_arch_vcpu_fault(struct kvm_vcpu * vcpu,struct vm_fault * vmf)1710 int kvm_arch_vcpu_fault(struct kvm_vcpu *vcpu, struct vm_fault *vmf)
1711 {
1712 #ifdef CONFIG_KVM_S390_UCONTROL
1713 if ((vmf->pgoff == KVM_S390_SIE_PAGE_OFFSET)
1714 && (kvm_is_ucontrol(vcpu->kvm))) {
1715 vmf->page = virt_to_page(vcpu->arch.sie_block);
1716 get_page(vmf->page);
1717 return 0;
1718 }
1719 #endif
1720 return VM_FAULT_SIGBUS;
1721 }
1722
kvm_arch_create_memslot(struct kvm * kvm,struct kvm_memory_slot * slot,unsigned long npages)1723 int kvm_arch_create_memslot(struct kvm *kvm, struct kvm_memory_slot *slot,
1724 unsigned long npages)
1725 {
1726 return 0;
1727 }
1728
1729 /* Section: memory related */
kvm_arch_prepare_memory_region(struct kvm * kvm,struct kvm_memory_slot * memslot,struct kvm_userspace_memory_region * mem,enum kvm_mr_change change)1730 int kvm_arch_prepare_memory_region(struct kvm *kvm,
1731 struct kvm_memory_slot *memslot,
1732 struct kvm_userspace_memory_region *mem,
1733 enum kvm_mr_change change)
1734 {
1735 /* A few sanity checks. We can have memory slots which have to be
1736 located/ended at a segment boundary (1MB). The memory in userland is
1737 ok to be fragmented into various different vmas. It is okay to mmap()
1738 and munmap() stuff in this slot after doing this call at any time */
1739
1740 if (mem->userspace_addr & 0xffffful)
1741 return -EINVAL;
1742
1743 if (mem->memory_size & 0xffffful)
1744 return -EINVAL;
1745
1746 return 0;
1747 }
1748
kvm_arch_commit_memory_region(struct kvm * kvm,struct kvm_userspace_memory_region * mem,const struct kvm_memory_slot * old,enum kvm_mr_change change)1749 void kvm_arch_commit_memory_region(struct kvm *kvm,
1750 struct kvm_userspace_memory_region *mem,
1751 const struct kvm_memory_slot *old,
1752 enum kvm_mr_change change)
1753 {
1754 int rc;
1755
1756 /* If the basics of the memslot do not change, we do not want
1757 * to update the gmap. Every update causes several unnecessary
1758 * segment translation exceptions. This is usually handled just
1759 * fine by the normal fault handler + gmap, but it will also
1760 * cause faults on the prefix page of running guest CPUs.
1761 */
1762 if (old->userspace_addr == mem->userspace_addr &&
1763 old->base_gfn * PAGE_SIZE == mem->guest_phys_addr &&
1764 old->npages * PAGE_SIZE == mem->memory_size)
1765 return;
1766
1767 rc = gmap_map_segment(kvm->arch.gmap, mem->userspace_addr,
1768 mem->guest_phys_addr, mem->memory_size);
1769 if (rc)
1770 printk(KERN_WARNING "kvm-s390: failed to commit memory region\n");
1771 return;
1772 }
1773
kvm_s390_init(void)1774 static int __init kvm_s390_init(void)
1775 {
1776 int ret;
1777 ret = kvm_init(NULL, sizeof(struct kvm_vcpu), 0, THIS_MODULE);
1778 if (ret)
1779 return ret;
1780
1781 /*
1782 * guests can ask for up to 255+1 double words, we need a full page
1783 * to hold the maximum amount of facilities. On the other hand, we
1784 * only set facilities that are known to work in KVM.
1785 */
1786 vfacilities = (unsigned long *) get_zeroed_page(GFP_KERNEL|GFP_DMA);
1787 if (!vfacilities) {
1788 kvm_exit();
1789 return -ENOMEM;
1790 }
1791 memcpy(vfacilities, S390_lowcore.stfle_fac_list, 16);
1792 vfacilities[0] &= 0xff82fffbf47c2000UL;
1793 vfacilities[1] &= 0x005c000000000000UL;
1794 return 0;
1795 }
1796
kvm_s390_exit(void)1797 static void __exit kvm_s390_exit(void)
1798 {
1799 free_page((unsigned long) vfacilities);
1800 kvm_exit();
1801 }
1802
1803 module_init(kvm_s390_init);
1804 module_exit(kvm_s390_exit);
1805
1806 /*
1807 * Enable autoloading of the kvm module.
1808 * Note that we add the module alias here instead of virt/kvm/kvm_main.c
1809 * since x86 takes a different approach.
1810 */
1811 #include <linux/miscdevice.h>
1812 MODULE_ALIAS_MISCDEV(KVM_MINOR);
1813 MODULE_ALIAS("devname:kvm");
1814