2 * hosting zSeries kernel virtual machines
4 * Copyright IBM Corp. 2008, 2009
6 * This program is free software; you can redistribute it and/or modify
7 * it under the terms of the GNU General Public License (version 2 only)
8 * as published by the Free Software Foundation.
10 * Author(s): Carsten Otte <cotte@de.ibm.com>
11 * Christian Borntraeger <borntraeger@de.ibm.com>
12 * Heiko Carstens <heiko.carstens@de.ibm.com>
13 * Christian Ehrhardt <ehrhardt@de.ibm.com>
16 #include <linux/compiler.h>
17 #include <linux/err.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>
30 #include <asm/switch_to.h>
35 #define CREATE_TRACE_POINTS
37 #include "trace-s390.h"
39 #define VCPU_STAT(x) offsetof(struct kvm_vcpu, stat.x), KVM_STAT_VCPU
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
) },
86 static unsigned long long *facilities
;
87 static struct gmap_notifier gmap_notifier
;
89 /* Section: not file related */
90 int kvm_arch_hardware_enable(void *garbage
)
92 /* every s390 is virtualization enabled ;-) */
96 void kvm_arch_hardware_disable(void *garbage
)
100 static void kvm_gmap_notifier(struct gmap
*gmap
, unsigned long address
);
102 int kvm_arch_hardware_setup(void)
104 gmap_notifier
.notifier_call
= kvm_gmap_notifier
;
105 gmap_register_ipte_notifier(&gmap_notifier
);
109 void kvm_arch_hardware_unsetup(void)
111 gmap_unregister_ipte_notifier(&gmap_notifier
);
114 void kvm_arch_check_processor_compat(void *rtn
)
118 int kvm_arch_init(void *opaque
)
123 void kvm_arch_exit(void)
127 /* Section: device related */
128 long kvm_arch_dev_ioctl(struct file
*filp
,
129 unsigned int ioctl
, unsigned long arg
)
131 if (ioctl
== KVM_S390_ENABLE_SIE
)
132 return s390_enable_sie();
136 int kvm_dev_ioctl_check_extension(long ext
)
141 case KVM_CAP_S390_PSW
:
142 case KVM_CAP_S390_GMAP
:
143 case KVM_CAP_SYNC_MMU
:
144 #ifdef CONFIG_KVM_S390_UCONTROL
145 case KVM_CAP_S390_UCONTROL
:
147 case KVM_CAP_SYNC_REGS
:
148 case KVM_CAP_ONE_REG
:
149 case KVM_CAP_ENABLE_CAP
:
150 case KVM_CAP_S390_CSS_SUPPORT
:
151 case KVM_CAP_IOEVENTFD
:
154 case KVM_CAP_NR_VCPUS
:
155 case KVM_CAP_MAX_VCPUS
:
158 case KVM_CAP_NR_MEMSLOTS
:
159 r
= KVM_USER_MEM_SLOTS
;
161 case KVM_CAP_S390_COW
:
162 r
= MACHINE_HAS_ESOP
;
170 /* Section: vm related */
172 * Get (and clear) the dirty memory log for a memory slot.
174 int kvm_vm_ioctl_get_dirty_log(struct kvm
*kvm
,
175 struct kvm_dirty_log
*log
)
180 long kvm_arch_vm_ioctl(struct file
*filp
,
181 unsigned int ioctl
, unsigned long arg
)
183 struct kvm
*kvm
= filp
->private_data
;
184 void __user
*argp
= (void __user
*)arg
;
188 case KVM_S390_INTERRUPT
: {
189 struct kvm_s390_interrupt s390int
;
192 if (copy_from_user(&s390int
, argp
, sizeof(s390int
)))
194 r
= kvm_s390_inject_vm(kvm
, &s390int
);
204 int kvm_arch_init_vm(struct kvm
*kvm
, unsigned long type
)
210 #ifdef CONFIG_KVM_S390_UCONTROL
211 if (type
& ~KVM_VM_S390_UCONTROL
)
213 if ((type
& KVM_VM_S390_UCONTROL
) && (!capable(CAP_SYS_ADMIN
)))
220 rc
= s390_enable_sie();
226 kvm
->arch
.sca
= (struct sca_block
*) get_zeroed_page(GFP_KERNEL
);
230 sprintf(debug_name
, "kvm-%u", current
->pid
);
232 kvm
->arch
.dbf
= debug_register(debug_name
, 8, 2, 8 * sizeof(long));
236 spin_lock_init(&kvm
->arch
.float_int
.lock
);
237 INIT_LIST_HEAD(&kvm
->arch
.float_int
.list
);
239 debug_register_view(kvm
->arch
.dbf
, &debug_sprintf_view
);
240 VM_EVENT(kvm
, 3, "%s", "vm created");
242 if (type
& KVM_VM_S390_UCONTROL
) {
243 kvm
->arch
.gmap
= NULL
;
245 kvm
->arch
.gmap
= gmap_alloc(current
->mm
);
248 kvm
->arch
.gmap
->private = kvm
;
251 kvm
->arch
.css_support
= 0;
255 debug_unregister(kvm
->arch
.dbf
);
257 free_page((unsigned long)(kvm
->arch
.sca
));
262 void kvm_arch_vcpu_destroy(struct kvm_vcpu
*vcpu
)
264 VCPU_EVENT(vcpu
, 3, "%s", "free cpu");
265 trace_kvm_s390_destroy_vcpu(vcpu
->vcpu_id
);
266 if (!kvm_is_ucontrol(vcpu
->kvm
)) {
267 clear_bit(63 - vcpu
->vcpu_id
,
268 (unsigned long *) &vcpu
->kvm
->arch
.sca
->mcn
);
269 if (vcpu
->kvm
->arch
.sca
->cpu
[vcpu
->vcpu_id
].sda
==
270 (__u64
) vcpu
->arch
.sie_block
)
271 vcpu
->kvm
->arch
.sca
->cpu
[vcpu
->vcpu_id
].sda
= 0;
275 if (kvm_is_ucontrol(vcpu
->kvm
))
276 gmap_free(vcpu
->arch
.gmap
);
278 free_page((unsigned long)(vcpu
->arch
.sie_block
));
279 kvm_vcpu_uninit(vcpu
);
283 static void kvm_free_vcpus(struct kvm
*kvm
)
286 struct kvm_vcpu
*vcpu
;
288 kvm_for_each_vcpu(i
, vcpu
, kvm
)
289 kvm_arch_vcpu_destroy(vcpu
);
291 mutex_lock(&kvm
->lock
);
292 for (i
= 0; i
< atomic_read(&kvm
->online_vcpus
); i
++)
293 kvm
->vcpus
[i
] = NULL
;
295 atomic_set(&kvm
->online_vcpus
, 0);
296 mutex_unlock(&kvm
->lock
);
299 void kvm_arch_sync_events(struct kvm
*kvm
)
303 void kvm_arch_destroy_vm(struct kvm
*kvm
)
306 free_page((unsigned long)(kvm
->arch
.sca
));
307 debug_unregister(kvm
->arch
.dbf
);
308 if (!kvm_is_ucontrol(kvm
))
309 gmap_free(kvm
->arch
.gmap
);
312 /* Section: vcpu related */
313 int kvm_arch_vcpu_init(struct kvm_vcpu
*vcpu
)
315 if (kvm_is_ucontrol(vcpu
->kvm
)) {
316 vcpu
->arch
.gmap
= gmap_alloc(current
->mm
);
317 if (!vcpu
->arch
.gmap
)
319 vcpu
->arch
.gmap
->private = vcpu
->kvm
;
323 vcpu
->arch
.gmap
= vcpu
->kvm
->arch
.gmap
;
324 vcpu
->run
->kvm_valid_regs
= KVM_SYNC_PREFIX
|
331 void kvm_arch_vcpu_uninit(struct kvm_vcpu
*vcpu
)
336 void kvm_arch_vcpu_load(struct kvm_vcpu
*vcpu
, int cpu
)
338 save_fp_regs(&vcpu
->arch
.host_fpregs
);
339 save_access_regs(vcpu
->arch
.host_acrs
);
340 vcpu
->arch
.guest_fpregs
.fpc
&= FPC_VALID_MASK
;
341 restore_fp_regs(&vcpu
->arch
.guest_fpregs
);
342 restore_access_regs(vcpu
->run
->s
.regs
.acrs
);
343 gmap_enable(vcpu
->arch
.gmap
);
344 atomic_set_mask(CPUSTAT_RUNNING
, &vcpu
->arch
.sie_block
->cpuflags
);
347 void kvm_arch_vcpu_put(struct kvm_vcpu
*vcpu
)
349 atomic_clear_mask(CPUSTAT_RUNNING
, &vcpu
->arch
.sie_block
->cpuflags
);
350 gmap_disable(vcpu
->arch
.gmap
);
351 save_fp_regs(&vcpu
->arch
.guest_fpregs
);
352 save_access_regs(vcpu
->run
->s
.regs
.acrs
);
353 restore_fp_regs(&vcpu
->arch
.host_fpregs
);
354 restore_access_regs(vcpu
->arch
.host_acrs
);
357 static void kvm_s390_vcpu_initial_reset(struct kvm_vcpu
*vcpu
)
359 /* this equals initial cpu reset in pop, but we don't switch to ESA */
360 vcpu
->arch
.sie_block
->gpsw
.mask
= 0UL;
361 vcpu
->arch
.sie_block
->gpsw
.addr
= 0UL;
362 kvm_s390_set_prefix(vcpu
, 0);
363 vcpu
->arch
.sie_block
->cputm
= 0UL;
364 vcpu
->arch
.sie_block
->ckc
= 0UL;
365 vcpu
->arch
.sie_block
->todpr
= 0;
366 memset(vcpu
->arch
.sie_block
->gcr
, 0, 16 * sizeof(__u64
));
367 vcpu
->arch
.sie_block
->gcr
[0] = 0xE0UL
;
368 vcpu
->arch
.sie_block
->gcr
[14] = 0xC2000000UL
;
369 vcpu
->arch
.guest_fpregs
.fpc
= 0;
370 asm volatile("lfpc %0" : : "Q" (vcpu
->arch
.guest_fpregs
.fpc
));
371 vcpu
->arch
.sie_block
->gbea
= 1;
372 atomic_set_mask(CPUSTAT_STOPPED
, &vcpu
->arch
.sie_block
->cpuflags
);
375 int kvm_arch_vcpu_postcreate(struct kvm_vcpu
*vcpu
)
380 int kvm_arch_vcpu_setup(struct kvm_vcpu
*vcpu
)
382 atomic_set(&vcpu
->arch
.sie_block
->cpuflags
, CPUSTAT_ZARCH
|
385 vcpu
->arch
.sie_block
->ecb
= 6;
386 vcpu
->arch
.sie_block
->eca
= 0xC1002001U
;
387 vcpu
->arch
.sie_block
->fac
= (int) (long) facilities
;
388 hrtimer_init(&vcpu
->arch
.ckc_timer
, CLOCK_REALTIME
, HRTIMER_MODE_ABS
);
389 tasklet_init(&vcpu
->arch
.tasklet
, kvm_s390_tasklet
,
390 (unsigned long) vcpu
);
391 vcpu
->arch
.ckc_timer
.function
= kvm_s390_idle_wakeup
;
392 get_cpu_id(&vcpu
->arch
.cpu_id
);
393 vcpu
->arch
.cpu_id
.version
= 0xff;
397 struct kvm_vcpu
*kvm_arch_vcpu_create(struct kvm
*kvm
,
400 struct kvm_vcpu
*vcpu
;
403 if (id
>= KVM_MAX_VCPUS
)
408 vcpu
= kzalloc(sizeof(struct kvm_vcpu
), GFP_KERNEL
);
412 vcpu
->arch
.sie_block
= (struct kvm_s390_sie_block
*)
413 get_zeroed_page(GFP_KERNEL
);
415 if (!vcpu
->arch
.sie_block
)
418 vcpu
->arch
.sie_block
->icpua
= id
;
419 if (!kvm_is_ucontrol(kvm
)) {
420 if (!kvm
->arch
.sca
) {
424 if (!kvm
->arch
.sca
->cpu
[id
].sda
)
425 kvm
->arch
.sca
->cpu
[id
].sda
=
426 (__u64
) vcpu
->arch
.sie_block
;
427 vcpu
->arch
.sie_block
->scaoh
=
428 (__u32
)(((__u64
)kvm
->arch
.sca
) >> 32);
429 vcpu
->arch
.sie_block
->scaol
= (__u32
)(__u64
)kvm
->arch
.sca
;
430 set_bit(63 - id
, (unsigned long *) &kvm
->arch
.sca
->mcn
);
433 spin_lock_init(&vcpu
->arch
.local_int
.lock
);
434 INIT_LIST_HEAD(&vcpu
->arch
.local_int
.list
);
435 vcpu
->arch
.local_int
.float_int
= &kvm
->arch
.float_int
;
436 spin_lock(&kvm
->arch
.float_int
.lock
);
437 kvm
->arch
.float_int
.local_int
[id
] = &vcpu
->arch
.local_int
;
438 init_waitqueue_head(&vcpu
->arch
.local_int
.wq
);
439 vcpu
->arch
.local_int
.cpuflags
= &vcpu
->arch
.sie_block
->cpuflags
;
440 spin_unlock(&kvm
->arch
.float_int
.lock
);
442 rc
= kvm_vcpu_init(vcpu
, kvm
, id
);
444 goto out_free_sie_block
;
445 VM_EVENT(kvm
, 3, "create cpu %d at %p, sie block at %p", id
, vcpu
,
446 vcpu
->arch
.sie_block
);
447 trace_kvm_s390_create_vcpu(id
, vcpu
, vcpu
->arch
.sie_block
);
451 free_page((unsigned long)(vcpu
->arch
.sie_block
));
458 int kvm_arch_vcpu_runnable(struct kvm_vcpu
*vcpu
)
460 /* kvm common code refers to this, but never calls it */
465 void s390_vcpu_block(struct kvm_vcpu
*vcpu
)
467 atomic_set_mask(PROG_BLOCK_SIE
, &vcpu
->arch
.sie_block
->prog20
);
470 void s390_vcpu_unblock(struct kvm_vcpu
*vcpu
)
472 atomic_clear_mask(PROG_BLOCK_SIE
, &vcpu
->arch
.sie_block
->prog20
);
476 * Kick a guest cpu out of SIE and wait until SIE is not running.
477 * If the CPU is not running (e.g. waiting as idle) the function will
478 * return immediately. */
479 void exit_sie(struct kvm_vcpu
*vcpu
)
481 atomic_set_mask(CPUSTAT_STOP_INT
, &vcpu
->arch
.sie_block
->cpuflags
);
482 while (vcpu
->arch
.sie_block
->prog0c
& PROG_IN_SIE
)
486 /* Kick a guest cpu out of SIE and prevent SIE-reentry */
487 void exit_sie_sync(struct kvm_vcpu
*vcpu
)
489 s390_vcpu_block(vcpu
);
493 static void kvm_gmap_notifier(struct gmap
*gmap
, unsigned long address
)
496 struct kvm
*kvm
= gmap
->private;
497 struct kvm_vcpu
*vcpu
;
499 kvm_for_each_vcpu(i
, vcpu
, kvm
) {
500 /* match against both prefix pages */
501 if (vcpu
->arch
.sie_block
->prefix
== (address
& ~0x1000UL
)) {
502 VCPU_EVENT(vcpu
, 2, "gmap notifier for %lx", address
);
503 kvm_make_request(KVM_REQ_MMU_RELOAD
, vcpu
);
509 int kvm_arch_vcpu_should_kick(struct kvm_vcpu
*vcpu
)
511 /* kvm common code refers to this, but never calls it */
516 static int kvm_arch_vcpu_ioctl_get_one_reg(struct kvm_vcpu
*vcpu
,
517 struct kvm_one_reg
*reg
)
522 case KVM_REG_S390_TODPR
:
523 r
= put_user(vcpu
->arch
.sie_block
->todpr
,
524 (u32 __user
*)reg
->addr
);
526 case KVM_REG_S390_EPOCHDIFF
:
527 r
= put_user(vcpu
->arch
.sie_block
->epoch
,
528 (u64 __user
*)reg
->addr
);
530 case KVM_REG_S390_CPU_TIMER
:
531 r
= put_user(vcpu
->arch
.sie_block
->cputm
,
532 (u64 __user
*)reg
->addr
);
534 case KVM_REG_S390_CLOCK_COMP
:
535 r
= put_user(vcpu
->arch
.sie_block
->ckc
,
536 (u64 __user
*)reg
->addr
);
545 static int kvm_arch_vcpu_ioctl_set_one_reg(struct kvm_vcpu
*vcpu
,
546 struct kvm_one_reg
*reg
)
551 case KVM_REG_S390_TODPR
:
552 r
= get_user(vcpu
->arch
.sie_block
->todpr
,
553 (u32 __user
*)reg
->addr
);
555 case KVM_REG_S390_EPOCHDIFF
:
556 r
= get_user(vcpu
->arch
.sie_block
->epoch
,
557 (u64 __user
*)reg
->addr
);
559 case KVM_REG_S390_CPU_TIMER
:
560 r
= get_user(vcpu
->arch
.sie_block
->cputm
,
561 (u64 __user
*)reg
->addr
);
563 case KVM_REG_S390_CLOCK_COMP
:
564 r
= get_user(vcpu
->arch
.sie_block
->ckc
,
565 (u64 __user
*)reg
->addr
);
574 static int kvm_arch_vcpu_ioctl_initial_reset(struct kvm_vcpu
*vcpu
)
576 kvm_s390_vcpu_initial_reset(vcpu
);
580 int kvm_arch_vcpu_ioctl_set_regs(struct kvm_vcpu
*vcpu
, struct kvm_regs
*regs
)
582 memcpy(&vcpu
->run
->s
.regs
.gprs
, ®s
->gprs
, sizeof(regs
->gprs
));
586 int kvm_arch_vcpu_ioctl_get_regs(struct kvm_vcpu
*vcpu
, struct kvm_regs
*regs
)
588 memcpy(®s
->gprs
, &vcpu
->run
->s
.regs
.gprs
, sizeof(regs
->gprs
));
592 int kvm_arch_vcpu_ioctl_set_sregs(struct kvm_vcpu
*vcpu
,
593 struct kvm_sregs
*sregs
)
595 memcpy(&vcpu
->run
->s
.regs
.acrs
, &sregs
->acrs
, sizeof(sregs
->acrs
));
596 memcpy(&vcpu
->arch
.sie_block
->gcr
, &sregs
->crs
, sizeof(sregs
->crs
));
597 restore_access_regs(vcpu
->run
->s
.regs
.acrs
);
601 int kvm_arch_vcpu_ioctl_get_sregs(struct kvm_vcpu
*vcpu
,
602 struct kvm_sregs
*sregs
)
604 memcpy(&sregs
->acrs
, &vcpu
->run
->s
.regs
.acrs
, sizeof(sregs
->acrs
));
605 memcpy(&sregs
->crs
, &vcpu
->arch
.sie_block
->gcr
, sizeof(sregs
->crs
));
609 int kvm_arch_vcpu_ioctl_set_fpu(struct kvm_vcpu
*vcpu
, struct kvm_fpu
*fpu
)
611 memcpy(&vcpu
->arch
.guest_fpregs
.fprs
, &fpu
->fprs
, sizeof(fpu
->fprs
));
612 vcpu
->arch
.guest_fpregs
.fpc
= fpu
->fpc
& FPC_VALID_MASK
;
613 restore_fp_regs(&vcpu
->arch
.guest_fpregs
);
617 int kvm_arch_vcpu_ioctl_get_fpu(struct kvm_vcpu
*vcpu
, struct kvm_fpu
*fpu
)
619 memcpy(&fpu
->fprs
, &vcpu
->arch
.guest_fpregs
.fprs
, sizeof(fpu
->fprs
));
620 fpu
->fpc
= vcpu
->arch
.guest_fpregs
.fpc
;
624 static int kvm_arch_vcpu_ioctl_set_initial_psw(struct kvm_vcpu
*vcpu
, psw_t psw
)
628 if (!(atomic_read(&vcpu
->arch
.sie_block
->cpuflags
) & CPUSTAT_STOPPED
))
631 vcpu
->run
->psw_mask
= psw
.mask
;
632 vcpu
->run
->psw_addr
= psw
.addr
;
637 int kvm_arch_vcpu_ioctl_translate(struct kvm_vcpu
*vcpu
,
638 struct kvm_translation
*tr
)
640 return -EINVAL
; /* not implemented yet */
643 int kvm_arch_vcpu_ioctl_set_guest_debug(struct kvm_vcpu
*vcpu
,
644 struct kvm_guest_debug
*dbg
)
646 return -EINVAL
; /* not implemented yet */
649 int kvm_arch_vcpu_ioctl_get_mpstate(struct kvm_vcpu
*vcpu
,
650 struct kvm_mp_state
*mp_state
)
652 return -EINVAL
; /* not implemented yet */
655 int kvm_arch_vcpu_ioctl_set_mpstate(struct kvm_vcpu
*vcpu
,
656 struct kvm_mp_state
*mp_state
)
658 return -EINVAL
; /* not implemented yet */
661 static int kvm_s390_handle_requests(struct kvm_vcpu
*vcpu
)
664 * We use MMU_RELOAD just to re-arm the ipte notifier for the
665 * guest prefix page. gmap_ipte_notify will wait on the ptl lock.
666 * This ensures that the ipte instruction for this request has
667 * already finished. We might race against a second unmapper that
668 * wants to set the blocking bit. Lets just retry the request loop.
670 while (kvm_check_request(KVM_REQ_MMU_RELOAD
, vcpu
)) {
672 rc
= gmap_ipte_notify(vcpu
->arch
.gmap
,
673 vcpu
->arch
.sie_block
->prefix
,
677 s390_vcpu_unblock(vcpu
);
682 static int __vcpu_run(struct kvm_vcpu
*vcpu
)
686 memcpy(&vcpu
->arch
.sie_block
->gg14
, &vcpu
->run
->s
.regs
.gprs
[14], 16);
691 if (test_thread_flag(TIF_MCCK_PENDING
))
694 if (!kvm_is_ucontrol(vcpu
->kvm
))
695 kvm_s390_deliver_pending_interrupts(vcpu
);
697 rc
= kvm_s390_handle_requests(vcpu
);
701 vcpu
->arch
.sie_block
->icptcode
= 0;
705 VCPU_EVENT(vcpu
, 6, "entering sie flags %x",
706 atomic_read(&vcpu
->arch
.sie_block
->cpuflags
));
707 trace_kvm_s390_sie_enter(vcpu
,
708 atomic_read(&vcpu
->arch
.sie_block
->cpuflags
));
709 rc
= sie64a(vcpu
->arch
.sie_block
, vcpu
->run
->s
.regs
.gprs
);
711 if (kvm_is_ucontrol(vcpu
->kvm
)) {
712 rc
= SIE_INTERCEPT_UCONTROL
;
714 VCPU_EVENT(vcpu
, 3, "%s", "fault in sie instruction");
715 trace_kvm_s390_sie_fault(vcpu
);
716 rc
= kvm_s390_inject_program_int(vcpu
, PGM_ADDRESSING
);
719 VCPU_EVENT(vcpu
, 6, "exit sie icptcode %d",
720 vcpu
->arch
.sie_block
->icptcode
);
721 trace_kvm_s390_sie_exit(vcpu
, vcpu
->arch
.sie_block
->icptcode
);
724 memcpy(&vcpu
->run
->s
.regs
.gprs
[14], &vcpu
->arch
.sie_block
->gg14
, 16);
728 int kvm_arch_vcpu_ioctl_run(struct kvm_vcpu
*vcpu
, struct kvm_run
*kvm_run
)
734 if (vcpu
->sigset_active
)
735 sigprocmask(SIG_SETMASK
, &vcpu
->sigset
, &sigsaved
);
737 atomic_clear_mask(CPUSTAT_STOPPED
, &vcpu
->arch
.sie_block
->cpuflags
);
739 BUG_ON(vcpu
->kvm
->arch
.float_int
.local_int
[vcpu
->vcpu_id
] == NULL
);
741 switch (kvm_run
->exit_reason
) {
742 case KVM_EXIT_S390_SIEIC
:
743 case KVM_EXIT_UNKNOWN
:
745 case KVM_EXIT_S390_RESET
:
746 case KVM_EXIT_S390_UCONTROL
:
747 case KVM_EXIT_S390_TSCH
:
753 vcpu
->arch
.sie_block
->gpsw
.mask
= kvm_run
->psw_mask
;
754 vcpu
->arch
.sie_block
->gpsw
.addr
= kvm_run
->psw_addr
;
755 if (kvm_run
->kvm_dirty_regs
& KVM_SYNC_PREFIX
) {
756 kvm_run
->kvm_dirty_regs
&= ~KVM_SYNC_PREFIX
;
757 kvm_s390_set_prefix(vcpu
, kvm_run
->s
.regs
.prefix
);
759 if (kvm_run
->kvm_dirty_regs
& KVM_SYNC_CRS
) {
760 kvm_run
->kvm_dirty_regs
&= ~KVM_SYNC_CRS
;
761 memcpy(&vcpu
->arch
.sie_block
->gcr
, &kvm_run
->s
.regs
.crs
, 128);
762 kvm_s390_set_prefix(vcpu
, kvm_run
->s
.regs
.prefix
);
768 rc
= __vcpu_run(vcpu
);
771 if (kvm_is_ucontrol(vcpu
->kvm
))
774 rc
= kvm_handle_sie_intercept(vcpu
);
775 } while (!signal_pending(current
) && !rc
);
777 if (rc
== SIE_INTERCEPT_RERUNVCPU
)
780 if (signal_pending(current
) && !rc
) {
781 kvm_run
->exit_reason
= KVM_EXIT_INTR
;
785 #ifdef CONFIG_KVM_S390_UCONTROL
786 if (rc
== SIE_INTERCEPT_UCONTROL
) {
787 kvm_run
->exit_reason
= KVM_EXIT_S390_UCONTROL
;
788 kvm_run
->s390_ucontrol
.trans_exc_code
=
789 current
->thread
.gmap_addr
;
790 kvm_run
->s390_ucontrol
.pgm_code
= 0x10;
795 if (rc
== -EOPNOTSUPP
) {
796 /* intercept cannot be handled in-kernel, prepare kvm-run */
797 kvm_run
->exit_reason
= KVM_EXIT_S390_SIEIC
;
798 kvm_run
->s390_sieic
.icptcode
= vcpu
->arch
.sie_block
->icptcode
;
799 kvm_run
->s390_sieic
.ipa
= vcpu
->arch
.sie_block
->ipa
;
800 kvm_run
->s390_sieic
.ipb
= vcpu
->arch
.sie_block
->ipb
;
804 if (rc
== -EREMOTE
) {
805 /* intercept was handled, but userspace support is needed
806 * kvm_run has been prepared by the handler */
810 kvm_run
->psw_mask
= vcpu
->arch
.sie_block
->gpsw
.mask
;
811 kvm_run
->psw_addr
= vcpu
->arch
.sie_block
->gpsw
.addr
;
812 kvm_run
->s
.regs
.prefix
= vcpu
->arch
.sie_block
->prefix
;
813 memcpy(&kvm_run
->s
.regs
.crs
, &vcpu
->arch
.sie_block
->gcr
, 128);
815 if (vcpu
->sigset_active
)
816 sigprocmask(SIG_SETMASK
, &sigsaved
, NULL
);
818 vcpu
->stat
.exit_userspace
++;
822 static int __guestcopy(struct kvm_vcpu
*vcpu
, u64 guestdest
, void *from
,
823 unsigned long n
, int prefix
)
826 return copy_to_guest(vcpu
, guestdest
, from
, n
);
828 return copy_to_guest_absolute(vcpu
, guestdest
, from
, n
);
832 * store status at address
833 * we use have two special cases:
834 * KVM_S390_STORE_STATUS_NOADDR: -> 0x1200 on 64 bit
835 * KVM_S390_STORE_STATUS_PREFIXED: -> prefix
837 int kvm_s390_vcpu_store_status(struct kvm_vcpu
*vcpu
, unsigned long addr
)
839 unsigned char archmode
= 1;
842 if (addr
== KVM_S390_STORE_STATUS_NOADDR
) {
843 if (copy_to_guest_absolute(vcpu
, 163ul, &archmode
, 1))
845 addr
= SAVE_AREA_BASE
;
847 } else if (addr
== KVM_S390_STORE_STATUS_PREFIXED
) {
848 if (copy_to_guest(vcpu
, 163ul, &archmode
, 1))
850 addr
= SAVE_AREA_BASE
;
856 * The guest FPRS and ACRS are in the host FPRS/ACRS due to the lazy
857 * copying in vcpu load/put. Lets update our copies before we save
858 * it into the save area
860 save_fp_regs(&vcpu
->arch
.guest_fpregs
);
861 save_access_regs(vcpu
->run
->s
.regs
.acrs
);
863 if (__guestcopy(vcpu
, addr
+ offsetof(struct save_area
, fp_regs
),
864 vcpu
->arch
.guest_fpregs
.fprs
, 128, prefix
))
867 if (__guestcopy(vcpu
, addr
+ offsetof(struct save_area
, gp_regs
),
868 vcpu
->run
->s
.regs
.gprs
, 128, prefix
))
871 if (__guestcopy(vcpu
, addr
+ offsetof(struct save_area
, psw
),
872 &vcpu
->arch
.sie_block
->gpsw
, 16, prefix
))
875 if (__guestcopy(vcpu
, addr
+ offsetof(struct save_area
, pref_reg
),
876 &vcpu
->arch
.sie_block
->prefix
, 4, prefix
))
879 if (__guestcopy(vcpu
,
880 addr
+ offsetof(struct save_area
, fp_ctrl_reg
),
881 &vcpu
->arch
.guest_fpregs
.fpc
, 4, prefix
))
884 if (__guestcopy(vcpu
, addr
+ offsetof(struct save_area
, tod_reg
),
885 &vcpu
->arch
.sie_block
->todpr
, 4, prefix
))
888 if (__guestcopy(vcpu
, addr
+ offsetof(struct save_area
, timer
),
889 &vcpu
->arch
.sie_block
->cputm
, 8, prefix
))
892 if (__guestcopy(vcpu
, addr
+ offsetof(struct save_area
, clk_cmp
),
893 &vcpu
->arch
.sie_block
->ckc
, 8, prefix
))
896 if (__guestcopy(vcpu
, addr
+ offsetof(struct save_area
, acc_regs
),
897 &vcpu
->run
->s
.regs
.acrs
, 64, prefix
))
900 if (__guestcopy(vcpu
,
901 addr
+ offsetof(struct save_area
, ctrl_regs
),
902 &vcpu
->arch
.sie_block
->gcr
, 128, prefix
))
907 static int kvm_vcpu_ioctl_enable_cap(struct kvm_vcpu
*vcpu
,
908 struct kvm_enable_cap
*cap
)
916 case KVM_CAP_S390_CSS_SUPPORT
:
917 if (!vcpu
->kvm
->arch
.css_support
) {
918 vcpu
->kvm
->arch
.css_support
= 1;
919 trace_kvm_s390_enable_css(vcpu
->kvm
);
930 long kvm_arch_vcpu_ioctl(struct file
*filp
,
931 unsigned int ioctl
, unsigned long arg
)
933 struct kvm_vcpu
*vcpu
= filp
->private_data
;
934 void __user
*argp
= (void __user
*)arg
;
938 case KVM_S390_INTERRUPT
: {
939 struct kvm_s390_interrupt s390int
;
942 if (copy_from_user(&s390int
, argp
, sizeof(s390int
)))
944 r
= kvm_s390_inject_vcpu(vcpu
, &s390int
);
947 case KVM_S390_STORE_STATUS
:
948 r
= kvm_s390_vcpu_store_status(vcpu
, arg
);
950 case KVM_S390_SET_INITIAL_PSW
: {
954 if (copy_from_user(&psw
, argp
, sizeof(psw
)))
956 r
= kvm_arch_vcpu_ioctl_set_initial_psw(vcpu
, psw
);
959 case KVM_S390_INITIAL_RESET
:
960 r
= kvm_arch_vcpu_ioctl_initial_reset(vcpu
);
962 case KVM_SET_ONE_REG
:
963 case KVM_GET_ONE_REG
: {
964 struct kvm_one_reg reg
;
966 if (copy_from_user(®
, argp
, sizeof(reg
)))
968 if (ioctl
== KVM_SET_ONE_REG
)
969 r
= kvm_arch_vcpu_ioctl_set_one_reg(vcpu
, ®
);
971 r
= kvm_arch_vcpu_ioctl_get_one_reg(vcpu
, ®
);
974 #ifdef CONFIG_KVM_S390_UCONTROL
975 case KVM_S390_UCAS_MAP
: {
976 struct kvm_s390_ucas_mapping ucasmap
;
978 if (copy_from_user(&ucasmap
, argp
, sizeof(ucasmap
))) {
983 if (!kvm_is_ucontrol(vcpu
->kvm
)) {
988 r
= gmap_map_segment(vcpu
->arch
.gmap
, ucasmap
.user_addr
,
989 ucasmap
.vcpu_addr
, ucasmap
.length
);
992 case KVM_S390_UCAS_UNMAP
: {
993 struct kvm_s390_ucas_mapping ucasmap
;
995 if (copy_from_user(&ucasmap
, argp
, sizeof(ucasmap
))) {
1000 if (!kvm_is_ucontrol(vcpu
->kvm
)) {
1005 r
= gmap_unmap_segment(vcpu
->arch
.gmap
, ucasmap
.vcpu_addr
,
1010 case KVM_S390_VCPU_FAULT
: {
1011 r
= gmap_fault(arg
, vcpu
->arch
.gmap
);
1012 if (!IS_ERR_VALUE(r
))
1016 case KVM_ENABLE_CAP
:
1018 struct kvm_enable_cap cap
;
1020 if (copy_from_user(&cap
, argp
, sizeof(cap
)))
1022 r
= kvm_vcpu_ioctl_enable_cap(vcpu
, &cap
);
1031 int kvm_arch_vcpu_fault(struct kvm_vcpu
*vcpu
, struct vm_fault
*vmf
)
1033 #ifdef CONFIG_KVM_S390_UCONTROL
1034 if ((vmf
->pgoff
== KVM_S390_SIE_PAGE_OFFSET
)
1035 && (kvm_is_ucontrol(vcpu
->kvm
))) {
1036 vmf
->page
= virt_to_page(vcpu
->arch
.sie_block
);
1037 get_page(vmf
->page
);
1041 return VM_FAULT_SIGBUS
;
1044 void kvm_arch_free_memslot(struct kvm_memory_slot
*free
,
1045 struct kvm_memory_slot
*dont
)
1049 int kvm_arch_create_memslot(struct kvm_memory_slot
*slot
, unsigned long npages
)
1054 /* Section: memory related */
1055 int kvm_arch_prepare_memory_region(struct kvm
*kvm
,
1056 struct kvm_memory_slot
*memslot
,
1057 struct kvm_userspace_memory_region
*mem
,
1058 enum kvm_mr_change change
)
1060 /* A few sanity checks. We can have memory slots which have to be
1061 located/ended at a segment boundary (1MB). The memory in userland is
1062 ok to be fragmented into various different vmas. It is okay to mmap()
1063 and munmap() stuff in this slot after doing this call at any time */
1065 if (mem
->userspace_addr
& 0xffffful
)
1068 if (mem
->memory_size
& 0xffffful
)
1074 void kvm_arch_commit_memory_region(struct kvm
*kvm
,
1075 struct kvm_userspace_memory_region
*mem
,
1076 const struct kvm_memory_slot
*old
,
1077 enum kvm_mr_change change
)
1081 /* If the basics of the memslot do not change, we do not want
1082 * to update the gmap. Every update causes several unnecessary
1083 * segment translation exceptions. This is usually handled just
1084 * fine by the normal fault handler + gmap, but it will also
1085 * cause faults on the prefix page of running guest CPUs.
1087 if (old
->userspace_addr
== mem
->userspace_addr
&&
1088 old
->base_gfn
* PAGE_SIZE
== mem
->guest_phys_addr
&&
1089 old
->npages
* PAGE_SIZE
== mem
->memory_size
)
1092 rc
= gmap_map_segment(kvm
->arch
.gmap
, mem
->userspace_addr
,
1093 mem
->guest_phys_addr
, mem
->memory_size
);
1095 printk(KERN_WARNING
"kvm-s390: failed to commit memory region\n");
1099 void kvm_arch_flush_shadow_all(struct kvm
*kvm
)
1103 void kvm_arch_flush_shadow_memslot(struct kvm
*kvm
,
1104 struct kvm_memory_slot
*slot
)
1108 static int __init
kvm_s390_init(void)
1111 ret
= kvm_init(NULL
, sizeof(struct kvm_vcpu
), 0, THIS_MODULE
);
1116 * guests can ask for up to 255+1 double words, we need a full page
1117 * to hold the maximum amount of facilities. On the other hand, we
1118 * only set facilities that are known to work in KVM.
1120 facilities
= (unsigned long long *) get_zeroed_page(GFP_KERNEL
|GFP_DMA
);
1125 memcpy(facilities
, S390_lowcore
.stfle_fac_list
, 16);
1126 facilities
[0] &= 0xff00fff3f47c0000ULL
;
1127 facilities
[1] &= 0x001c000000000000ULL
;
1131 static void __exit
kvm_s390_exit(void)
1133 free_page((unsigned long) facilities
);
1137 module_init(kvm_s390_init
);
1138 module_exit(kvm_s390_exit
);