xref: /openbmc/linux/arch/s390/kvm/kvm-s390.c (revision 7490ca1e)
1 /*
2  * s390host.c --  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/system.h>
31 #include "kvm-s390.h"
32 #include "gaccess.h"
33 
34 #define VCPU_STAT(x) offsetof(struct kvm_vcpu, stat.x), KVM_STAT_VCPU
35 
36 struct kvm_stats_debugfs_item debugfs_entries[] = {
37 	{ "userspace_handled", VCPU_STAT(exit_userspace) },
38 	{ "exit_null", VCPU_STAT(exit_null) },
39 	{ "exit_validity", VCPU_STAT(exit_validity) },
40 	{ "exit_stop_request", VCPU_STAT(exit_stop_request) },
41 	{ "exit_external_request", VCPU_STAT(exit_external_request) },
42 	{ "exit_external_interrupt", VCPU_STAT(exit_external_interrupt) },
43 	{ "exit_instruction", VCPU_STAT(exit_instruction) },
44 	{ "exit_program_interruption", VCPU_STAT(exit_program_interruption) },
45 	{ "exit_instr_and_program_int", VCPU_STAT(exit_instr_and_program) },
46 	{ "instruction_lctlg", VCPU_STAT(instruction_lctlg) },
47 	{ "instruction_lctl", VCPU_STAT(instruction_lctl) },
48 	{ "deliver_emergency_signal", VCPU_STAT(deliver_emergency_signal) },
49 	{ "deliver_external_call", VCPU_STAT(deliver_external_call) },
50 	{ "deliver_service_signal", VCPU_STAT(deliver_service_signal) },
51 	{ "deliver_virtio_interrupt", VCPU_STAT(deliver_virtio_interrupt) },
52 	{ "deliver_stop_signal", VCPU_STAT(deliver_stop_signal) },
53 	{ "deliver_prefix_signal", VCPU_STAT(deliver_prefix_signal) },
54 	{ "deliver_restart_signal", VCPU_STAT(deliver_restart_signal) },
55 	{ "deliver_program_interruption", VCPU_STAT(deliver_program_int) },
56 	{ "exit_wait_state", VCPU_STAT(exit_wait_state) },
57 	{ "instruction_stidp", VCPU_STAT(instruction_stidp) },
58 	{ "instruction_spx", VCPU_STAT(instruction_spx) },
59 	{ "instruction_stpx", VCPU_STAT(instruction_stpx) },
60 	{ "instruction_stap", VCPU_STAT(instruction_stap) },
61 	{ "instruction_storage_key", VCPU_STAT(instruction_storage_key) },
62 	{ "instruction_stsch", VCPU_STAT(instruction_stsch) },
63 	{ "instruction_chsc", VCPU_STAT(instruction_chsc) },
64 	{ "instruction_stsi", VCPU_STAT(instruction_stsi) },
65 	{ "instruction_stfl", VCPU_STAT(instruction_stfl) },
66 	{ "instruction_tprot", VCPU_STAT(instruction_tprot) },
67 	{ "instruction_sigp_sense", VCPU_STAT(instruction_sigp_sense) },
68 	{ "instruction_sigp_sense_running", VCPU_STAT(instruction_sigp_sense_running) },
69 	{ "instruction_sigp_external_call", VCPU_STAT(instruction_sigp_external_call) },
70 	{ "instruction_sigp_emergency", VCPU_STAT(instruction_sigp_emergency) },
71 	{ "instruction_sigp_stop", VCPU_STAT(instruction_sigp_stop) },
72 	{ "instruction_sigp_set_arch", VCPU_STAT(instruction_sigp_arch) },
73 	{ "instruction_sigp_set_prefix", VCPU_STAT(instruction_sigp_prefix) },
74 	{ "instruction_sigp_restart", VCPU_STAT(instruction_sigp_restart) },
75 	{ "diagnose_10", VCPU_STAT(diagnose_10) },
76 	{ "diagnose_44", VCPU_STAT(diagnose_44) },
77 	{ NULL }
78 };
79 
80 static unsigned long long *facilities;
81 
82 /* Section: not file related */
83 int kvm_arch_hardware_enable(void *garbage)
84 {
85 	/* every s390 is virtualization enabled ;-) */
86 	return 0;
87 }
88 
89 void kvm_arch_hardware_disable(void *garbage)
90 {
91 }
92 
93 int kvm_arch_hardware_setup(void)
94 {
95 	return 0;
96 }
97 
98 void kvm_arch_hardware_unsetup(void)
99 {
100 }
101 
102 void kvm_arch_check_processor_compat(void *rtn)
103 {
104 }
105 
106 int kvm_arch_init(void *opaque)
107 {
108 	return 0;
109 }
110 
111 void kvm_arch_exit(void)
112 {
113 }
114 
115 /* Section: device related */
116 long kvm_arch_dev_ioctl(struct file *filp,
117 			unsigned int ioctl, unsigned long arg)
118 {
119 	if (ioctl == KVM_S390_ENABLE_SIE)
120 		return s390_enable_sie();
121 	return -EINVAL;
122 }
123 
124 int kvm_dev_ioctl_check_extension(long ext)
125 {
126 	int r;
127 
128 	switch (ext) {
129 	case KVM_CAP_S390_PSW:
130 	case KVM_CAP_S390_GMAP:
131 	case KVM_CAP_SYNC_MMU:
132 		r = 1;
133 		break;
134 	default:
135 		r = 0;
136 	}
137 	return r;
138 }
139 
140 /* Section: vm related */
141 /*
142  * Get (and clear) the dirty memory log for a memory slot.
143  */
144 int kvm_vm_ioctl_get_dirty_log(struct kvm *kvm,
145 			       struct kvm_dirty_log *log)
146 {
147 	return 0;
148 }
149 
150 long kvm_arch_vm_ioctl(struct file *filp,
151 		       unsigned int ioctl, unsigned long arg)
152 {
153 	struct kvm *kvm = filp->private_data;
154 	void __user *argp = (void __user *)arg;
155 	int r;
156 
157 	switch (ioctl) {
158 	case KVM_S390_INTERRUPT: {
159 		struct kvm_s390_interrupt s390int;
160 
161 		r = -EFAULT;
162 		if (copy_from_user(&s390int, argp, sizeof(s390int)))
163 			break;
164 		r = kvm_s390_inject_vm(kvm, &s390int);
165 		break;
166 	}
167 	default:
168 		r = -ENOTTY;
169 	}
170 
171 	return r;
172 }
173 
174 int kvm_arch_init_vm(struct kvm *kvm)
175 {
176 	int rc;
177 	char debug_name[16];
178 
179 	rc = s390_enable_sie();
180 	if (rc)
181 		goto out_err;
182 
183 	rc = -ENOMEM;
184 
185 	kvm->arch.sca = (struct sca_block *) get_zeroed_page(GFP_KERNEL);
186 	if (!kvm->arch.sca)
187 		goto out_err;
188 
189 	sprintf(debug_name, "kvm-%u", current->pid);
190 
191 	kvm->arch.dbf = debug_register(debug_name, 8, 2, 8 * sizeof(long));
192 	if (!kvm->arch.dbf)
193 		goto out_nodbf;
194 
195 	spin_lock_init(&kvm->arch.float_int.lock);
196 	INIT_LIST_HEAD(&kvm->arch.float_int.list);
197 
198 	debug_register_view(kvm->arch.dbf, &debug_sprintf_view);
199 	VM_EVENT(kvm, 3, "%s", "vm created");
200 
201 	kvm->arch.gmap = gmap_alloc(current->mm);
202 	if (!kvm->arch.gmap)
203 		goto out_nogmap;
204 
205 	return 0;
206 out_nogmap:
207 	debug_unregister(kvm->arch.dbf);
208 out_nodbf:
209 	free_page((unsigned long)(kvm->arch.sca));
210 out_err:
211 	return rc;
212 }
213 
214 void kvm_arch_vcpu_destroy(struct kvm_vcpu *vcpu)
215 {
216 	VCPU_EVENT(vcpu, 3, "%s", "free cpu");
217 	clear_bit(63 - vcpu->vcpu_id, (unsigned long *) &vcpu->kvm->arch.sca->mcn);
218 	if (vcpu->kvm->arch.sca->cpu[vcpu->vcpu_id].sda ==
219 		(__u64) vcpu->arch.sie_block)
220 		vcpu->kvm->arch.sca->cpu[vcpu->vcpu_id].sda = 0;
221 	smp_mb();
222 	free_page((unsigned long)(vcpu->arch.sie_block));
223 	kvm_vcpu_uninit(vcpu);
224 	kfree(vcpu);
225 }
226 
227 static void kvm_free_vcpus(struct kvm *kvm)
228 {
229 	unsigned int i;
230 	struct kvm_vcpu *vcpu;
231 
232 	kvm_for_each_vcpu(i, vcpu, kvm)
233 		kvm_arch_vcpu_destroy(vcpu);
234 
235 	mutex_lock(&kvm->lock);
236 	for (i = 0; i < atomic_read(&kvm->online_vcpus); i++)
237 		kvm->vcpus[i] = NULL;
238 
239 	atomic_set(&kvm->online_vcpus, 0);
240 	mutex_unlock(&kvm->lock);
241 }
242 
243 void kvm_arch_sync_events(struct kvm *kvm)
244 {
245 }
246 
247 void kvm_arch_destroy_vm(struct kvm *kvm)
248 {
249 	kvm_free_vcpus(kvm);
250 	free_page((unsigned long)(kvm->arch.sca));
251 	debug_unregister(kvm->arch.dbf);
252 	gmap_free(kvm->arch.gmap);
253 }
254 
255 /* Section: vcpu related */
256 int kvm_arch_vcpu_init(struct kvm_vcpu *vcpu)
257 {
258 	vcpu->arch.gmap = vcpu->kvm->arch.gmap;
259 	return 0;
260 }
261 
262 void kvm_arch_vcpu_uninit(struct kvm_vcpu *vcpu)
263 {
264 	/* Nothing todo */
265 }
266 
267 void kvm_arch_vcpu_load(struct kvm_vcpu *vcpu, int cpu)
268 {
269 	save_fp_regs(&vcpu->arch.host_fpregs);
270 	save_access_regs(vcpu->arch.host_acrs);
271 	vcpu->arch.guest_fpregs.fpc &= FPC_VALID_MASK;
272 	restore_fp_regs(&vcpu->arch.guest_fpregs);
273 	restore_access_regs(vcpu->arch.guest_acrs);
274 	gmap_enable(vcpu->arch.gmap);
275 	atomic_set_mask(CPUSTAT_RUNNING, &vcpu->arch.sie_block->cpuflags);
276 }
277 
278 void kvm_arch_vcpu_put(struct kvm_vcpu *vcpu)
279 {
280 	atomic_clear_mask(CPUSTAT_RUNNING, &vcpu->arch.sie_block->cpuflags);
281 	gmap_disable(vcpu->arch.gmap);
282 	save_fp_regs(&vcpu->arch.guest_fpregs);
283 	save_access_regs(vcpu->arch.guest_acrs);
284 	restore_fp_regs(&vcpu->arch.host_fpregs);
285 	restore_access_regs(vcpu->arch.host_acrs);
286 }
287 
288 static void kvm_s390_vcpu_initial_reset(struct kvm_vcpu *vcpu)
289 {
290 	/* this equals initial cpu reset in pop, but we don't switch to ESA */
291 	vcpu->arch.sie_block->gpsw.mask = 0UL;
292 	vcpu->arch.sie_block->gpsw.addr = 0UL;
293 	vcpu->arch.sie_block->prefix    = 0UL;
294 	vcpu->arch.sie_block->ihcpu     = 0xffff;
295 	vcpu->arch.sie_block->cputm     = 0UL;
296 	vcpu->arch.sie_block->ckc       = 0UL;
297 	vcpu->arch.sie_block->todpr     = 0;
298 	memset(vcpu->arch.sie_block->gcr, 0, 16 * sizeof(__u64));
299 	vcpu->arch.sie_block->gcr[0]  = 0xE0UL;
300 	vcpu->arch.sie_block->gcr[14] = 0xC2000000UL;
301 	vcpu->arch.guest_fpregs.fpc = 0;
302 	asm volatile("lfpc %0" : : "Q" (vcpu->arch.guest_fpregs.fpc));
303 	vcpu->arch.sie_block->gbea = 1;
304 }
305 
306 int kvm_arch_vcpu_setup(struct kvm_vcpu *vcpu)
307 {
308 	atomic_set(&vcpu->arch.sie_block->cpuflags, CPUSTAT_ZARCH |
309 						    CPUSTAT_SM |
310 						    CPUSTAT_STOPPED);
311 	vcpu->arch.sie_block->ecb   = 6;
312 	vcpu->arch.sie_block->eca   = 0xC1002001U;
313 	vcpu->arch.sie_block->fac   = (int) (long) facilities;
314 	hrtimer_init(&vcpu->arch.ckc_timer, CLOCK_REALTIME, HRTIMER_MODE_ABS);
315 	tasklet_init(&vcpu->arch.tasklet, kvm_s390_tasklet,
316 		     (unsigned long) vcpu);
317 	vcpu->arch.ckc_timer.function = kvm_s390_idle_wakeup;
318 	get_cpu_id(&vcpu->arch.cpu_id);
319 	vcpu->arch.cpu_id.version = 0xff;
320 	return 0;
321 }
322 
323 struct kvm_vcpu *kvm_arch_vcpu_create(struct kvm *kvm,
324 				      unsigned int id)
325 {
326 	struct kvm_vcpu *vcpu;
327 	int rc = -EINVAL;
328 
329 	if (id >= KVM_MAX_VCPUS)
330 		goto out;
331 
332 	rc = -ENOMEM;
333 
334 	vcpu = kzalloc(sizeof(struct kvm_vcpu), GFP_KERNEL);
335 	if (!vcpu)
336 		goto out;
337 
338 	vcpu->arch.sie_block = (struct kvm_s390_sie_block *)
339 					get_zeroed_page(GFP_KERNEL);
340 
341 	if (!vcpu->arch.sie_block)
342 		goto out_free_cpu;
343 
344 	vcpu->arch.sie_block->icpua = id;
345 	BUG_ON(!kvm->arch.sca);
346 	if (!kvm->arch.sca->cpu[id].sda)
347 		kvm->arch.sca->cpu[id].sda = (__u64) vcpu->arch.sie_block;
348 	vcpu->arch.sie_block->scaoh = (__u32)(((__u64)kvm->arch.sca) >> 32);
349 	vcpu->arch.sie_block->scaol = (__u32)(__u64)kvm->arch.sca;
350 	set_bit(63 - id, (unsigned long *) &kvm->arch.sca->mcn);
351 
352 	spin_lock_init(&vcpu->arch.local_int.lock);
353 	INIT_LIST_HEAD(&vcpu->arch.local_int.list);
354 	vcpu->arch.local_int.float_int = &kvm->arch.float_int;
355 	spin_lock(&kvm->arch.float_int.lock);
356 	kvm->arch.float_int.local_int[id] = &vcpu->arch.local_int;
357 	init_waitqueue_head(&vcpu->arch.local_int.wq);
358 	vcpu->arch.local_int.cpuflags = &vcpu->arch.sie_block->cpuflags;
359 	spin_unlock(&kvm->arch.float_int.lock);
360 
361 	rc = kvm_vcpu_init(vcpu, kvm, id);
362 	if (rc)
363 		goto out_free_sie_block;
364 	VM_EVENT(kvm, 3, "create cpu %d at %p, sie block at %p", id, vcpu,
365 		 vcpu->arch.sie_block);
366 
367 	return vcpu;
368 out_free_sie_block:
369 	free_page((unsigned long)(vcpu->arch.sie_block));
370 out_free_cpu:
371 	kfree(vcpu);
372 out:
373 	return ERR_PTR(rc);
374 }
375 
376 int kvm_arch_vcpu_runnable(struct kvm_vcpu *vcpu)
377 {
378 	/* kvm common code refers to this, but never calls it */
379 	BUG();
380 	return 0;
381 }
382 
383 static int kvm_arch_vcpu_ioctl_initial_reset(struct kvm_vcpu *vcpu)
384 {
385 	kvm_s390_vcpu_initial_reset(vcpu);
386 	return 0;
387 }
388 
389 int kvm_arch_vcpu_ioctl_set_regs(struct kvm_vcpu *vcpu, struct kvm_regs *regs)
390 {
391 	memcpy(&vcpu->arch.guest_gprs, &regs->gprs, sizeof(regs->gprs));
392 	return 0;
393 }
394 
395 int kvm_arch_vcpu_ioctl_get_regs(struct kvm_vcpu *vcpu, struct kvm_regs *regs)
396 {
397 	memcpy(&regs->gprs, &vcpu->arch.guest_gprs, sizeof(regs->gprs));
398 	return 0;
399 }
400 
401 int kvm_arch_vcpu_ioctl_set_sregs(struct kvm_vcpu *vcpu,
402 				  struct kvm_sregs *sregs)
403 {
404 	memcpy(&vcpu->arch.guest_acrs, &sregs->acrs, sizeof(sregs->acrs));
405 	memcpy(&vcpu->arch.sie_block->gcr, &sregs->crs, sizeof(sregs->crs));
406 	restore_access_regs(vcpu->arch.guest_acrs);
407 	return 0;
408 }
409 
410 int kvm_arch_vcpu_ioctl_get_sregs(struct kvm_vcpu *vcpu,
411 				  struct kvm_sregs *sregs)
412 {
413 	memcpy(&sregs->acrs, &vcpu->arch.guest_acrs, sizeof(sregs->acrs));
414 	memcpy(&sregs->crs, &vcpu->arch.sie_block->gcr, sizeof(sregs->crs));
415 	return 0;
416 }
417 
418 int kvm_arch_vcpu_ioctl_set_fpu(struct kvm_vcpu *vcpu, struct kvm_fpu *fpu)
419 {
420 	memcpy(&vcpu->arch.guest_fpregs.fprs, &fpu->fprs, sizeof(fpu->fprs));
421 	vcpu->arch.guest_fpregs.fpc = fpu->fpc;
422 	restore_fp_regs(&vcpu->arch.guest_fpregs);
423 	return 0;
424 }
425 
426 int kvm_arch_vcpu_ioctl_get_fpu(struct kvm_vcpu *vcpu, struct kvm_fpu *fpu)
427 {
428 	memcpy(&fpu->fprs, &vcpu->arch.guest_fpregs.fprs, sizeof(fpu->fprs));
429 	fpu->fpc = vcpu->arch.guest_fpregs.fpc;
430 	return 0;
431 }
432 
433 static int kvm_arch_vcpu_ioctl_set_initial_psw(struct kvm_vcpu *vcpu, psw_t psw)
434 {
435 	int rc = 0;
436 
437 	if (!(atomic_read(&vcpu->arch.sie_block->cpuflags) & CPUSTAT_STOPPED))
438 		rc = -EBUSY;
439 	else {
440 		vcpu->run->psw_mask = psw.mask;
441 		vcpu->run->psw_addr = psw.addr;
442 	}
443 	return rc;
444 }
445 
446 int kvm_arch_vcpu_ioctl_translate(struct kvm_vcpu *vcpu,
447 				  struct kvm_translation *tr)
448 {
449 	return -EINVAL; /* not implemented yet */
450 }
451 
452 int kvm_arch_vcpu_ioctl_set_guest_debug(struct kvm_vcpu *vcpu,
453 					struct kvm_guest_debug *dbg)
454 {
455 	return -EINVAL; /* not implemented yet */
456 }
457 
458 int kvm_arch_vcpu_ioctl_get_mpstate(struct kvm_vcpu *vcpu,
459 				    struct kvm_mp_state *mp_state)
460 {
461 	return -EINVAL; /* not implemented yet */
462 }
463 
464 int kvm_arch_vcpu_ioctl_set_mpstate(struct kvm_vcpu *vcpu,
465 				    struct kvm_mp_state *mp_state)
466 {
467 	return -EINVAL; /* not implemented yet */
468 }
469 
470 static void __vcpu_run(struct kvm_vcpu *vcpu)
471 {
472 	memcpy(&vcpu->arch.sie_block->gg14, &vcpu->arch.guest_gprs[14], 16);
473 
474 	if (need_resched())
475 		schedule();
476 
477 	if (test_thread_flag(TIF_MCCK_PENDING))
478 		s390_handle_mcck();
479 
480 	kvm_s390_deliver_pending_interrupts(vcpu);
481 
482 	vcpu->arch.sie_block->icptcode = 0;
483 	local_irq_disable();
484 	kvm_guest_enter();
485 	local_irq_enable();
486 	VCPU_EVENT(vcpu, 6, "entering sie flags %x",
487 		   atomic_read(&vcpu->arch.sie_block->cpuflags));
488 	if (sie64a(vcpu->arch.sie_block, vcpu->arch.guest_gprs)) {
489 		VCPU_EVENT(vcpu, 3, "%s", "fault in sie instruction");
490 		kvm_s390_inject_program_int(vcpu, PGM_ADDRESSING);
491 	}
492 	VCPU_EVENT(vcpu, 6, "exit sie icptcode %d",
493 		   vcpu->arch.sie_block->icptcode);
494 	local_irq_disable();
495 	kvm_guest_exit();
496 	local_irq_enable();
497 
498 	memcpy(&vcpu->arch.guest_gprs[14], &vcpu->arch.sie_block->gg14, 16);
499 }
500 
501 int kvm_arch_vcpu_ioctl_run(struct kvm_vcpu *vcpu, struct kvm_run *kvm_run)
502 {
503 	int rc;
504 	sigset_t sigsaved;
505 
506 rerun_vcpu:
507 	if (vcpu->sigset_active)
508 		sigprocmask(SIG_SETMASK, &vcpu->sigset, &sigsaved);
509 
510 	atomic_clear_mask(CPUSTAT_STOPPED, &vcpu->arch.sie_block->cpuflags);
511 
512 	BUG_ON(vcpu->kvm->arch.float_int.local_int[vcpu->vcpu_id] == NULL);
513 
514 	switch (kvm_run->exit_reason) {
515 	case KVM_EXIT_S390_SIEIC:
516 	case KVM_EXIT_UNKNOWN:
517 	case KVM_EXIT_INTR:
518 	case KVM_EXIT_S390_RESET:
519 		break;
520 	default:
521 		BUG();
522 	}
523 
524 	vcpu->arch.sie_block->gpsw.mask = kvm_run->psw_mask;
525 	vcpu->arch.sie_block->gpsw.addr = kvm_run->psw_addr;
526 
527 	might_fault();
528 
529 	do {
530 		__vcpu_run(vcpu);
531 		rc = kvm_handle_sie_intercept(vcpu);
532 	} while (!signal_pending(current) && !rc);
533 
534 	if (rc == SIE_INTERCEPT_RERUNVCPU)
535 		goto rerun_vcpu;
536 
537 	if (signal_pending(current) && !rc) {
538 		kvm_run->exit_reason = KVM_EXIT_INTR;
539 		rc = -EINTR;
540 	}
541 
542 	if (rc == -EOPNOTSUPP) {
543 		/* intercept cannot be handled in-kernel, prepare kvm-run */
544 		kvm_run->exit_reason         = KVM_EXIT_S390_SIEIC;
545 		kvm_run->s390_sieic.icptcode = vcpu->arch.sie_block->icptcode;
546 		kvm_run->s390_sieic.ipa      = vcpu->arch.sie_block->ipa;
547 		kvm_run->s390_sieic.ipb      = vcpu->arch.sie_block->ipb;
548 		rc = 0;
549 	}
550 
551 	if (rc == -EREMOTE) {
552 		/* intercept was handled, but userspace support is needed
553 		 * kvm_run has been prepared by the handler */
554 		rc = 0;
555 	}
556 
557 	kvm_run->psw_mask     = vcpu->arch.sie_block->gpsw.mask;
558 	kvm_run->psw_addr     = vcpu->arch.sie_block->gpsw.addr;
559 
560 	if (vcpu->sigset_active)
561 		sigprocmask(SIG_SETMASK, &sigsaved, NULL);
562 
563 	vcpu->stat.exit_userspace++;
564 	return rc;
565 }
566 
567 static int __guestcopy(struct kvm_vcpu *vcpu, u64 guestdest, void *from,
568 		       unsigned long n, int prefix)
569 {
570 	if (prefix)
571 		return copy_to_guest(vcpu, guestdest, from, n);
572 	else
573 		return copy_to_guest_absolute(vcpu, guestdest, from, n);
574 }
575 
576 /*
577  * store status at address
578  * we use have two special cases:
579  * KVM_S390_STORE_STATUS_NOADDR: -> 0x1200 on 64 bit
580  * KVM_S390_STORE_STATUS_PREFIXED: -> prefix
581  */
582 int kvm_s390_vcpu_store_status(struct kvm_vcpu *vcpu, unsigned long addr)
583 {
584 	unsigned char archmode = 1;
585 	int prefix;
586 
587 	if (addr == KVM_S390_STORE_STATUS_NOADDR) {
588 		if (copy_to_guest_absolute(vcpu, 163ul, &archmode, 1))
589 			return -EFAULT;
590 		addr = SAVE_AREA_BASE;
591 		prefix = 0;
592 	} else if (addr == KVM_S390_STORE_STATUS_PREFIXED) {
593 		if (copy_to_guest(vcpu, 163ul, &archmode, 1))
594 			return -EFAULT;
595 		addr = SAVE_AREA_BASE;
596 		prefix = 1;
597 	} else
598 		prefix = 0;
599 
600 	if (__guestcopy(vcpu, addr + offsetof(struct save_area, fp_regs),
601 			vcpu->arch.guest_fpregs.fprs, 128, prefix))
602 		return -EFAULT;
603 
604 	if (__guestcopy(vcpu, addr + offsetof(struct save_area, gp_regs),
605 			vcpu->arch.guest_gprs, 128, prefix))
606 		return -EFAULT;
607 
608 	if (__guestcopy(vcpu, addr + offsetof(struct save_area, psw),
609 			&vcpu->arch.sie_block->gpsw, 16, prefix))
610 		return -EFAULT;
611 
612 	if (__guestcopy(vcpu, addr + offsetof(struct save_area, pref_reg),
613 			&vcpu->arch.sie_block->prefix, 4, prefix))
614 		return -EFAULT;
615 
616 	if (__guestcopy(vcpu,
617 			addr + offsetof(struct save_area, fp_ctrl_reg),
618 			&vcpu->arch.guest_fpregs.fpc, 4, prefix))
619 		return -EFAULT;
620 
621 	if (__guestcopy(vcpu, addr + offsetof(struct save_area, tod_reg),
622 			&vcpu->arch.sie_block->todpr, 4, prefix))
623 		return -EFAULT;
624 
625 	if (__guestcopy(vcpu, addr + offsetof(struct save_area, timer),
626 			&vcpu->arch.sie_block->cputm, 8, prefix))
627 		return -EFAULT;
628 
629 	if (__guestcopy(vcpu, addr + offsetof(struct save_area, clk_cmp),
630 			&vcpu->arch.sie_block->ckc, 8, prefix))
631 		return -EFAULT;
632 
633 	if (__guestcopy(vcpu, addr + offsetof(struct save_area, acc_regs),
634 			&vcpu->arch.guest_acrs, 64, prefix))
635 		return -EFAULT;
636 
637 	if (__guestcopy(vcpu,
638 			addr + offsetof(struct save_area, ctrl_regs),
639 			&vcpu->arch.sie_block->gcr, 128, prefix))
640 		return -EFAULT;
641 	return 0;
642 }
643 
644 long kvm_arch_vcpu_ioctl(struct file *filp,
645 			 unsigned int ioctl, unsigned long arg)
646 {
647 	struct kvm_vcpu *vcpu = filp->private_data;
648 	void __user *argp = (void __user *)arg;
649 	long r;
650 
651 	switch (ioctl) {
652 	case KVM_S390_INTERRUPT: {
653 		struct kvm_s390_interrupt s390int;
654 
655 		r = -EFAULT;
656 		if (copy_from_user(&s390int, argp, sizeof(s390int)))
657 			break;
658 		r = kvm_s390_inject_vcpu(vcpu, &s390int);
659 		break;
660 	}
661 	case KVM_S390_STORE_STATUS:
662 		r = kvm_s390_vcpu_store_status(vcpu, arg);
663 		break;
664 	case KVM_S390_SET_INITIAL_PSW: {
665 		psw_t psw;
666 
667 		r = -EFAULT;
668 		if (copy_from_user(&psw, argp, sizeof(psw)))
669 			break;
670 		r = kvm_arch_vcpu_ioctl_set_initial_psw(vcpu, psw);
671 		break;
672 	}
673 	case KVM_S390_INITIAL_RESET:
674 		r = kvm_arch_vcpu_ioctl_initial_reset(vcpu);
675 		break;
676 	default:
677 		r = -EINVAL;
678 	}
679 	return r;
680 }
681 
682 /* Section: memory related */
683 int kvm_arch_prepare_memory_region(struct kvm *kvm,
684 				   struct kvm_memory_slot *memslot,
685 				   struct kvm_memory_slot old,
686 				   struct kvm_userspace_memory_region *mem,
687 				   int user_alloc)
688 {
689 	/* A few sanity checks. We can have exactly one memory slot which has
690 	   to start at guest virtual zero and which has to be located at a
691 	   page boundary in userland and which has to end at a page boundary.
692 	   The memory in userland is ok to be fragmented into various different
693 	   vmas. It is okay to mmap() and munmap() stuff in this slot after
694 	   doing this call at any time */
695 
696 	if (mem->slot)
697 		return -EINVAL;
698 
699 	if (mem->guest_phys_addr)
700 		return -EINVAL;
701 
702 	if (mem->userspace_addr & 0xffffful)
703 		return -EINVAL;
704 
705 	if (mem->memory_size & 0xffffful)
706 		return -EINVAL;
707 
708 	if (!user_alloc)
709 		return -EINVAL;
710 
711 	return 0;
712 }
713 
714 void kvm_arch_commit_memory_region(struct kvm *kvm,
715 				struct kvm_userspace_memory_region *mem,
716 				struct kvm_memory_slot old,
717 				int user_alloc)
718 {
719 	int rc;
720 
721 
722 	rc = gmap_map_segment(kvm->arch.gmap, mem->userspace_addr,
723 		mem->guest_phys_addr, mem->memory_size);
724 	if (rc)
725 		printk(KERN_WARNING "kvm-s390: failed to commit memory region\n");
726 	return;
727 }
728 
729 void kvm_arch_flush_shadow(struct kvm *kvm)
730 {
731 }
732 
733 static int __init kvm_s390_init(void)
734 {
735 	int ret;
736 	ret = kvm_init(NULL, sizeof(struct kvm_vcpu), 0, THIS_MODULE);
737 	if (ret)
738 		return ret;
739 
740 	/*
741 	 * guests can ask for up to 255+1 double words, we need a full page
742 	 * to hold the maximum amount of facilities. On the other hand, we
743 	 * only set facilities that are known to work in KVM.
744 	 */
745 	facilities = (unsigned long long *) get_zeroed_page(GFP_KERNEL|GFP_DMA);
746 	if (!facilities) {
747 		kvm_exit();
748 		return -ENOMEM;
749 	}
750 	memcpy(facilities, S390_lowcore.stfle_fac_list, 16);
751 	facilities[0] &= 0xff00fff3f47c0000ULL;
752 	facilities[1] &= 0x201c000000000000ULL;
753 	return 0;
754 }
755 
756 static void __exit kvm_s390_exit(void)
757 {
758 	free_page((unsigned long) facilities);
759 	kvm_exit();
760 }
761 
762 module_init(kvm_s390_init);
763 module_exit(kvm_s390_exit);
764