xref: /openbmc/linux/arch/s390/kvm/kvm-s390.c (revision f35e839a)
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  */
15 
16 #include <linux/compiler.h>
17 #include <linux/err.h>
18 #include <linux/fs.h>
19 #include <linux/hrtimer.h>
20 #include <linux/init.h>
21 #include <linux/kvm.h>
22 #include <linux/kvm_host.h>
23 #include <linux/module.h>
24 #include <linux/slab.h>
25 #include <linux/timer.h>
26 #include <asm/asm-offsets.h>
27 #include <asm/lowcore.h>
28 #include <asm/pgtable.h>
29 #include <asm/nmi.h>
30 #include <asm/switch_to.h>
31 #include <asm/sclp.h>
32 #include "kvm-s390.h"
33 #include "gaccess.h"
34 
35 #define CREATE_TRACE_POINTS
36 #include "trace.h"
37 #include "trace-s390.h"
38 
39 #define VCPU_STAT(x) offsetof(struct kvm_vcpu, stat.x), KVM_STAT_VCPU
40 
41 struct kvm_stats_debugfs_item debugfs_entries[] = {
42 	{ "userspace_handled", VCPU_STAT(exit_userspace) },
43 	{ "exit_null", VCPU_STAT(exit_null) },
44 	{ "exit_validity", VCPU_STAT(exit_validity) },
45 	{ "exit_stop_request", VCPU_STAT(exit_stop_request) },
46 	{ "exit_external_request", VCPU_STAT(exit_external_request) },
47 	{ "exit_external_interrupt", VCPU_STAT(exit_external_interrupt) },
48 	{ "exit_instruction", VCPU_STAT(exit_instruction) },
49 	{ "exit_program_interruption", VCPU_STAT(exit_program_interruption) },
50 	{ "exit_instr_and_program_int", VCPU_STAT(exit_instr_and_program) },
51 	{ "instruction_lctlg", VCPU_STAT(instruction_lctlg) },
52 	{ "instruction_lctl", VCPU_STAT(instruction_lctl) },
53 	{ "deliver_emergency_signal", VCPU_STAT(deliver_emergency_signal) },
54 	{ "deliver_external_call", VCPU_STAT(deliver_external_call) },
55 	{ "deliver_service_signal", VCPU_STAT(deliver_service_signal) },
56 	{ "deliver_virtio_interrupt", VCPU_STAT(deliver_virtio_interrupt) },
57 	{ "deliver_stop_signal", VCPU_STAT(deliver_stop_signal) },
58 	{ "deliver_prefix_signal", VCPU_STAT(deliver_prefix_signal) },
59 	{ "deliver_restart_signal", VCPU_STAT(deliver_restart_signal) },
60 	{ "deliver_program_interruption", VCPU_STAT(deliver_program_int) },
61 	{ "exit_wait_state", VCPU_STAT(exit_wait_state) },
62 	{ "instruction_stidp", VCPU_STAT(instruction_stidp) },
63 	{ "instruction_spx", VCPU_STAT(instruction_spx) },
64 	{ "instruction_stpx", VCPU_STAT(instruction_stpx) },
65 	{ "instruction_stap", VCPU_STAT(instruction_stap) },
66 	{ "instruction_storage_key", VCPU_STAT(instruction_storage_key) },
67 	{ "instruction_stsch", VCPU_STAT(instruction_stsch) },
68 	{ "instruction_chsc", VCPU_STAT(instruction_chsc) },
69 	{ "instruction_stsi", VCPU_STAT(instruction_stsi) },
70 	{ "instruction_stfl", VCPU_STAT(instruction_stfl) },
71 	{ "instruction_tprot", VCPU_STAT(instruction_tprot) },
72 	{ "instruction_sigp_sense", VCPU_STAT(instruction_sigp_sense) },
73 	{ "instruction_sigp_sense_running", VCPU_STAT(instruction_sigp_sense_running) },
74 	{ "instruction_sigp_external_call", VCPU_STAT(instruction_sigp_external_call) },
75 	{ "instruction_sigp_emergency", VCPU_STAT(instruction_sigp_emergency) },
76 	{ "instruction_sigp_stop", VCPU_STAT(instruction_sigp_stop) },
77 	{ "instruction_sigp_set_arch", VCPU_STAT(instruction_sigp_arch) },
78 	{ "instruction_sigp_set_prefix", VCPU_STAT(instruction_sigp_prefix) },
79 	{ "instruction_sigp_restart", VCPU_STAT(instruction_sigp_restart) },
80 	{ "diagnose_10", VCPU_STAT(diagnose_10) },
81 	{ "diagnose_44", VCPU_STAT(diagnose_44) },
82 	{ "diagnose_9c", VCPU_STAT(diagnose_9c) },
83 	{ NULL }
84 };
85 
86 static unsigned long long *facilities;
87 
88 /* Section: not file related */
89 int kvm_arch_hardware_enable(void *garbage)
90 {
91 	/* every s390 is virtualization enabled ;-) */
92 	return 0;
93 }
94 
95 void kvm_arch_hardware_disable(void *garbage)
96 {
97 }
98 
99 int kvm_arch_hardware_setup(void)
100 {
101 	return 0;
102 }
103 
104 void kvm_arch_hardware_unsetup(void)
105 {
106 }
107 
108 void kvm_arch_check_processor_compat(void *rtn)
109 {
110 }
111 
112 int kvm_arch_init(void *opaque)
113 {
114 	return 0;
115 }
116 
117 void kvm_arch_exit(void)
118 {
119 }
120 
121 /* Section: device related */
122 long kvm_arch_dev_ioctl(struct file *filp,
123 			unsigned int ioctl, unsigned long arg)
124 {
125 	if (ioctl == KVM_S390_ENABLE_SIE)
126 		return s390_enable_sie();
127 	return -EINVAL;
128 }
129 
130 int kvm_dev_ioctl_check_extension(long ext)
131 {
132 	int r;
133 
134 	switch (ext) {
135 	case KVM_CAP_S390_PSW:
136 	case KVM_CAP_S390_GMAP:
137 	case KVM_CAP_SYNC_MMU:
138 #ifdef CONFIG_KVM_S390_UCONTROL
139 	case KVM_CAP_S390_UCONTROL:
140 #endif
141 	case KVM_CAP_SYNC_REGS:
142 	case KVM_CAP_ONE_REG:
143 	case KVM_CAP_ENABLE_CAP:
144 	case KVM_CAP_S390_CSS_SUPPORT:
145 	case KVM_CAP_IOEVENTFD:
146 		r = 1;
147 		break;
148 	case KVM_CAP_NR_VCPUS:
149 	case KVM_CAP_MAX_VCPUS:
150 		r = KVM_MAX_VCPUS;
151 		break;
152 	case KVM_CAP_NR_MEMSLOTS:
153 		r = KVM_USER_MEM_SLOTS;
154 		break;
155 	case KVM_CAP_S390_COW:
156 		r = MACHINE_HAS_ESOP;
157 		break;
158 	default:
159 		r = 0;
160 	}
161 	return r;
162 }
163 
164 /* Section: vm related */
165 /*
166  * Get (and clear) the dirty memory log for a memory slot.
167  */
168 int kvm_vm_ioctl_get_dirty_log(struct kvm *kvm,
169 			       struct kvm_dirty_log *log)
170 {
171 	return 0;
172 }
173 
174 long kvm_arch_vm_ioctl(struct file *filp,
175 		       unsigned int ioctl, unsigned long arg)
176 {
177 	struct kvm *kvm = filp->private_data;
178 	void __user *argp = (void __user *)arg;
179 	int r;
180 
181 	switch (ioctl) {
182 	case KVM_S390_INTERRUPT: {
183 		struct kvm_s390_interrupt s390int;
184 
185 		r = -EFAULT;
186 		if (copy_from_user(&s390int, argp, sizeof(s390int)))
187 			break;
188 		r = kvm_s390_inject_vm(kvm, &s390int);
189 		break;
190 	}
191 	default:
192 		r = -ENOTTY;
193 	}
194 
195 	return r;
196 }
197 
198 int kvm_arch_init_vm(struct kvm *kvm, unsigned long type)
199 {
200 	int rc;
201 	char debug_name[16];
202 
203 	rc = -EINVAL;
204 #ifdef CONFIG_KVM_S390_UCONTROL
205 	if (type & ~KVM_VM_S390_UCONTROL)
206 		goto out_err;
207 	if ((type & KVM_VM_S390_UCONTROL) && (!capable(CAP_SYS_ADMIN)))
208 		goto out_err;
209 #else
210 	if (type)
211 		goto out_err;
212 #endif
213 
214 	rc = s390_enable_sie();
215 	if (rc)
216 		goto out_err;
217 
218 	rc = -ENOMEM;
219 
220 	kvm->arch.sca = (struct sca_block *) get_zeroed_page(GFP_KERNEL);
221 	if (!kvm->arch.sca)
222 		goto out_err;
223 
224 	sprintf(debug_name, "kvm-%u", current->pid);
225 
226 	kvm->arch.dbf = debug_register(debug_name, 8, 2, 8 * sizeof(long));
227 	if (!kvm->arch.dbf)
228 		goto out_nodbf;
229 
230 	spin_lock_init(&kvm->arch.float_int.lock);
231 	INIT_LIST_HEAD(&kvm->arch.float_int.list);
232 
233 	debug_register_view(kvm->arch.dbf, &debug_sprintf_view);
234 	VM_EVENT(kvm, 3, "%s", "vm created");
235 
236 	if (type & KVM_VM_S390_UCONTROL) {
237 		kvm->arch.gmap = NULL;
238 	} else {
239 		kvm->arch.gmap = gmap_alloc(current->mm);
240 		if (!kvm->arch.gmap)
241 			goto out_nogmap;
242 	}
243 
244 	kvm->arch.css_support = 0;
245 
246 	return 0;
247 out_nogmap:
248 	debug_unregister(kvm->arch.dbf);
249 out_nodbf:
250 	free_page((unsigned long)(kvm->arch.sca));
251 out_err:
252 	return rc;
253 }
254 
255 void kvm_arch_vcpu_destroy(struct kvm_vcpu *vcpu)
256 {
257 	VCPU_EVENT(vcpu, 3, "%s", "free cpu");
258 	trace_kvm_s390_destroy_vcpu(vcpu->vcpu_id);
259 	if (!kvm_is_ucontrol(vcpu->kvm)) {
260 		clear_bit(63 - vcpu->vcpu_id,
261 			  (unsigned long *) &vcpu->kvm->arch.sca->mcn);
262 		if (vcpu->kvm->arch.sca->cpu[vcpu->vcpu_id].sda ==
263 		    (__u64) vcpu->arch.sie_block)
264 			vcpu->kvm->arch.sca->cpu[vcpu->vcpu_id].sda = 0;
265 	}
266 	smp_mb();
267 
268 	if (kvm_is_ucontrol(vcpu->kvm))
269 		gmap_free(vcpu->arch.gmap);
270 
271 	free_page((unsigned long)(vcpu->arch.sie_block));
272 	kvm_vcpu_uninit(vcpu);
273 	kfree(vcpu);
274 }
275 
276 static void kvm_free_vcpus(struct kvm *kvm)
277 {
278 	unsigned int i;
279 	struct kvm_vcpu *vcpu;
280 
281 	kvm_for_each_vcpu(i, vcpu, kvm)
282 		kvm_arch_vcpu_destroy(vcpu);
283 
284 	mutex_lock(&kvm->lock);
285 	for (i = 0; i < atomic_read(&kvm->online_vcpus); i++)
286 		kvm->vcpus[i] = NULL;
287 
288 	atomic_set(&kvm->online_vcpus, 0);
289 	mutex_unlock(&kvm->lock);
290 }
291 
292 void kvm_arch_sync_events(struct kvm *kvm)
293 {
294 }
295 
296 void kvm_arch_destroy_vm(struct kvm *kvm)
297 {
298 	kvm_free_vcpus(kvm);
299 	free_page((unsigned long)(kvm->arch.sca));
300 	debug_unregister(kvm->arch.dbf);
301 	if (!kvm_is_ucontrol(kvm))
302 		gmap_free(kvm->arch.gmap);
303 }
304 
305 /* Section: vcpu related */
306 int kvm_arch_vcpu_init(struct kvm_vcpu *vcpu)
307 {
308 	if (kvm_is_ucontrol(vcpu->kvm)) {
309 		vcpu->arch.gmap = gmap_alloc(current->mm);
310 		if (!vcpu->arch.gmap)
311 			return -ENOMEM;
312 		return 0;
313 	}
314 
315 	vcpu->arch.gmap = vcpu->kvm->arch.gmap;
316 	vcpu->run->kvm_valid_regs = KVM_SYNC_PREFIX |
317 				    KVM_SYNC_GPRS |
318 				    KVM_SYNC_ACRS |
319 				    KVM_SYNC_CRS;
320 	return 0;
321 }
322 
323 void kvm_arch_vcpu_uninit(struct kvm_vcpu *vcpu)
324 {
325 	/* Nothing todo */
326 }
327 
328 void kvm_arch_vcpu_load(struct kvm_vcpu *vcpu, int cpu)
329 {
330 	save_fp_regs(&vcpu->arch.host_fpregs);
331 	save_access_regs(vcpu->arch.host_acrs);
332 	vcpu->arch.guest_fpregs.fpc &= FPC_VALID_MASK;
333 	restore_fp_regs(&vcpu->arch.guest_fpregs);
334 	restore_access_regs(vcpu->run->s.regs.acrs);
335 	gmap_enable(vcpu->arch.gmap);
336 	atomic_set_mask(CPUSTAT_RUNNING, &vcpu->arch.sie_block->cpuflags);
337 }
338 
339 void kvm_arch_vcpu_put(struct kvm_vcpu *vcpu)
340 {
341 	atomic_clear_mask(CPUSTAT_RUNNING, &vcpu->arch.sie_block->cpuflags);
342 	gmap_disable(vcpu->arch.gmap);
343 	save_fp_regs(&vcpu->arch.guest_fpregs);
344 	save_access_regs(vcpu->run->s.regs.acrs);
345 	restore_fp_regs(&vcpu->arch.host_fpregs);
346 	restore_access_regs(vcpu->arch.host_acrs);
347 }
348 
349 static void kvm_s390_vcpu_initial_reset(struct kvm_vcpu *vcpu)
350 {
351 	/* this equals initial cpu reset in pop, but we don't switch to ESA */
352 	vcpu->arch.sie_block->gpsw.mask = 0UL;
353 	vcpu->arch.sie_block->gpsw.addr = 0UL;
354 	kvm_s390_set_prefix(vcpu, 0);
355 	vcpu->arch.sie_block->cputm     = 0UL;
356 	vcpu->arch.sie_block->ckc       = 0UL;
357 	vcpu->arch.sie_block->todpr     = 0;
358 	memset(vcpu->arch.sie_block->gcr, 0, 16 * sizeof(__u64));
359 	vcpu->arch.sie_block->gcr[0]  = 0xE0UL;
360 	vcpu->arch.sie_block->gcr[14] = 0xC2000000UL;
361 	vcpu->arch.guest_fpregs.fpc = 0;
362 	asm volatile("lfpc %0" : : "Q" (vcpu->arch.guest_fpregs.fpc));
363 	vcpu->arch.sie_block->gbea = 1;
364 	atomic_set_mask(CPUSTAT_STOPPED, &vcpu->arch.sie_block->cpuflags);
365 }
366 
367 int kvm_arch_vcpu_postcreate(struct kvm_vcpu *vcpu)
368 {
369 	return 0;
370 }
371 
372 int kvm_arch_vcpu_setup(struct kvm_vcpu *vcpu)
373 {
374 	atomic_set(&vcpu->arch.sie_block->cpuflags, CPUSTAT_ZARCH |
375 						    CPUSTAT_SM |
376 						    CPUSTAT_STOPPED);
377 	vcpu->arch.sie_block->ecb   = 6;
378 	vcpu->arch.sie_block->eca   = 0xC1002001U;
379 	vcpu->arch.sie_block->fac   = (int) (long) facilities;
380 	hrtimer_init(&vcpu->arch.ckc_timer, CLOCK_REALTIME, HRTIMER_MODE_ABS);
381 	tasklet_init(&vcpu->arch.tasklet, kvm_s390_tasklet,
382 		     (unsigned long) vcpu);
383 	vcpu->arch.ckc_timer.function = kvm_s390_idle_wakeup;
384 	get_cpu_id(&vcpu->arch.cpu_id);
385 	vcpu->arch.cpu_id.version = 0xff;
386 	return 0;
387 }
388 
389 struct kvm_vcpu *kvm_arch_vcpu_create(struct kvm *kvm,
390 				      unsigned int id)
391 {
392 	struct kvm_vcpu *vcpu;
393 	int rc = -EINVAL;
394 
395 	if (id >= KVM_MAX_VCPUS)
396 		goto out;
397 
398 	rc = -ENOMEM;
399 
400 	vcpu = kzalloc(sizeof(struct kvm_vcpu), GFP_KERNEL);
401 	if (!vcpu)
402 		goto out;
403 
404 	vcpu->arch.sie_block = (struct kvm_s390_sie_block *)
405 					get_zeroed_page(GFP_KERNEL);
406 
407 	if (!vcpu->arch.sie_block)
408 		goto out_free_cpu;
409 
410 	vcpu->arch.sie_block->icpua = id;
411 	if (!kvm_is_ucontrol(kvm)) {
412 		if (!kvm->arch.sca) {
413 			WARN_ON_ONCE(1);
414 			goto out_free_cpu;
415 		}
416 		if (!kvm->arch.sca->cpu[id].sda)
417 			kvm->arch.sca->cpu[id].sda =
418 				(__u64) vcpu->arch.sie_block;
419 		vcpu->arch.sie_block->scaoh =
420 			(__u32)(((__u64)kvm->arch.sca) >> 32);
421 		vcpu->arch.sie_block->scaol = (__u32)(__u64)kvm->arch.sca;
422 		set_bit(63 - id, (unsigned long *) &kvm->arch.sca->mcn);
423 	}
424 
425 	spin_lock_init(&vcpu->arch.local_int.lock);
426 	INIT_LIST_HEAD(&vcpu->arch.local_int.list);
427 	vcpu->arch.local_int.float_int = &kvm->arch.float_int;
428 	spin_lock(&kvm->arch.float_int.lock);
429 	kvm->arch.float_int.local_int[id] = &vcpu->arch.local_int;
430 	init_waitqueue_head(&vcpu->arch.local_int.wq);
431 	vcpu->arch.local_int.cpuflags = &vcpu->arch.sie_block->cpuflags;
432 	spin_unlock(&kvm->arch.float_int.lock);
433 
434 	rc = kvm_vcpu_init(vcpu, kvm, id);
435 	if (rc)
436 		goto out_free_sie_block;
437 	VM_EVENT(kvm, 3, "create cpu %d at %p, sie block at %p", id, vcpu,
438 		 vcpu->arch.sie_block);
439 	trace_kvm_s390_create_vcpu(id, vcpu, vcpu->arch.sie_block);
440 
441 	return vcpu;
442 out_free_sie_block:
443 	free_page((unsigned long)(vcpu->arch.sie_block));
444 out_free_cpu:
445 	kfree(vcpu);
446 out:
447 	return ERR_PTR(rc);
448 }
449 
450 int kvm_arch_vcpu_runnable(struct kvm_vcpu *vcpu)
451 {
452 	/* kvm common code refers to this, but never calls it */
453 	BUG();
454 	return 0;
455 }
456 
457 int kvm_arch_vcpu_should_kick(struct kvm_vcpu *vcpu)
458 {
459 	/* kvm common code refers to this, but never calls it */
460 	BUG();
461 	return 0;
462 }
463 
464 static int kvm_arch_vcpu_ioctl_get_one_reg(struct kvm_vcpu *vcpu,
465 					   struct kvm_one_reg *reg)
466 {
467 	int r = -EINVAL;
468 
469 	switch (reg->id) {
470 	case KVM_REG_S390_TODPR:
471 		r = put_user(vcpu->arch.sie_block->todpr,
472 			     (u32 __user *)reg->addr);
473 		break;
474 	case KVM_REG_S390_EPOCHDIFF:
475 		r = put_user(vcpu->arch.sie_block->epoch,
476 			     (u64 __user *)reg->addr);
477 		break;
478 	case KVM_REG_S390_CPU_TIMER:
479 		r = put_user(vcpu->arch.sie_block->cputm,
480 			     (u64 __user *)reg->addr);
481 		break;
482 	case KVM_REG_S390_CLOCK_COMP:
483 		r = put_user(vcpu->arch.sie_block->ckc,
484 			     (u64 __user *)reg->addr);
485 		break;
486 	default:
487 		break;
488 	}
489 
490 	return r;
491 }
492 
493 static int kvm_arch_vcpu_ioctl_set_one_reg(struct kvm_vcpu *vcpu,
494 					   struct kvm_one_reg *reg)
495 {
496 	int r = -EINVAL;
497 
498 	switch (reg->id) {
499 	case KVM_REG_S390_TODPR:
500 		r = get_user(vcpu->arch.sie_block->todpr,
501 			     (u32 __user *)reg->addr);
502 		break;
503 	case KVM_REG_S390_EPOCHDIFF:
504 		r = get_user(vcpu->arch.sie_block->epoch,
505 			     (u64 __user *)reg->addr);
506 		break;
507 	case KVM_REG_S390_CPU_TIMER:
508 		r = get_user(vcpu->arch.sie_block->cputm,
509 			     (u64 __user *)reg->addr);
510 		break;
511 	case KVM_REG_S390_CLOCK_COMP:
512 		r = get_user(vcpu->arch.sie_block->ckc,
513 			     (u64 __user *)reg->addr);
514 		break;
515 	default:
516 		break;
517 	}
518 
519 	return r;
520 }
521 
522 static int kvm_arch_vcpu_ioctl_initial_reset(struct kvm_vcpu *vcpu)
523 {
524 	kvm_s390_vcpu_initial_reset(vcpu);
525 	return 0;
526 }
527 
528 int kvm_arch_vcpu_ioctl_set_regs(struct kvm_vcpu *vcpu, struct kvm_regs *regs)
529 {
530 	memcpy(&vcpu->run->s.regs.gprs, &regs->gprs, sizeof(regs->gprs));
531 	return 0;
532 }
533 
534 int kvm_arch_vcpu_ioctl_get_regs(struct kvm_vcpu *vcpu, struct kvm_regs *regs)
535 {
536 	memcpy(&regs->gprs, &vcpu->run->s.regs.gprs, sizeof(regs->gprs));
537 	return 0;
538 }
539 
540 int kvm_arch_vcpu_ioctl_set_sregs(struct kvm_vcpu *vcpu,
541 				  struct kvm_sregs *sregs)
542 {
543 	memcpy(&vcpu->run->s.regs.acrs, &sregs->acrs, sizeof(sregs->acrs));
544 	memcpy(&vcpu->arch.sie_block->gcr, &sregs->crs, sizeof(sregs->crs));
545 	restore_access_regs(vcpu->run->s.regs.acrs);
546 	return 0;
547 }
548 
549 int kvm_arch_vcpu_ioctl_get_sregs(struct kvm_vcpu *vcpu,
550 				  struct kvm_sregs *sregs)
551 {
552 	memcpy(&sregs->acrs, &vcpu->run->s.regs.acrs, sizeof(sregs->acrs));
553 	memcpy(&sregs->crs, &vcpu->arch.sie_block->gcr, sizeof(sregs->crs));
554 	return 0;
555 }
556 
557 int kvm_arch_vcpu_ioctl_set_fpu(struct kvm_vcpu *vcpu, struct kvm_fpu *fpu)
558 {
559 	memcpy(&vcpu->arch.guest_fpregs.fprs, &fpu->fprs, sizeof(fpu->fprs));
560 	vcpu->arch.guest_fpregs.fpc = fpu->fpc & FPC_VALID_MASK;
561 	restore_fp_regs(&vcpu->arch.guest_fpregs);
562 	return 0;
563 }
564 
565 int kvm_arch_vcpu_ioctl_get_fpu(struct kvm_vcpu *vcpu, struct kvm_fpu *fpu)
566 {
567 	memcpy(&fpu->fprs, &vcpu->arch.guest_fpregs.fprs, sizeof(fpu->fprs));
568 	fpu->fpc = vcpu->arch.guest_fpregs.fpc;
569 	return 0;
570 }
571 
572 static int kvm_arch_vcpu_ioctl_set_initial_psw(struct kvm_vcpu *vcpu, psw_t psw)
573 {
574 	int rc = 0;
575 
576 	if (!(atomic_read(&vcpu->arch.sie_block->cpuflags) & CPUSTAT_STOPPED))
577 		rc = -EBUSY;
578 	else {
579 		vcpu->run->psw_mask = psw.mask;
580 		vcpu->run->psw_addr = psw.addr;
581 	}
582 	return rc;
583 }
584 
585 int kvm_arch_vcpu_ioctl_translate(struct kvm_vcpu *vcpu,
586 				  struct kvm_translation *tr)
587 {
588 	return -EINVAL; /* not implemented yet */
589 }
590 
591 int kvm_arch_vcpu_ioctl_set_guest_debug(struct kvm_vcpu *vcpu,
592 					struct kvm_guest_debug *dbg)
593 {
594 	return -EINVAL; /* not implemented yet */
595 }
596 
597 int kvm_arch_vcpu_ioctl_get_mpstate(struct kvm_vcpu *vcpu,
598 				    struct kvm_mp_state *mp_state)
599 {
600 	return -EINVAL; /* not implemented yet */
601 }
602 
603 int kvm_arch_vcpu_ioctl_set_mpstate(struct kvm_vcpu *vcpu,
604 				    struct kvm_mp_state *mp_state)
605 {
606 	return -EINVAL; /* not implemented yet */
607 }
608 
609 static int __vcpu_run(struct kvm_vcpu *vcpu)
610 {
611 	int rc;
612 
613 	memcpy(&vcpu->arch.sie_block->gg14, &vcpu->run->s.regs.gprs[14], 16);
614 
615 	if (need_resched())
616 		schedule();
617 
618 	if (test_thread_flag(TIF_MCCK_PENDING))
619 		s390_handle_mcck();
620 
621 	if (!kvm_is_ucontrol(vcpu->kvm))
622 		kvm_s390_deliver_pending_interrupts(vcpu);
623 
624 	vcpu->arch.sie_block->icptcode = 0;
625 	preempt_disable();
626 	kvm_guest_enter();
627 	preempt_enable();
628 	VCPU_EVENT(vcpu, 6, "entering sie flags %x",
629 		   atomic_read(&vcpu->arch.sie_block->cpuflags));
630 	trace_kvm_s390_sie_enter(vcpu,
631 				 atomic_read(&vcpu->arch.sie_block->cpuflags));
632 	rc = sie64a(vcpu->arch.sie_block, vcpu->run->s.regs.gprs);
633 	if (rc) {
634 		if (kvm_is_ucontrol(vcpu->kvm)) {
635 			rc = SIE_INTERCEPT_UCONTROL;
636 		} else {
637 			VCPU_EVENT(vcpu, 3, "%s", "fault in sie instruction");
638 			trace_kvm_s390_sie_fault(vcpu);
639 			rc = kvm_s390_inject_program_int(vcpu, PGM_ADDRESSING);
640 		}
641 	}
642 	VCPU_EVENT(vcpu, 6, "exit sie icptcode %d",
643 		   vcpu->arch.sie_block->icptcode);
644 	trace_kvm_s390_sie_exit(vcpu, vcpu->arch.sie_block->icptcode);
645 	kvm_guest_exit();
646 
647 	memcpy(&vcpu->run->s.regs.gprs[14], &vcpu->arch.sie_block->gg14, 16);
648 	return rc;
649 }
650 
651 int kvm_arch_vcpu_ioctl_run(struct kvm_vcpu *vcpu, struct kvm_run *kvm_run)
652 {
653 	int rc;
654 	sigset_t sigsaved;
655 
656 rerun_vcpu:
657 	if (vcpu->sigset_active)
658 		sigprocmask(SIG_SETMASK, &vcpu->sigset, &sigsaved);
659 
660 	atomic_clear_mask(CPUSTAT_STOPPED, &vcpu->arch.sie_block->cpuflags);
661 
662 	BUG_ON(vcpu->kvm->arch.float_int.local_int[vcpu->vcpu_id] == NULL);
663 
664 	switch (kvm_run->exit_reason) {
665 	case KVM_EXIT_S390_SIEIC:
666 	case KVM_EXIT_UNKNOWN:
667 	case KVM_EXIT_INTR:
668 	case KVM_EXIT_S390_RESET:
669 	case KVM_EXIT_S390_UCONTROL:
670 	case KVM_EXIT_S390_TSCH:
671 		break;
672 	default:
673 		BUG();
674 	}
675 
676 	vcpu->arch.sie_block->gpsw.mask = kvm_run->psw_mask;
677 	vcpu->arch.sie_block->gpsw.addr = kvm_run->psw_addr;
678 	if (kvm_run->kvm_dirty_regs & KVM_SYNC_PREFIX) {
679 		kvm_run->kvm_dirty_regs &= ~KVM_SYNC_PREFIX;
680 		kvm_s390_set_prefix(vcpu, kvm_run->s.regs.prefix);
681 	}
682 	if (kvm_run->kvm_dirty_regs & KVM_SYNC_CRS) {
683 		kvm_run->kvm_dirty_regs &= ~KVM_SYNC_CRS;
684 		memcpy(&vcpu->arch.sie_block->gcr, &kvm_run->s.regs.crs, 128);
685 		kvm_s390_set_prefix(vcpu, kvm_run->s.regs.prefix);
686 	}
687 
688 	might_fault();
689 
690 	do {
691 		rc = __vcpu_run(vcpu);
692 		if (rc)
693 			break;
694 		if (kvm_is_ucontrol(vcpu->kvm))
695 			rc = -EOPNOTSUPP;
696 		else
697 			rc = kvm_handle_sie_intercept(vcpu);
698 	} while (!signal_pending(current) && !rc);
699 
700 	if (rc == SIE_INTERCEPT_RERUNVCPU)
701 		goto rerun_vcpu;
702 
703 	if (signal_pending(current) && !rc) {
704 		kvm_run->exit_reason = KVM_EXIT_INTR;
705 		rc = -EINTR;
706 	}
707 
708 #ifdef CONFIG_KVM_S390_UCONTROL
709 	if (rc == SIE_INTERCEPT_UCONTROL) {
710 		kvm_run->exit_reason = KVM_EXIT_S390_UCONTROL;
711 		kvm_run->s390_ucontrol.trans_exc_code =
712 			current->thread.gmap_addr;
713 		kvm_run->s390_ucontrol.pgm_code = 0x10;
714 		rc = 0;
715 	}
716 #endif
717 
718 	if (rc == -EOPNOTSUPP) {
719 		/* intercept cannot be handled in-kernel, prepare kvm-run */
720 		kvm_run->exit_reason         = KVM_EXIT_S390_SIEIC;
721 		kvm_run->s390_sieic.icptcode = vcpu->arch.sie_block->icptcode;
722 		kvm_run->s390_sieic.ipa      = vcpu->arch.sie_block->ipa;
723 		kvm_run->s390_sieic.ipb      = vcpu->arch.sie_block->ipb;
724 		rc = 0;
725 	}
726 
727 	if (rc == -EREMOTE) {
728 		/* intercept was handled, but userspace support is needed
729 		 * kvm_run has been prepared by the handler */
730 		rc = 0;
731 	}
732 
733 	kvm_run->psw_mask     = vcpu->arch.sie_block->gpsw.mask;
734 	kvm_run->psw_addr     = vcpu->arch.sie_block->gpsw.addr;
735 	kvm_run->s.regs.prefix = vcpu->arch.sie_block->prefix;
736 	memcpy(&kvm_run->s.regs.crs, &vcpu->arch.sie_block->gcr, 128);
737 
738 	if (vcpu->sigset_active)
739 		sigprocmask(SIG_SETMASK, &sigsaved, NULL);
740 
741 	vcpu->stat.exit_userspace++;
742 	return rc;
743 }
744 
745 static int __guestcopy(struct kvm_vcpu *vcpu, u64 guestdest, void *from,
746 		       unsigned long n, int prefix)
747 {
748 	if (prefix)
749 		return copy_to_guest(vcpu, guestdest, from, n);
750 	else
751 		return copy_to_guest_absolute(vcpu, guestdest, from, n);
752 }
753 
754 /*
755  * store status at address
756  * we use have two special cases:
757  * KVM_S390_STORE_STATUS_NOADDR: -> 0x1200 on 64 bit
758  * KVM_S390_STORE_STATUS_PREFIXED: -> prefix
759  */
760 int kvm_s390_vcpu_store_status(struct kvm_vcpu *vcpu, unsigned long addr)
761 {
762 	unsigned char archmode = 1;
763 	int prefix;
764 
765 	if (addr == KVM_S390_STORE_STATUS_NOADDR) {
766 		if (copy_to_guest_absolute(vcpu, 163ul, &archmode, 1))
767 			return -EFAULT;
768 		addr = SAVE_AREA_BASE;
769 		prefix = 0;
770 	} else if (addr == KVM_S390_STORE_STATUS_PREFIXED) {
771 		if (copy_to_guest(vcpu, 163ul, &archmode, 1))
772 			return -EFAULT;
773 		addr = SAVE_AREA_BASE;
774 		prefix = 1;
775 	} else
776 		prefix = 0;
777 
778 	/*
779 	 * The guest FPRS and ACRS are in the host FPRS/ACRS due to the lazy
780 	 * copying in vcpu load/put. Lets update our copies before we save
781 	 * it into the save area
782 	 */
783 	save_fp_regs(&vcpu->arch.guest_fpregs);
784 	save_access_regs(vcpu->run->s.regs.acrs);
785 
786 	if (__guestcopy(vcpu, addr + offsetof(struct save_area, fp_regs),
787 			vcpu->arch.guest_fpregs.fprs, 128, prefix))
788 		return -EFAULT;
789 
790 	if (__guestcopy(vcpu, addr + offsetof(struct save_area, gp_regs),
791 			vcpu->run->s.regs.gprs, 128, prefix))
792 		return -EFAULT;
793 
794 	if (__guestcopy(vcpu, addr + offsetof(struct save_area, psw),
795 			&vcpu->arch.sie_block->gpsw, 16, prefix))
796 		return -EFAULT;
797 
798 	if (__guestcopy(vcpu, addr + offsetof(struct save_area, pref_reg),
799 			&vcpu->arch.sie_block->prefix, 4, prefix))
800 		return -EFAULT;
801 
802 	if (__guestcopy(vcpu,
803 			addr + offsetof(struct save_area, fp_ctrl_reg),
804 			&vcpu->arch.guest_fpregs.fpc, 4, prefix))
805 		return -EFAULT;
806 
807 	if (__guestcopy(vcpu, addr + offsetof(struct save_area, tod_reg),
808 			&vcpu->arch.sie_block->todpr, 4, prefix))
809 		return -EFAULT;
810 
811 	if (__guestcopy(vcpu, addr + offsetof(struct save_area, timer),
812 			&vcpu->arch.sie_block->cputm, 8, prefix))
813 		return -EFAULT;
814 
815 	if (__guestcopy(vcpu, addr + offsetof(struct save_area, clk_cmp),
816 			&vcpu->arch.sie_block->ckc, 8, prefix))
817 		return -EFAULT;
818 
819 	if (__guestcopy(vcpu, addr + offsetof(struct save_area, acc_regs),
820 			&vcpu->run->s.regs.acrs, 64, prefix))
821 		return -EFAULT;
822 
823 	if (__guestcopy(vcpu,
824 			addr + offsetof(struct save_area, ctrl_regs),
825 			&vcpu->arch.sie_block->gcr, 128, prefix))
826 		return -EFAULT;
827 	return 0;
828 }
829 
830 static int kvm_vcpu_ioctl_enable_cap(struct kvm_vcpu *vcpu,
831 				     struct kvm_enable_cap *cap)
832 {
833 	int r;
834 
835 	if (cap->flags)
836 		return -EINVAL;
837 
838 	switch (cap->cap) {
839 	case KVM_CAP_S390_CSS_SUPPORT:
840 		if (!vcpu->kvm->arch.css_support) {
841 			vcpu->kvm->arch.css_support = 1;
842 			trace_kvm_s390_enable_css(vcpu->kvm);
843 		}
844 		r = 0;
845 		break;
846 	default:
847 		r = -EINVAL;
848 		break;
849 	}
850 	return r;
851 }
852 
853 long kvm_arch_vcpu_ioctl(struct file *filp,
854 			 unsigned int ioctl, unsigned long arg)
855 {
856 	struct kvm_vcpu *vcpu = filp->private_data;
857 	void __user *argp = (void __user *)arg;
858 	long r;
859 
860 	switch (ioctl) {
861 	case KVM_S390_INTERRUPT: {
862 		struct kvm_s390_interrupt s390int;
863 
864 		r = -EFAULT;
865 		if (copy_from_user(&s390int, argp, sizeof(s390int)))
866 			break;
867 		r = kvm_s390_inject_vcpu(vcpu, &s390int);
868 		break;
869 	}
870 	case KVM_S390_STORE_STATUS:
871 		r = kvm_s390_vcpu_store_status(vcpu, arg);
872 		break;
873 	case KVM_S390_SET_INITIAL_PSW: {
874 		psw_t psw;
875 
876 		r = -EFAULT;
877 		if (copy_from_user(&psw, argp, sizeof(psw)))
878 			break;
879 		r = kvm_arch_vcpu_ioctl_set_initial_psw(vcpu, psw);
880 		break;
881 	}
882 	case KVM_S390_INITIAL_RESET:
883 		r = kvm_arch_vcpu_ioctl_initial_reset(vcpu);
884 		break;
885 	case KVM_SET_ONE_REG:
886 	case KVM_GET_ONE_REG: {
887 		struct kvm_one_reg reg;
888 		r = -EFAULT;
889 		if (copy_from_user(&reg, argp, sizeof(reg)))
890 			break;
891 		if (ioctl == KVM_SET_ONE_REG)
892 			r = kvm_arch_vcpu_ioctl_set_one_reg(vcpu, &reg);
893 		else
894 			r = kvm_arch_vcpu_ioctl_get_one_reg(vcpu, &reg);
895 		break;
896 	}
897 #ifdef CONFIG_KVM_S390_UCONTROL
898 	case KVM_S390_UCAS_MAP: {
899 		struct kvm_s390_ucas_mapping ucasmap;
900 
901 		if (copy_from_user(&ucasmap, argp, sizeof(ucasmap))) {
902 			r = -EFAULT;
903 			break;
904 		}
905 
906 		if (!kvm_is_ucontrol(vcpu->kvm)) {
907 			r = -EINVAL;
908 			break;
909 		}
910 
911 		r = gmap_map_segment(vcpu->arch.gmap, ucasmap.user_addr,
912 				     ucasmap.vcpu_addr, ucasmap.length);
913 		break;
914 	}
915 	case KVM_S390_UCAS_UNMAP: {
916 		struct kvm_s390_ucas_mapping ucasmap;
917 
918 		if (copy_from_user(&ucasmap, argp, sizeof(ucasmap))) {
919 			r = -EFAULT;
920 			break;
921 		}
922 
923 		if (!kvm_is_ucontrol(vcpu->kvm)) {
924 			r = -EINVAL;
925 			break;
926 		}
927 
928 		r = gmap_unmap_segment(vcpu->arch.gmap, ucasmap.vcpu_addr,
929 			ucasmap.length);
930 		break;
931 	}
932 #endif
933 	case KVM_S390_VCPU_FAULT: {
934 		r = gmap_fault(arg, vcpu->arch.gmap);
935 		if (!IS_ERR_VALUE(r))
936 			r = 0;
937 		break;
938 	}
939 	case KVM_ENABLE_CAP:
940 	{
941 		struct kvm_enable_cap cap;
942 		r = -EFAULT;
943 		if (copy_from_user(&cap, argp, sizeof(cap)))
944 			break;
945 		r = kvm_vcpu_ioctl_enable_cap(vcpu, &cap);
946 		break;
947 	}
948 	default:
949 		r = -ENOTTY;
950 	}
951 	return r;
952 }
953 
954 int kvm_arch_vcpu_fault(struct kvm_vcpu *vcpu, struct vm_fault *vmf)
955 {
956 #ifdef CONFIG_KVM_S390_UCONTROL
957 	if ((vmf->pgoff == KVM_S390_SIE_PAGE_OFFSET)
958 		 && (kvm_is_ucontrol(vcpu->kvm))) {
959 		vmf->page = virt_to_page(vcpu->arch.sie_block);
960 		get_page(vmf->page);
961 		return 0;
962 	}
963 #endif
964 	return VM_FAULT_SIGBUS;
965 }
966 
967 void kvm_arch_free_memslot(struct kvm_memory_slot *free,
968 			   struct kvm_memory_slot *dont)
969 {
970 }
971 
972 int kvm_arch_create_memslot(struct kvm_memory_slot *slot, unsigned long npages)
973 {
974 	return 0;
975 }
976 
977 /* Section: memory related */
978 int kvm_arch_prepare_memory_region(struct kvm *kvm,
979 				   struct kvm_memory_slot *memslot,
980 				   struct kvm_userspace_memory_region *mem,
981 				   enum kvm_mr_change change)
982 {
983 	/* A few sanity checks. We can have memory slots which have to be
984 	   located/ended at a segment boundary (1MB). The memory in userland is
985 	   ok to be fragmented into various different vmas. It is okay to mmap()
986 	   and munmap() stuff in this slot after doing this call at any time */
987 
988 	if (mem->userspace_addr & 0xffffful)
989 		return -EINVAL;
990 
991 	if (mem->memory_size & 0xffffful)
992 		return -EINVAL;
993 
994 	return 0;
995 }
996 
997 void kvm_arch_commit_memory_region(struct kvm *kvm,
998 				struct kvm_userspace_memory_region *mem,
999 				const struct kvm_memory_slot *old,
1000 				enum kvm_mr_change change)
1001 {
1002 	int rc;
1003 
1004 	/* If the basics of the memslot do not change, we do not want
1005 	 * to update the gmap. Every update causes several unnecessary
1006 	 * segment translation exceptions. This is usually handled just
1007 	 * fine by the normal fault handler + gmap, but it will also
1008 	 * cause faults on the prefix page of running guest CPUs.
1009 	 */
1010 	if (old->userspace_addr == mem->userspace_addr &&
1011 	    old->base_gfn * PAGE_SIZE == mem->guest_phys_addr &&
1012 	    old->npages * PAGE_SIZE == mem->memory_size)
1013 		return;
1014 
1015 	rc = gmap_map_segment(kvm->arch.gmap, mem->userspace_addr,
1016 		mem->guest_phys_addr, mem->memory_size);
1017 	if (rc)
1018 		printk(KERN_WARNING "kvm-s390: failed to commit memory region\n");
1019 	return;
1020 }
1021 
1022 void kvm_arch_flush_shadow_all(struct kvm *kvm)
1023 {
1024 }
1025 
1026 void kvm_arch_flush_shadow_memslot(struct kvm *kvm,
1027 				   struct kvm_memory_slot *slot)
1028 {
1029 }
1030 
1031 static int __init kvm_s390_init(void)
1032 {
1033 	int ret;
1034 	ret = kvm_init(NULL, sizeof(struct kvm_vcpu), 0, THIS_MODULE);
1035 	if (ret)
1036 		return ret;
1037 
1038 	/*
1039 	 * guests can ask for up to 255+1 double words, we need a full page
1040 	 * to hold the maximum amount of facilities. On the other hand, we
1041 	 * only set facilities that are known to work in KVM.
1042 	 */
1043 	facilities = (unsigned long long *) get_zeroed_page(GFP_KERNEL|GFP_DMA);
1044 	if (!facilities) {
1045 		kvm_exit();
1046 		return -ENOMEM;
1047 	}
1048 	memcpy(facilities, S390_lowcore.stfle_fac_list, 16);
1049 	facilities[0] &= 0xff00fff3f47c0000ULL;
1050 	facilities[1] &= 0x001c000000000000ULL;
1051 	return 0;
1052 }
1053 
1054 static void __exit kvm_s390_exit(void)
1055 {
1056 	free_page((unsigned long) facilities);
1057 	kvm_exit();
1058 }
1059 
1060 module_init(kvm_s390_init);
1061 module_exit(kvm_s390_exit);
1062