]> git.proxmox.com Git - mirror_ubuntu-jammy-kernel.git/blame - arch/s390/kvm/kvm-s390.c
KVM: s390: gs support for kvm guests
[mirror_ubuntu-jammy-kernel.git] / arch / s390 / kvm / kvm-s390.c
CommitLineData
b0c632db 1/*
a53c8fab 2 * hosting zSeries kernel virtual machines
b0c632db 3 *
a53c8fab 4 * Copyright IBM Corp. 2008, 2009
b0c632db
HC
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>
628eb9b8 13 * Christian Ehrhardt <ehrhardt@de.ibm.com>
15f36ebd 14 * Jason J. Herne <jjherne@us.ibm.com>
b0c632db
HC
15 */
16
17#include <linux/compiler.h>
18#include <linux/err.h>
19#include <linux/fs.h>
ca872302 20#include <linux/hrtimer.h>
b0c632db
HC
21#include <linux/init.h>
22#include <linux/kvm.h>
23#include <linux/kvm_host.h>
b2d73b2a 24#include <linux/mman.h>
b0c632db 25#include <linux/module.h>
d3217967 26#include <linux/moduleparam.h>
a374e892 27#include <linux/random.h>
b0c632db 28#include <linux/slab.h>
ba5c1e9b 29#include <linux/timer.h>
41408c28 30#include <linux/vmalloc.h>
15c9705f 31#include <linux/bitmap.h>
174cd4b1
IM
32#include <linux/sched/signal.h>
33
cbb870c8 34#include <asm/asm-offsets.h>
b0c632db 35#include <asm/lowcore.h>
fd5ada04 36#include <asm/stp.h>
b0c632db 37#include <asm/pgtable.h>
1e133ab2 38#include <asm/gmap.h>
f5daba1d 39#include <asm/nmi.h>
a0616cde 40#include <asm/switch_to.h>
6d3da241 41#include <asm/isc.h>
1526bf9c 42#include <asm/sclp.h>
0a763c78 43#include <asm/cpacf.h>
221bb8a4 44#include <asm/timex.h>
8f2abe6a 45#include "kvm-s390.h"
b0c632db
HC
46#include "gaccess.h"
47
ea2cdd27
DH
48#define KMSG_COMPONENT "kvm-s390"
49#undef pr_fmt
50#define pr_fmt(fmt) KMSG_COMPONENT ": " fmt
51
5786fffa
CH
52#define CREATE_TRACE_POINTS
53#include "trace.h"
ade38c31 54#include "trace-s390.h"
5786fffa 55
41408c28 56#define MEM_OP_MAX_SIZE 65536 /* Maximum transfer size for KVM_S390_MEM_OP */
816c7667
JF
57#define LOCAL_IRQS 32
58#define VCPU_IRQS_MAX_BUF (sizeof(struct kvm_s390_irq) * \
59 (KVM_MAX_VCPUS + LOCAL_IRQS))
41408c28 60
b0c632db
HC
61#define VCPU_STAT(x) offsetof(struct kvm_vcpu, stat.x), KVM_STAT_VCPU
62
63struct kvm_stats_debugfs_item debugfs_entries[] = {
64 { "userspace_handled", VCPU_STAT(exit_userspace) },
0eaeafa1 65 { "exit_null", VCPU_STAT(exit_null) },
8f2abe6a
CB
66 { "exit_validity", VCPU_STAT(exit_validity) },
67 { "exit_stop_request", VCPU_STAT(exit_stop_request) },
68 { "exit_external_request", VCPU_STAT(exit_external_request) },
69 { "exit_external_interrupt", VCPU_STAT(exit_external_interrupt) },
ba5c1e9b 70 { "exit_instruction", VCPU_STAT(exit_instruction) },
9ec6de19 71 { "exit_pei", VCPU_STAT(exit_pei) },
ba5c1e9b
CO
72 { "exit_program_interruption", VCPU_STAT(exit_program_interruption) },
73 { "exit_instr_and_program_int", VCPU_STAT(exit_instr_and_program) },
a011eeb2 74 { "exit_operation_exception", VCPU_STAT(exit_operation_exception) },
f7819512 75 { "halt_successful_poll", VCPU_STAT(halt_successful_poll) },
62bea5bf 76 { "halt_attempted_poll", VCPU_STAT(halt_attempted_poll) },
3491caf2 77 { "halt_poll_invalid", VCPU_STAT(halt_poll_invalid) },
ce2e4f0b 78 { "halt_wakeup", VCPU_STAT(halt_wakeup) },
f5e10b09 79 { "instruction_lctlg", VCPU_STAT(instruction_lctlg) },
ba5c1e9b 80 { "instruction_lctl", VCPU_STAT(instruction_lctl) },
aba07508
DH
81 { "instruction_stctl", VCPU_STAT(instruction_stctl) },
82 { "instruction_stctg", VCPU_STAT(instruction_stctg) },
ba5c1e9b 83 { "deliver_emergency_signal", VCPU_STAT(deliver_emergency_signal) },
7697e71f 84 { "deliver_external_call", VCPU_STAT(deliver_external_call) },
ba5c1e9b
CO
85 { "deliver_service_signal", VCPU_STAT(deliver_service_signal) },
86 { "deliver_virtio_interrupt", VCPU_STAT(deliver_virtio_interrupt) },
87 { "deliver_stop_signal", VCPU_STAT(deliver_stop_signal) },
88 { "deliver_prefix_signal", VCPU_STAT(deliver_prefix_signal) },
89 { "deliver_restart_signal", VCPU_STAT(deliver_restart_signal) },
90 { "deliver_program_interruption", VCPU_STAT(deliver_program_int) },
91 { "exit_wait_state", VCPU_STAT(exit_wait_state) },
69d0d3a3 92 { "instruction_pfmf", VCPU_STAT(instruction_pfmf) },
453423dc
CB
93 { "instruction_stidp", VCPU_STAT(instruction_stidp) },
94 { "instruction_spx", VCPU_STAT(instruction_spx) },
95 { "instruction_stpx", VCPU_STAT(instruction_stpx) },
96 { "instruction_stap", VCPU_STAT(instruction_stap) },
97 { "instruction_storage_key", VCPU_STAT(instruction_storage_key) },
8a242234 98 { "instruction_ipte_interlock", VCPU_STAT(instruction_ipte_interlock) },
453423dc
CB
99 { "instruction_stsch", VCPU_STAT(instruction_stsch) },
100 { "instruction_chsc", VCPU_STAT(instruction_chsc) },
b31288fa 101 { "instruction_essa", VCPU_STAT(instruction_essa) },
453423dc
CB
102 { "instruction_stsi", VCPU_STAT(instruction_stsi) },
103 { "instruction_stfl", VCPU_STAT(instruction_stfl) },
bb25b9ba 104 { "instruction_tprot", VCPU_STAT(instruction_tprot) },
95ca2cb5 105 { "instruction_sthyi", VCPU_STAT(instruction_sthyi) },
a3508fbe 106 { "instruction_sie", VCPU_STAT(instruction_sie) },
5288fbf0 107 { "instruction_sigp_sense", VCPU_STAT(instruction_sigp_sense) },
bd59d3a4 108 { "instruction_sigp_sense_running", VCPU_STAT(instruction_sigp_sense_running) },
7697e71f 109 { "instruction_sigp_external_call", VCPU_STAT(instruction_sigp_external_call) },
5288fbf0 110 { "instruction_sigp_emergency", VCPU_STAT(instruction_sigp_emergency) },
42cb0c9f
DH
111 { "instruction_sigp_cond_emergency", VCPU_STAT(instruction_sigp_cond_emergency) },
112 { "instruction_sigp_start", VCPU_STAT(instruction_sigp_start) },
5288fbf0 113 { "instruction_sigp_stop", VCPU_STAT(instruction_sigp_stop) },
42cb0c9f
DH
114 { "instruction_sigp_stop_store_status", VCPU_STAT(instruction_sigp_stop_store_status) },
115 { "instruction_sigp_store_status", VCPU_STAT(instruction_sigp_store_status) },
cd7b4b61 116 { "instruction_sigp_store_adtl_status", VCPU_STAT(instruction_sigp_store_adtl_status) },
5288fbf0
CB
117 { "instruction_sigp_set_arch", VCPU_STAT(instruction_sigp_arch) },
118 { "instruction_sigp_set_prefix", VCPU_STAT(instruction_sigp_prefix) },
119 { "instruction_sigp_restart", VCPU_STAT(instruction_sigp_restart) },
42cb0c9f
DH
120 { "instruction_sigp_cpu_reset", VCPU_STAT(instruction_sigp_cpu_reset) },
121 { "instruction_sigp_init_cpu_reset", VCPU_STAT(instruction_sigp_init_cpu_reset) },
122 { "instruction_sigp_unknown", VCPU_STAT(instruction_sigp_unknown) },
388186bc 123 { "diagnose_10", VCPU_STAT(diagnose_10) },
e28acfea 124 { "diagnose_44", VCPU_STAT(diagnose_44) },
41628d33 125 { "diagnose_9c", VCPU_STAT(diagnose_9c) },
175a5c9e
CB
126 { "diagnose_258", VCPU_STAT(diagnose_258) },
127 { "diagnose_308", VCPU_STAT(diagnose_308) },
128 { "diagnose_500", VCPU_STAT(diagnose_500) },
b0c632db
HC
129 { NULL }
130};
131
a411edf1
DH
132/* allow nested virtualization in KVM (if enabled by user space) */
133static int nested;
134module_param(nested, int, S_IRUGO);
135MODULE_PARM_DESC(nested, "Nested virtualization support");
136
9d8d5786 137/* upper facilities limit for kvm */
f6c1d359 138unsigned long kvm_s390_fac_list_mask[16] = { FACILITIES_KVM };
b0c632db 139
9d8d5786 140unsigned long kvm_s390_fac_list_mask_size(void)
78c4b59f 141{
9d8d5786
MM
142 BUILD_BUG_ON(ARRAY_SIZE(kvm_s390_fac_list_mask) > S390_ARCH_FAC_MASK_SIZE_U64);
143 return ARRAY_SIZE(kvm_s390_fac_list_mask);
78c4b59f
MM
144}
145
15c9705f
DH
146/* available cpu features supported by kvm */
147static DECLARE_BITMAP(kvm_s390_available_cpu_feat, KVM_S390_VM_CPU_FEAT_NR_BITS);
0a763c78
DH
148/* available subfunctions indicated via query / "test bit" */
149static struct kvm_s390_vm_cpu_subfunc kvm_s390_available_subfunc;
15c9705f 150
9d8d5786 151static struct gmap_notifier gmap_notifier;
a3508fbe 152static struct gmap_notifier vsie_gmap_notifier;
78f26131 153debug_info_t *kvm_s390_dbf;
9d8d5786 154
b0c632db 155/* Section: not file related */
13a34e06 156int kvm_arch_hardware_enable(void)
b0c632db
HC
157{
158 /* every s390 is virtualization enabled ;-) */
10474ae8 159 return 0;
b0c632db
HC
160}
161
414d3b07
MS
162static void kvm_gmap_notifier(struct gmap *gmap, unsigned long start,
163 unsigned long end);
2c70fe44 164
fdf03650
FZ
165/*
166 * This callback is executed during stop_machine(). All CPUs are therefore
167 * temporarily stopped. In order not to change guest behavior, we have to
168 * disable preemption whenever we touch the epoch of kvm and the VCPUs,
169 * so a CPU won't be stopped while calculating with the epoch.
170 */
171static int kvm_clock_sync(struct notifier_block *notifier, unsigned long val,
172 void *v)
173{
174 struct kvm *kvm;
175 struct kvm_vcpu *vcpu;
176 int i;
177 unsigned long long *delta = v;
178
179 list_for_each_entry(kvm, &vm_list, vm_list) {
180 kvm->arch.epoch -= *delta;
181 kvm_for_each_vcpu(i, vcpu, kvm) {
182 vcpu->arch.sie_block->epoch -= *delta;
db0758b2
DH
183 if (vcpu->arch.cputm_enabled)
184 vcpu->arch.cputm_start += *delta;
91473b48
DH
185 if (vcpu->arch.vsie_block)
186 vcpu->arch.vsie_block->epoch -= *delta;
fdf03650
FZ
187 }
188 }
189 return NOTIFY_OK;
190}
191
192static struct notifier_block kvm_clock_notifier = {
193 .notifier_call = kvm_clock_sync,
194};
195
b0c632db
HC
196int kvm_arch_hardware_setup(void)
197{
2c70fe44 198 gmap_notifier.notifier_call = kvm_gmap_notifier;
b2d73b2a 199 gmap_register_pte_notifier(&gmap_notifier);
a3508fbe
DH
200 vsie_gmap_notifier.notifier_call = kvm_s390_vsie_gmap_notifier;
201 gmap_register_pte_notifier(&vsie_gmap_notifier);
fdf03650
FZ
202 atomic_notifier_chain_register(&s390_epoch_delta_notifier,
203 &kvm_clock_notifier);
b0c632db
HC
204 return 0;
205}
206
207void kvm_arch_hardware_unsetup(void)
208{
b2d73b2a 209 gmap_unregister_pte_notifier(&gmap_notifier);
a3508fbe 210 gmap_unregister_pte_notifier(&vsie_gmap_notifier);
fdf03650
FZ
211 atomic_notifier_chain_unregister(&s390_epoch_delta_notifier,
212 &kvm_clock_notifier);
b0c632db
HC
213}
214
22be5a13
DH
215static void allow_cpu_feat(unsigned long nr)
216{
217 set_bit_inv(nr, kvm_s390_available_cpu_feat);
218}
219
0a763c78
DH
220static inline int plo_test_bit(unsigned char nr)
221{
222 register unsigned long r0 asm("0") = (unsigned long) nr | 0x100;
d051ae53 223 int cc;
0a763c78
DH
224
225 asm volatile(
226 /* Parameter registers are ignored for "test bit" */
227 " plo 0,0,0,0(0)\n"
228 " ipm %0\n"
229 " srl %0,28\n"
230 : "=d" (cc)
231 : "d" (r0)
232 : "cc");
233 return cc == 0;
234}
235
22be5a13
DH
236static void kvm_s390_cpu_feat_init(void)
237{
0a763c78
DH
238 int i;
239
240 for (i = 0; i < 256; ++i) {
241 if (plo_test_bit(i))
242 kvm_s390_available_subfunc.plo[i >> 3] |= 0x80 >> (i & 7);
243 }
244
245 if (test_facility(28)) /* TOD-clock steering */
221bb8a4
LT
246 ptff(kvm_s390_available_subfunc.ptff,
247 sizeof(kvm_s390_available_subfunc.ptff),
248 PTFF_QAF);
0a763c78
DH
249
250 if (test_facility(17)) { /* MSA */
69c0e360
MS
251 __cpacf_query(CPACF_KMAC, (cpacf_mask_t *)
252 kvm_s390_available_subfunc.kmac);
253 __cpacf_query(CPACF_KMC, (cpacf_mask_t *)
254 kvm_s390_available_subfunc.kmc);
255 __cpacf_query(CPACF_KM, (cpacf_mask_t *)
256 kvm_s390_available_subfunc.km);
257 __cpacf_query(CPACF_KIMD, (cpacf_mask_t *)
258 kvm_s390_available_subfunc.kimd);
259 __cpacf_query(CPACF_KLMD, (cpacf_mask_t *)
260 kvm_s390_available_subfunc.klmd);
0a763c78
DH
261 }
262 if (test_facility(76)) /* MSA3 */
69c0e360
MS
263 __cpacf_query(CPACF_PCKMO, (cpacf_mask_t *)
264 kvm_s390_available_subfunc.pckmo);
0a763c78 265 if (test_facility(77)) { /* MSA4 */
69c0e360
MS
266 __cpacf_query(CPACF_KMCTR, (cpacf_mask_t *)
267 kvm_s390_available_subfunc.kmctr);
268 __cpacf_query(CPACF_KMF, (cpacf_mask_t *)
269 kvm_s390_available_subfunc.kmf);
270 __cpacf_query(CPACF_KMO, (cpacf_mask_t *)
271 kvm_s390_available_subfunc.kmo);
272 __cpacf_query(CPACF_PCC, (cpacf_mask_t *)
273 kvm_s390_available_subfunc.pcc);
0a763c78
DH
274 }
275 if (test_facility(57)) /* MSA5 */
69c0e360
MS
276 __cpacf_query(CPACF_PPNO, (cpacf_mask_t *)
277 kvm_s390_available_subfunc.ppno);
0a763c78 278
22be5a13
DH
279 if (MACHINE_HAS_ESOP)
280 allow_cpu_feat(KVM_S390_VM_CPU_FEAT_ESOP);
a3508fbe
DH
281 /*
282 * We need SIE support, ESOP (PROT_READ protection for gmap_shadow),
283 * 64bit SCAO (SCA passthrough) and IDTE (for gmap_shadow unshadowing).
284 */
285 if (!sclp.has_sief2 || !MACHINE_HAS_ESOP || !sclp.has_64bscao ||
a411edf1 286 !test_facility(3) || !nested)
a3508fbe
DH
287 return;
288 allow_cpu_feat(KVM_S390_VM_CPU_FEAT_SIEF2);
19c439b5
DH
289 if (sclp.has_64bscao)
290 allow_cpu_feat(KVM_S390_VM_CPU_FEAT_64BSCAO);
0615a326
DH
291 if (sclp.has_siif)
292 allow_cpu_feat(KVM_S390_VM_CPU_FEAT_SIIF);
77d18f6d
DH
293 if (sclp.has_gpere)
294 allow_cpu_feat(KVM_S390_VM_CPU_FEAT_GPERE);
a1b7b9b2
DH
295 if (sclp.has_gsls)
296 allow_cpu_feat(KVM_S390_VM_CPU_FEAT_GSLS);
5630a8e8
DH
297 if (sclp.has_ib)
298 allow_cpu_feat(KVM_S390_VM_CPU_FEAT_IB);
13ee3f67
DH
299 if (sclp.has_cei)
300 allow_cpu_feat(KVM_S390_VM_CPU_FEAT_CEI);
7fd7f39d
DH
301 if (sclp.has_ibs)
302 allow_cpu_feat(KVM_S390_VM_CPU_FEAT_IBS);
5d3876a8
DH
303 /*
304 * KVM_S390_VM_CPU_FEAT_SKEY: Wrong shadow of PTE.I bits will make
305 * all skey handling functions read/set the skey from the PGSTE
306 * instead of the real storage key.
307 *
308 * KVM_S390_VM_CPU_FEAT_CMMA: Wrong shadow of PTE.I bits will make
309 * pages being detected as preserved although they are resident.
310 *
311 * KVM_S390_VM_CPU_FEAT_PFMFI: Wrong shadow of PTE.I bits will
312 * have the same effect as for KVM_S390_VM_CPU_FEAT_SKEY.
313 *
314 * For KVM_S390_VM_CPU_FEAT_SKEY, KVM_S390_VM_CPU_FEAT_CMMA and
315 * KVM_S390_VM_CPU_FEAT_PFMFI, all PTE.I and PGSTE bits have to be
316 * correctly shadowed. We can do that for the PGSTE but not for PTE.I.
317 *
318 * KVM_S390_VM_CPU_FEAT_SIGPIF: Wrong SCB addresses in the SCA. We
319 * cannot easily shadow the SCA because of the ipte lock.
320 */
22be5a13
DH
321}
322
b0c632db
HC
323int kvm_arch_init(void *opaque)
324{
78f26131
CB
325 kvm_s390_dbf = debug_register("kvm-trace", 32, 1, 7 * sizeof(long));
326 if (!kvm_s390_dbf)
327 return -ENOMEM;
328
329 if (debug_register_view(kvm_s390_dbf, &debug_sprintf_view)) {
330 debug_unregister(kvm_s390_dbf);
331 return -ENOMEM;
332 }
333
22be5a13
DH
334 kvm_s390_cpu_feat_init();
335
84877d93
CH
336 /* Register floating interrupt controller interface. */
337 return kvm_register_device_ops(&kvm_flic_ops, KVM_DEV_TYPE_FLIC);
b0c632db
HC
338}
339
78f26131
CB
340void kvm_arch_exit(void)
341{
342 debug_unregister(kvm_s390_dbf);
343}
344
b0c632db
HC
345/* Section: device related */
346long kvm_arch_dev_ioctl(struct file *filp,
347 unsigned int ioctl, unsigned long arg)
348{
349 if (ioctl == KVM_S390_ENABLE_SIE)
350 return s390_enable_sie();
351 return -EINVAL;
352}
353
784aa3d7 354int kvm_vm_ioctl_check_extension(struct kvm *kvm, long ext)
b0c632db 355{
d7b0b5eb
CO
356 int r;
357
2bd0ac4e 358 switch (ext) {
d7b0b5eb 359 case KVM_CAP_S390_PSW:
b6cf8788 360 case KVM_CAP_S390_GMAP:
52e16b18 361 case KVM_CAP_SYNC_MMU:
1efd0f59
CO
362#ifdef CONFIG_KVM_S390_UCONTROL
363 case KVM_CAP_S390_UCONTROL:
364#endif
3c038e6b 365 case KVM_CAP_ASYNC_PF:
60b413c9 366 case KVM_CAP_SYNC_REGS:
14eebd91 367 case KVM_CAP_ONE_REG:
d6712df9 368 case KVM_CAP_ENABLE_CAP:
fa6b7fe9 369 case KVM_CAP_S390_CSS_SUPPORT:
10ccaa1e 370 case KVM_CAP_IOEVENTFD:
c05c4186 371 case KVM_CAP_DEVICE_CTRL:
d938dc55 372 case KVM_CAP_ENABLE_CAP_VM:
78599d90 373 case KVM_CAP_S390_IRQCHIP:
f2061656 374 case KVM_CAP_VM_ATTRIBUTES:
6352e4d2 375 case KVM_CAP_MP_STATE:
460df4c1 376 case KVM_CAP_IMMEDIATE_EXIT:
47b43c52 377 case KVM_CAP_S390_INJECT_IRQ:
2444b352 378 case KVM_CAP_S390_USER_SIGP:
e44fc8c9 379 case KVM_CAP_S390_USER_STSI:
30ee2a98 380 case KVM_CAP_S390_SKEYS:
816c7667 381 case KVM_CAP_S390_IRQ_STATE:
6502a34c 382 case KVM_CAP_S390_USER_INSTR0:
d7b0b5eb
CO
383 r = 1;
384 break;
41408c28
TH
385 case KVM_CAP_S390_MEM_OP:
386 r = MEM_OP_MAX_SIZE;
387 break;
e726b1bd
CB
388 case KVM_CAP_NR_VCPUS:
389 case KVM_CAP_MAX_VCPUS:
76a6dd72 390 r = KVM_S390_BSCA_CPU_SLOTS;
a6940674
DH
391 if (!kvm_s390_use_sca_entries())
392 r = KVM_MAX_VCPUS;
393 else if (sclp.has_esca && sclp.has_64bscao)
76a6dd72 394 r = KVM_S390_ESCA_CPU_SLOTS;
e726b1bd 395 break;
e1e2e605
NW
396 case KVM_CAP_NR_MEMSLOTS:
397 r = KVM_USER_MEM_SLOTS;
398 break;
1526bf9c 399 case KVM_CAP_S390_COW:
abf09bed 400 r = MACHINE_HAS_ESOP;
1526bf9c 401 break;
68c55750
EF
402 case KVM_CAP_S390_VECTOR_REGISTERS:
403 r = MACHINE_HAS_VX;
404 break;
c6e5f166
FZ
405 case KVM_CAP_S390_RI:
406 r = test_facility(64);
407 break;
4e0b1ab7
FZ
408 case KVM_CAP_S390_GS:
409 r = test_facility(133);
410 break;
2bd0ac4e 411 default:
d7b0b5eb 412 r = 0;
2bd0ac4e 413 }
d7b0b5eb 414 return r;
b0c632db
HC
415}
416
15f36ebd
JH
417static void kvm_s390_sync_dirty_log(struct kvm *kvm,
418 struct kvm_memory_slot *memslot)
419{
420 gfn_t cur_gfn, last_gfn;
421 unsigned long address;
422 struct gmap *gmap = kvm->arch.gmap;
423
15f36ebd
JH
424 /* Loop over all guest pages */
425 last_gfn = memslot->base_gfn + memslot->npages;
426 for (cur_gfn = memslot->base_gfn; cur_gfn <= last_gfn; cur_gfn++) {
427 address = gfn_to_hva_memslot(memslot, cur_gfn);
428
1e133ab2 429 if (test_and_clear_guest_dirty(gmap->mm, address))
15f36ebd 430 mark_page_dirty(kvm, cur_gfn);
1763f8d0
CB
431 if (fatal_signal_pending(current))
432 return;
70c88a00 433 cond_resched();
15f36ebd 434 }
15f36ebd
JH
435}
436
b0c632db 437/* Section: vm related */
a6e2f683
ED
438static void sca_del_vcpu(struct kvm_vcpu *vcpu);
439
b0c632db
HC
440/*
441 * Get (and clear) the dirty memory log for a memory slot.
442 */
443int kvm_vm_ioctl_get_dirty_log(struct kvm *kvm,
444 struct kvm_dirty_log *log)
445{
15f36ebd
JH
446 int r;
447 unsigned long n;
9f6b8029 448 struct kvm_memslots *slots;
15f36ebd
JH
449 struct kvm_memory_slot *memslot;
450 int is_dirty = 0;
451
e1e8a962
JF
452 if (kvm_is_ucontrol(kvm))
453 return -EINVAL;
454
15f36ebd
JH
455 mutex_lock(&kvm->slots_lock);
456
457 r = -EINVAL;
458 if (log->slot >= KVM_USER_MEM_SLOTS)
459 goto out;
460
9f6b8029
PB
461 slots = kvm_memslots(kvm);
462 memslot = id_to_memslot(slots, log->slot);
15f36ebd
JH
463 r = -ENOENT;
464 if (!memslot->dirty_bitmap)
465 goto out;
466
467 kvm_s390_sync_dirty_log(kvm, memslot);
468 r = kvm_get_dirty_log(kvm, log, &is_dirty);
469 if (r)
470 goto out;
471
472 /* Clear the dirty log */
473 if (is_dirty) {
474 n = kvm_dirty_bitmap_bytes(memslot);
475 memset(memslot->dirty_bitmap, 0, n);
476 }
477 r = 0;
478out:
479 mutex_unlock(&kvm->slots_lock);
480 return r;
b0c632db
HC
481}
482
6502a34c
DH
483static void icpt_operexc_on_all_vcpus(struct kvm *kvm)
484{
485 unsigned int i;
486 struct kvm_vcpu *vcpu;
487
488 kvm_for_each_vcpu(i, vcpu, kvm) {
489 kvm_s390_sync_request(KVM_REQ_ICPT_OPEREXC, vcpu);
490 }
491}
492
d938dc55
CH
493static int kvm_vm_ioctl_enable_cap(struct kvm *kvm, struct kvm_enable_cap *cap)
494{
495 int r;
496
497 if (cap->flags)
498 return -EINVAL;
499
500 switch (cap->cap) {
84223598 501 case KVM_CAP_S390_IRQCHIP:
c92ea7b9 502 VM_EVENT(kvm, 3, "%s", "ENABLE: CAP_S390_IRQCHIP");
84223598
CH
503 kvm->arch.use_irqchip = 1;
504 r = 0;
505 break;
2444b352 506 case KVM_CAP_S390_USER_SIGP:
c92ea7b9 507 VM_EVENT(kvm, 3, "%s", "ENABLE: CAP_S390_USER_SIGP");
2444b352
DH
508 kvm->arch.user_sigp = 1;
509 r = 0;
510 break;
68c55750 511 case KVM_CAP_S390_VECTOR_REGISTERS:
5967c17b 512 mutex_lock(&kvm->lock);
a03825bb 513 if (kvm->created_vcpus) {
5967c17b
DH
514 r = -EBUSY;
515 } else if (MACHINE_HAS_VX) {
c54f0d6a
DH
516 set_kvm_facility(kvm->arch.model.fac_mask, 129);
517 set_kvm_facility(kvm->arch.model.fac_list, 129);
2f87d942
GH
518 if (test_facility(134)) {
519 set_kvm_facility(kvm->arch.model.fac_mask, 134);
520 set_kvm_facility(kvm->arch.model.fac_list, 134);
521 }
53743aa7
MS
522 if (test_facility(135)) {
523 set_kvm_facility(kvm->arch.model.fac_mask, 135);
524 set_kvm_facility(kvm->arch.model.fac_list, 135);
525 }
18280d8b
MM
526 r = 0;
527 } else
528 r = -EINVAL;
5967c17b 529 mutex_unlock(&kvm->lock);
c92ea7b9
CB
530 VM_EVENT(kvm, 3, "ENABLE: CAP_S390_VECTOR_REGISTERS %s",
531 r ? "(not available)" : "(success)");
68c55750 532 break;
c6e5f166
FZ
533 case KVM_CAP_S390_RI:
534 r = -EINVAL;
535 mutex_lock(&kvm->lock);
a03825bb 536 if (kvm->created_vcpus) {
c6e5f166
FZ
537 r = -EBUSY;
538 } else if (test_facility(64)) {
c54f0d6a
DH
539 set_kvm_facility(kvm->arch.model.fac_mask, 64);
540 set_kvm_facility(kvm->arch.model.fac_list, 64);
c6e5f166
FZ
541 r = 0;
542 }
543 mutex_unlock(&kvm->lock);
544 VM_EVENT(kvm, 3, "ENABLE: CAP_S390_RI %s",
545 r ? "(not available)" : "(success)");
546 break;
4e0b1ab7
FZ
547 case KVM_CAP_S390_GS:
548 r = -EINVAL;
549 mutex_lock(&kvm->lock);
550 if (atomic_read(&kvm->online_vcpus)) {
551 r = -EBUSY;
552 } else if (test_facility(133)) {
553 set_kvm_facility(kvm->arch.model.fac_mask, 133);
554 set_kvm_facility(kvm->arch.model.fac_list, 133);
555 r = 0;
556 }
557 mutex_unlock(&kvm->lock);
558 VM_EVENT(kvm, 3, "ENABLE: CAP_S390_GS %s",
559 r ? "(not available)" : "(success)");
560 break;
e44fc8c9 561 case KVM_CAP_S390_USER_STSI:
c92ea7b9 562 VM_EVENT(kvm, 3, "%s", "ENABLE: CAP_S390_USER_STSI");
e44fc8c9
ET
563 kvm->arch.user_stsi = 1;
564 r = 0;
565 break;
6502a34c
DH
566 case KVM_CAP_S390_USER_INSTR0:
567 VM_EVENT(kvm, 3, "%s", "ENABLE: CAP_S390_USER_INSTR0");
568 kvm->arch.user_instr0 = 1;
569 icpt_operexc_on_all_vcpus(kvm);
570 r = 0;
571 break;
d938dc55
CH
572 default:
573 r = -EINVAL;
574 break;
575 }
576 return r;
577}
578
8c0a7ce6
DD
579static int kvm_s390_get_mem_control(struct kvm *kvm, struct kvm_device_attr *attr)
580{
581 int ret;
582
583 switch (attr->attr) {
584 case KVM_S390_VM_MEM_LIMIT_SIZE:
585 ret = 0;
c92ea7b9 586 VM_EVENT(kvm, 3, "QUERY: max guest memory: %lu bytes",
a3a92c31
DD
587 kvm->arch.mem_limit);
588 if (put_user(kvm->arch.mem_limit, (u64 __user *)attr->addr))
8c0a7ce6
DD
589 ret = -EFAULT;
590 break;
591 default:
592 ret = -ENXIO;
593 break;
594 }
595 return ret;
596}
597
598static int kvm_s390_set_mem_control(struct kvm *kvm, struct kvm_device_attr *attr)
4f718eab
DD
599{
600 int ret;
601 unsigned int idx;
602 switch (attr->attr) {
603 case KVM_S390_VM_MEM_ENABLE_CMMA:
f9cbd9b0 604 ret = -ENXIO;
c24cc9c8 605 if (!sclp.has_cmma)
e6db1d61
DD
606 break;
607
4f718eab 608 ret = -EBUSY;
c92ea7b9 609 VM_EVENT(kvm, 3, "%s", "ENABLE: CMMA support");
4f718eab 610 mutex_lock(&kvm->lock);
a03825bb 611 if (!kvm->created_vcpus) {
4f718eab
DD
612 kvm->arch.use_cmma = 1;
613 ret = 0;
614 }
615 mutex_unlock(&kvm->lock);
616 break;
617 case KVM_S390_VM_MEM_CLR_CMMA:
f9cbd9b0
DH
618 ret = -ENXIO;
619 if (!sclp.has_cmma)
620 break;
c3489155
DD
621 ret = -EINVAL;
622 if (!kvm->arch.use_cmma)
623 break;
624
c92ea7b9 625 VM_EVENT(kvm, 3, "%s", "RESET: CMMA states");
4f718eab
DD
626 mutex_lock(&kvm->lock);
627 idx = srcu_read_lock(&kvm->srcu);
a13cff31 628 s390_reset_cmma(kvm->arch.gmap->mm);
4f718eab
DD
629 srcu_read_unlock(&kvm->srcu, idx);
630 mutex_unlock(&kvm->lock);
631 ret = 0;
632 break;
8c0a7ce6
DD
633 case KVM_S390_VM_MEM_LIMIT_SIZE: {
634 unsigned long new_limit;
635
636 if (kvm_is_ucontrol(kvm))
637 return -EINVAL;
638
639 if (get_user(new_limit, (u64 __user *)attr->addr))
640 return -EFAULT;
641
a3a92c31
DD
642 if (kvm->arch.mem_limit != KVM_S390_NO_MEM_LIMIT &&
643 new_limit > kvm->arch.mem_limit)
8c0a7ce6
DD
644 return -E2BIG;
645
a3a92c31
DD
646 if (!new_limit)
647 return -EINVAL;
648
6ea427bb 649 /* gmap_create takes last usable address */
a3a92c31
DD
650 if (new_limit != KVM_S390_NO_MEM_LIMIT)
651 new_limit -= 1;
652
8c0a7ce6
DD
653 ret = -EBUSY;
654 mutex_lock(&kvm->lock);
a03825bb 655 if (!kvm->created_vcpus) {
6ea427bb
MS
656 /* gmap_create will round the limit up */
657 struct gmap *new = gmap_create(current->mm, new_limit);
8c0a7ce6
DD
658
659 if (!new) {
660 ret = -ENOMEM;
661 } else {
6ea427bb 662 gmap_remove(kvm->arch.gmap);
8c0a7ce6
DD
663 new->private = kvm;
664 kvm->arch.gmap = new;
665 ret = 0;
666 }
667 }
668 mutex_unlock(&kvm->lock);
a3a92c31
DD
669 VM_EVENT(kvm, 3, "SET: max guest address: %lu", new_limit);
670 VM_EVENT(kvm, 3, "New guest asce: 0x%pK",
671 (void *) kvm->arch.gmap->asce);
8c0a7ce6
DD
672 break;
673 }
4f718eab
DD
674 default:
675 ret = -ENXIO;
676 break;
677 }
678 return ret;
679}
680
a374e892
TK
681static void kvm_s390_vcpu_crypto_setup(struct kvm_vcpu *vcpu);
682
683static int kvm_s390_vm_set_crypto(struct kvm *kvm, struct kvm_device_attr *attr)
684{
685 struct kvm_vcpu *vcpu;
686 int i;
687
9d8d5786 688 if (!test_kvm_facility(kvm, 76))
a374e892
TK
689 return -EINVAL;
690
691 mutex_lock(&kvm->lock);
692 switch (attr->attr) {
693 case KVM_S390_VM_CRYPTO_ENABLE_AES_KW:
694 get_random_bytes(
695 kvm->arch.crypto.crycb->aes_wrapping_key_mask,
696 sizeof(kvm->arch.crypto.crycb->aes_wrapping_key_mask));
697 kvm->arch.crypto.aes_kw = 1;
c92ea7b9 698 VM_EVENT(kvm, 3, "%s", "ENABLE: AES keywrapping support");
a374e892
TK
699 break;
700 case KVM_S390_VM_CRYPTO_ENABLE_DEA_KW:
701 get_random_bytes(
702 kvm->arch.crypto.crycb->dea_wrapping_key_mask,
703 sizeof(kvm->arch.crypto.crycb->dea_wrapping_key_mask));
704 kvm->arch.crypto.dea_kw = 1;
c92ea7b9 705 VM_EVENT(kvm, 3, "%s", "ENABLE: DEA keywrapping support");
a374e892
TK
706 break;
707 case KVM_S390_VM_CRYPTO_DISABLE_AES_KW:
708 kvm->arch.crypto.aes_kw = 0;
709 memset(kvm->arch.crypto.crycb->aes_wrapping_key_mask, 0,
710 sizeof(kvm->arch.crypto.crycb->aes_wrapping_key_mask));
c92ea7b9 711 VM_EVENT(kvm, 3, "%s", "DISABLE: AES keywrapping support");
a374e892
TK
712 break;
713 case KVM_S390_VM_CRYPTO_DISABLE_DEA_KW:
714 kvm->arch.crypto.dea_kw = 0;
715 memset(kvm->arch.crypto.crycb->dea_wrapping_key_mask, 0,
716 sizeof(kvm->arch.crypto.crycb->dea_wrapping_key_mask));
c92ea7b9 717 VM_EVENT(kvm, 3, "%s", "DISABLE: DEA keywrapping support");
a374e892
TK
718 break;
719 default:
720 mutex_unlock(&kvm->lock);
721 return -ENXIO;
722 }
723
724 kvm_for_each_vcpu(i, vcpu, kvm) {
725 kvm_s390_vcpu_crypto_setup(vcpu);
726 exit_sie(vcpu);
727 }
728 mutex_unlock(&kvm->lock);
729 return 0;
730}
731
72f25020
JH
732static int kvm_s390_set_tod_high(struct kvm *kvm, struct kvm_device_attr *attr)
733{
734 u8 gtod_high;
735
736 if (copy_from_user(&gtod_high, (void __user *)attr->addr,
737 sizeof(gtod_high)))
738 return -EFAULT;
739
740 if (gtod_high != 0)
741 return -EINVAL;
58c383c6 742 VM_EVENT(kvm, 3, "SET: TOD extension: 0x%x", gtod_high);
72f25020
JH
743
744 return 0;
745}
746
747static int kvm_s390_set_tod_low(struct kvm *kvm, struct kvm_device_attr *attr)
748{
5a3d883a 749 u64 gtod;
72f25020
JH
750
751 if (copy_from_user(&gtod, (void __user *)attr->addr, sizeof(gtod)))
752 return -EFAULT;
753
25ed1675 754 kvm_s390_set_tod_clock(kvm, gtod);
58c383c6 755 VM_EVENT(kvm, 3, "SET: TOD base: 0x%llx", gtod);
72f25020
JH
756 return 0;
757}
758
759static int kvm_s390_set_tod(struct kvm *kvm, struct kvm_device_attr *attr)
760{
761 int ret;
762
763 if (attr->flags)
764 return -EINVAL;
765
766 switch (attr->attr) {
767 case KVM_S390_VM_TOD_HIGH:
768 ret = kvm_s390_set_tod_high(kvm, attr);
769 break;
770 case KVM_S390_VM_TOD_LOW:
771 ret = kvm_s390_set_tod_low(kvm, attr);
772 break;
773 default:
774 ret = -ENXIO;
775 break;
776 }
777 return ret;
778}
779
780static int kvm_s390_get_tod_high(struct kvm *kvm, struct kvm_device_attr *attr)
781{
782 u8 gtod_high = 0;
783
784 if (copy_to_user((void __user *)attr->addr, &gtod_high,
785 sizeof(gtod_high)))
786 return -EFAULT;
58c383c6 787 VM_EVENT(kvm, 3, "QUERY: TOD extension: 0x%x", gtod_high);
72f25020
JH
788
789 return 0;
790}
791
792static int kvm_s390_get_tod_low(struct kvm *kvm, struct kvm_device_attr *attr)
793{
5a3d883a 794 u64 gtod;
72f25020 795
60417fcc 796 gtod = kvm_s390_get_tod_clock_fast(kvm);
72f25020
JH
797 if (copy_to_user((void __user *)attr->addr, &gtod, sizeof(gtod)))
798 return -EFAULT;
58c383c6 799 VM_EVENT(kvm, 3, "QUERY: TOD base: 0x%llx", gtod);
72f25020
JH
800
801 return 0;
802}
803
804static int kvm_s390_get_tod(struct kvm *kvm, struct kvm_device_attr *attr)
805{
806 int ret;
807
808 if (attr->flags)
809 return -EINVAL;
810
811 switch (attr->attr) {
812 case KVM_S390_VM_TOD_HIGH:
813 ret = kvm_s390_get_tod_high(kvm, attr);
814 break;
815 case KVM_S390_VM_TOD_LOW:
816 ret = kvm_s390_get_tod_low(kvm, attr);
817 break;
818 default:
819 ret = -ENXIO;
820 break;
821 }
822 return ret;
823}
824
658b6eda
MM
825static int kvm_s390_set_processor(struct kvm *kvm, struct kvm_device_attr *attr)
826{
827 struct kvm_s390_vm_cpu_processor *proc;
053dd230 828 u16 lowest_ibc, unblocked_ibc;
658b6eda
MM
829 int ret = 0;
830
831 mutex_lock(&kvm->lock);
a03825bb 832 if (kvm->created_vcpus) {
658b6eda
MM
833 ret = -EBUSY;
834 goto out;
835 }
836 proc = kzalloc(sizeof(*proc), GFP_KERNEL);
837 if (!proc) {
838 ret = -ENOMEM;
839 goto out;
840 }
841 if (!copy_from_user(proc, (void __user *)attr->addr,
842 sizeof(*proc))) {
9bb0ec09 843 kvm->arch.model.cpuid = proc->cpuid;
053dd230
DH
844 lowest_ibc = sclp.ibc >> 16 & 0xfff;
845 unblocked_ibc = sclp.ibc & 0xfff;
0487c44d 846 if (lowest_ibc && proc->ibc) {
053dd230
DH
847 if (proc->ibc > unblocked_ibc)
848 kvm->arch.model.ibc = unblocked_ibc;
849 else if (proc->ibc < lowest_ibc)
850 kvm->arch.model.ibc = lowest_ibc;
851 else
852 kvm->arch.model.ibc = proc->ibc;
853 }
c54f0d6a 854 memcpy(kvm->arch.model.fac_list, proc->fac_list,
658b6eda 855 S390_ARCH_FAC_LIST_SIZE_BYTE);
a8c39dd7
CB
856 VM_EVENT(kvm, 3, "SET: guest ibc: 0x%4.4x, guest cpuid: 0x%16.16llx",
857 kvm->arch.model.ibc,
858 kvm->arch.model.cpuid);
859 VM_EVENT(kvm, 3, "SET: guest faclist: 0x%16.16llx.%16.16llx.%16.16llx",
860 kvm->arch.model.fac_list[0],
861 kvm->arch.model.fac_list[1],
862 kvm->arch.model.fac_list[2]);
658b6eda
MM
863 } else
864 ret = -EFAULT;
865 kfree(proc);
866out:
867 mutex_unlock(&kvm->lock);
868 return ret;
869}
870
15c9705f
DH
871static int kvm_s390_set_processor_feat(struct kvm *kvm,
872 struct kvm_device_attr *attr)
873{
874 struct kvm_s390_vm_cpu_feat data;
875 int ret = -EBUSY;
876
877 if (copy_from_user(&data, (void __user *)attr->addr, sizeof(data)))
878 return -EFAULT;
879 if (!bitmap_subset((unsigned long *) data.feat,
880 kvm_s390_available_cpu_feat,
881 KVM_S390_VM_CPU_FEAT_NR_BITS))
882 return -EINVAL;
883
884 mutex_lock(&kvm->lock);
885 if (!atomic_read(&kvm->online_vcpus)) {
886 bitmap_copy(kvm->arch.cpu_feat, (unsigned long *) data.feat,
887 KVM_S390_VM_CPU_FEAT_NR_BITS);
888 ret = 0;
889 }
890 mutex_unlock(&kvm->lock);
891 return ret;
892}
893
0a763c78
DH
894static int kvm_s390_set_processor_subfunc(struct kvm *kvm,
895 struct kvm_device_attr *attr)
896{
897 /*
898 * Once supported by kernel + hw, we have to store the subfunctions
899 * in kvm->arch and remember that user space configured them.
900 */
901 return -ENXIO;
902}
903
658b6eda
MM
904static int kvm_s390_set_cpu_model(struct kvm *kvm, struct kvm_device_attr *attr)
905{
906 int ret = -ENXIO;
907
908 switch (attr->attr) {
909 case KVM_S390_VM_CPU_PROCESSOR:
910 ret = kvm_s390_set_processor(kvm, attr);
911 break;
15c9705f
DH
912 case KVM_S390_VM_CPU_PROCESSOR_FEAT:
913 ret = kvm_s390_set_processor_feat(kvm, attr);
914 break;
0a763c78
DH
915 case KVM_S390_VM_CPU_PROCESSOR_SUBFUNC:
916 ret = kvm_s390_set_processor_subfunc(kvm, attr);
917 break;
658b6eda
MM
918 }
919 return ret;
920}
921
922static int kvm_s390_get_processor(struct kvm *kvm, struct kvm_device_attr *attr)
923{
924 struct kvm_s390_vm_cpu_processor *proc;
925 int ret = 0;
926
927 proc = kzalloc(sizeof(*proc), GFP_KERNEL);
928 if (!proc) {
929 ret = -ENOMEM;
930 goto out;
931 }
9bb0ec09 932 proc->cpuid = kvm->arch.model.cpuid;
658b6eda 933 proc->ibc = kvm->arch.model.ibc;
c54f0d6a
DH
934 memcpy(&proc->fac_list, kvm->arch.model.fac_list,
935 S390_ARCH_FAC_LIST_SIZE_BYTE);
a8c39dd7
CB
936 VM_EVENT(kvm, 3, "GET: guest ibc: 0x%4.4x, guest cpuid: 0x%16.16llx",
937 kvm->arch.model.ibc,
938 kvm->arch.model.cpuid);
939 VM_EVENT(kvm, 3, "GET: guest faclist: 0x%16.16llx.%16.16llx.%16.16llx",
940 kvm->arch.model.fac_list[0],
941 kvm->arch.model.fac_list[1],
942 kvm->arch.model.fac_list[2]);
658b6eda
MM
943 if (copy_to_user((void __user *)attr->addr, proc, sizeof(*proc)))
944 ret = -EFAULT;
945 kfree(proc);
946out:
947 return ret;
948}
949
950static int kvm_s390_get_machine(struct kvm *kvm, struct kvm_device_attr *attr)
951{
952 struct kvm_s390_vm_cpu_machine *mach;
953 int ret = 0;
954
955 mach = kzalloc(sizeof(*mach), GFP_KERNEL);
956 if (!mach) {
957 ret = -ENOMEM;
958 goto out;
959 }
960 get_cpu_id((struct cpuid *) &mach->cpuid);
37c5f6c8 961 mach->ibc = sclp.ibc;
c54f0d6a 962 memcpy(&mach->fac_mask, kvm->arch.model.fac_mask,
981467c9 963 S390_ARCH_FAC_LIST_SIZE_BYTE);
658b6eda 964 memcpy((unsigned long *)&mach->fac_list, S390_lowcore.stfle_fac_list,
04478197 965 sizeof(S390_lowcore.stfle_fac_list));
a8c39dd7
CB
966 VM_EVENT(kvm, 3, "GET: host ibc: 0x%4.4x, host cpuid: 0x%16.16llx",
967 kvm->arch.model.ibc,
968 kvm->arch.model.cpuid);
969 VM_EVENT(kvm, 3, "GET: host facmask: 0x%16.16llx.%16.16llx.%16.16llx",
970 mach->fac_mask[0],
971 mach->fac_mask[1],
972 mach->fac_mask[2]);
973 VM_EVENT(kvm, 3, "GET: host faclist: 0x%16.16llx.%16.16llx.%16.16llx",
974 mach->fac_list[0],
975 mach->fac_list[1],
976 mach->fac_list[2]);
658b6eda
MM
977 if (copy_to_user((void __user *)attr->addr, mach, sizeof(*mach)))
978 ret = -EFAULT;
979 kfree(mach);
980out:
981 return ret;
982}
983
15c9705f
DH
984static int kvm_s390_get_processor_feat(struct kvm *kvm,
985 struct kvm_device_attr *attr)
986{
987 struct kvm_s390_vm_cpu_feat data;
988
989 bitmap_copy((unsigned long *) data.feat, kvm->arch.cpu_feat,
990 KVM_S390_VM_CPU_FEAT_NR_BITS);
991 if (copy_to_user((void __user *)attr->addr, &data, sizeof(data)))
992 return -EFAULT;
993 return 0;
994}
995
996static int kvm_s390_get_machine_feat(struct kvm *kvm,
997 struct kvm_device_attr *attr)
998{
999 struct kvm_s390_vm_cpu_feat data;
1000
1001 bitmap_copy((unsigned long *) data.feat,
1002 kvm_s390_available_cpu_feat,
1003 KVM_S390_VM_CPU_FEAT_NR_BITS);
1004 if (copy_to_user((void __user *)attr->addr, &data, sizeof(data)))
1005 return -EFAULT;
1006 return 0;
1007}
1008
0a763c78
DH
1009static int kvm_s390_get_processor_subfunc(struct kvm *kvm,
1010 struct kvm_device_attr *attr)
1011{
1012 /*
1013 * Once we can actually configure subfunctions (kernel + hw support),
1014 * we have to check if they were already set by user space, if so copy
1015 * them from kvm->arch.
1016 */
1017 return -ENXIO;
1018}
1019
1020static int kvm_s390_get_machine_subfunc(struct kvm *kvm,
1021 struct kvm_device_attr *attr)
1022{
1023 if (copy_to_user((void __user *)attr->addr, &kvm_s390_available_subfunc,
1024 sizeof(struct kvm_s390_vm_cpu_subfunc)))
1025 return -EFAULT;
1026 return 0;
1027}
658b6eda
MM
1028static int kvm_s390_get_cpu_model(struct kvm *kvm, struct kvm_device_attr *attr)
1029{
1030 int ret = -ENXIO;
1031
1032 switch (attr->attr) {
1033 case KVM_S390_VM_CPU_PROCESSOR:
1034 ret = kvm_s390_get_processor(kvm, attr);
1035 break;
1036 case KVM_S390_VM_CPU_MACHINE:
1037 ret = kvm_s390_get_machine(kvm, attr);
1038 break;
15c9705f
DH
1039 case KVM_S390_VM_CPU_PROCESSOR_FEAT:
1040 ret = kvm_s390_get_processor_feat(kvm, attr);
1041 break;
1042 case KVM_S390_VM_CPU_MACHINE_FEAT:
1043 ret = kvm_s390_get_machine_feat(kvm, attr);
1044 break;
0a763c78
DH
1045 case KVM_S390_VM_CPU_PROCESSOR_SUBFUNC:
1046 ret = kvm_s390_get_processor_subfunc(kvm, attr);
1047 break;
1048 case KVM_S390_VM_CPU_MACHINE_SUBFUNC:
1049 ret = kvm_s390_get_machine_subfunc(kvm, attr);
1050 break;
658b6eda
MM
1051 }
1052 return ret;
1053}
1054
f2061656
DD
1055static int kvm_s390_vm_set_attr(struct kvm *kvm, struct kvm_device_attr *attr)
1056{
1057 int ret;
1058
1059 switch (attr->group) {
4f718eab 1060 case KVM_S390_VM_MEM_CTRL:
8c0a7ce6 1061 ret = kvm_s390_set_mem_control(kvm, attr);
4f718eab 1062 break;
72f25020
JH
1063 case KVM_S390_VM_TOD:
1064 ret = kvm_s390_set_tod(kvm, attr);
1065 break;
658b6eda
MM
1066 case KVM_S390_VM_CPU_MODEL:
1067 ret = kvm_s390_set_cpu_model(kvm, attr);
1068 break;
a374e892
TK
1069 case KVM_S390_VM_CRYPTO:
1070 ret = kvm_s390_vm_set_crypto(kvm, attr);
1071 break;
f2061656
DD
1072 default:
1073 ret = -ENXIO;
1074 break;
1075 }
1076
1077 return ret;
1078}
1079
1080static int kvm_s390_vm_get_attr(struct kvm *kvm, struct kvm_device_attr *attr)
1081{
8c0a7ce6
DD
1082 int ret;
1083
1084 switch (attr->group) {
1085 case KVM_S390_VM_MEM_CTRL:
1086 ret = kvm_s390_get_mem_control(kvm, attr);
1087 break;
72f25020
JH
1088 case KVM_S390_VM_TOD:
1089 ret = kvm_s390_get_tod(kvm, attr);
1090 break;
658b6eda
MM
1091 case KVM_S390_VM_CPU_MODEL:
1092 ret = kvm_s390_get_cpu_model(kvm, attr);
1093 break;
8c0a7ce6
DD
1094 default:
1095 ret = -ENXIO;
1096 break;
1097 }
1098
1099 return ret;
f2061656
DD
1100}
1101
1102static int kvm_s390_vm_has_attr(struct kvm *kvm, struct kvm_device_attr *attr)
1103{
1104 int ret;
1105
1106 switch (attr->group) {
4f718eab
DD
1107 case KVM_S390_VM_MEM_CTRL:
1108 switch (attr->attr) {
1109 case KVM_S390_VM_MEM_ENABLE_CMMA:
1110 case KVM_S390_VM_MEM_CLR_CMMA:
f9cbd9b0
DH
1111 ret = sclp.has_cmma ? 0 : -ENXIO;
1112 break;
8c0a7ce6 1113 case KVM_S390_VM_MEM_LIMIT_SIZE:
4f718eab
DD
1114 ret = 0;
1115 break;
1116 default:
1117 ret = -ENXIO;
1118 break;
1119 }
1120 break;
72f25020
JH
1121 case KVM_S390_VM_TOD:
1122 switch (attr->attr) {
1123 case KVM_S390_VM_TOD_LOW:
1124 case KVM_S390_VM_TOD_HIGH:
1125 ret = 0;
1126 break;
1127 default:
1128 ret = -ENXIO;
1129 break;
1130 }
1131 break;
658b6eda
MM
1132 case KVM_S390_VM_CPU_MODEL:
1133 switch (attr->attr) {
1134 case KVM_S390_VM_CPU_PROCESSOR:
1135 case KVM_S390_VM_CPU_MACHINE:
15c9705f
DH
1136 case KVM_S390_VM_CPU_PROCESSOR_FEAT:
1137 case KVM_S390_VM_CPU_MACHINE_FEAT:
0a763c78 1138 case KVM_S390_VM_CPU_MACHINE_SUBFUNC:
658b6eda
MM
1139 ret = 0;
1140 break;
0a763c78
DH
1141 /* configuring subfunctions is not supported yet */
1142 case KVM_S390_VM_CPU_PROCESSOR_SUBFUNC:
658b6eda
MM
1143 default:
1144 ret = -ENXIO;
1145 break;
1146 }
1147 break;
a374e892
TK
1148 case KVM_S390_VM_CRYPTO:
1149 switch (attr->attr) {
1150 case KVM_S390_VM_CRYPTO_ENABLE_AES_KW:
1151 case KVM_S390_VM_CRYPTO_ENABLE_DEA_KW:
1152 case KVM_S390_VM_CRYPTO_DISABLE_AES_KW:
1153 case KVM_S390_VM_CRYPTO_DISABLE_DEA_KW:
1154 ret = 0;
1155 break;
1156 default:
1157 ret = -ENXIO;
1158 break;
1159 }
1160 break;
f2061656
DD
1161 default:
1162 ret = -ENXIO;
1163 break;
1164 }
1165
1166 return ret;
1167}
1168
30ee2a98
JH
1169static long kvm_s390_get_skeys(struct kvm *kvm, struct kvm_s390_skeys *args)
1170{
1171 uint8_t *keys;
1172 uint64_t hva;
30ee2a98
JH
1173 int i, r = 0;
1174
1175 if (args->flags != 0)
1176 return -EINVAL;
1177
1178 /* Is this guest using storage keys? */
1179 if (!mm_use_skey(current->mm))
1180 return KVM_S390_GET_SKEYS_NONE;
1181
1182 /* Enforce sane limit on memory allocation */
1183 if (args->count < 1 || args->count > KVM_S390_SKEYS_MAX)
1184 return -EINVAL;
1185
1186 keys = kmalloc_array(args->count, sizeof(uint8_t),
1187 GFP_KERNEL | __GFP_NOWARN);
1188 if (!keys)
1189 keys = vmalloc(sizeof(uint8_t) * args->count);
1190 if (!keys)
1191 return -ENOMEM;
1192
d3ed1cee 1193 down_read(&current->mm->mmap_sem);
30ee2a98
JH
1194 for (i = 0; i < args->count; i++) {
1195 hva = gfn_to_hva(kvm, args->start_gfn + i);
1196 if (kvm_is_error_hva(hva)) {
1197 r = -EFAULT;
d3ed1cee 1198 break;
30ee2a98
JH
1199 }
1200
154c8c19
DH
1201 r = get_guest_storage_key(current->mm, hva, &keys[i]);
1202 if (r)
d3ed1cee 1203 break;
30ee2a98 1204 }
d3ed1cee
MS
1205 up_read(&current->mm->mmap_sem);
1206
1207 if (!r) {
1208 r = copy_to_user((uint8_t __user *)args->skeydata_addr, keys,
1209 sizeof(uint8_t) * args->count);
1210 if (r)
1211 r = -EFAULT;
30ee2a98
JH
1212 }
1213
30ee2a98
JH
1214 kvfree(keys);
1215 return r;
1216}
1217
1218static long kvm_s390_set_skeys(struct kvm *kvm, struct kvm_s390_skeys *args)
1219{
1220 uint8_t *keys;
1221 uint64_t hva;
1222 int i, r = 0;
1223
1224 if (args->flags != 0)
1225 return -EINVAL;
1226
1227 /* Enforce sane limit on memory allocation */
1228 if (args->count < 1 || args->count > KVM_S390_SKEYS_MAX)
1229 return -EINVAL;
1230
1231 keys = kmalloc_array(args->count, sizeof(uint8_t),
1232 GFP_KERNEL | __GFP_NOWARN);
1233 if (!keys)
1234 keys = vmalloc(sizeof(uint8_t) * args->count);
1235 if (!keys)
1236 return -ENOMEM;
1237
1238 r = copy_from_user(keys, (uint8_t __user *)args->skeydata_addr,
1239 sizeof(uint8_t) * args->count);
1240 if (r) {
1241 r = -EFAULT;
1242 goto out;
1243 }
1244
1245 /* Enable storage key handling for the guest */
14d4a425
DD
1246 r = s390_enable_skey();
1247 if (r)
1248 goto out;
30ee2a98 1249
d3ed1cee 1250 down_read(&current->mm->mmap_sem);
30ee2a98
JH
1251 for (i = 0; i < args->count; i++) {
1252 hva = gfn_to_hva(kvm, args->start_gfn + i);
1253 if (kvm_is_error_hva(hva)) {
1254 r = -EFAULT;
d3ed1cee 1255 break;
30ee2a98
JH
1256 }
1257
1258 /* Lowest order bit is reserved */
1259 if (keys[i] & 0x01) {
1260 r = -EINVAL;
d3ed1cee 1261 break;
30ee2a98
JH
1262 }
1263
fe69eabf 1264 r = set_guest_storage_key(current->mm, hva, keys[i], 0);
30ee2a98 1265 if (r)
d3ed1cee 1266 break;
30ee2a98 1267 }
d3ed1cee 1268 up_read(&current->mm->mmap_sem);
30ee2a98
JH
1269out:
1270 kvfree(keys);
1271 return r;
1272}
1273
b0c632db
HC
1274long kvm_arch_vm_ioctl(struct file *filp,
1275 unsigned int ioctl, unsigned long arg)
1276{
1277 struct kvm *kvm = filp->private_data;
1278 void __user *argp = (void __user *)arg;
f2061656 1279 struct kvm_device_attr attr;
b0c632db
HC
1280 int r;
1281
1282 switch (ioctl) {
ba5c1e9b
CO
1283 case KVM_S390_INTERRUPT: {
1284 struct kvm_s390_interrupt s390int;
1285
1286 r = -EFAULT;
1287 if (copy_from_user(&s390int, argp, sizeof(s390int)))
1288 break;
1289 r = kvm_s390_inject_vm(kvm, &s390int);
1290 break;
1291 }
d938dc55
CH
1292 case KVM_ENABLE_CAP: {
1293 struct kvm_enable_cap cap;
1294 r = -EFAULT;
1295 if (copy_from_user(&cap, argp, sizeof(cap)))
1296 break;
1297 r = kvm_vm_ioctl_enable_cap(kvm, &cap);
1298 break;
1299 }
84223598
CH
1300 case KVM_CREATE_IRQCHIP: {
1301 struct kvm_irq_routing_entry routing;
1302
1303 r = -EINVAL;
1304 if (kvm->arch.use_irqchip) {
1305 /* Set up dummy routing. */
1306 memset(&routing, 0, sizeof(routing));
152b2839 1307 r = kvm_set_irq_routing(kvm, &routing, 0, 0);
84223598
CH
1308 }
1309 break;
1310 }
f2061656
DD
1311 case KVM_SET_DEVICE_ATTR: {
1312 r = -EFAULT;
1313 if (copy_from_user(&attr, (void __user *)arg, sizeof(attr)))
1314 break;
1315 r = kvm_s390_vm_set_attr(kvm, &attr);
1316 break;
1317 }
1318 case KVM_GET_DEVICE_ATTR: {
1319 r = -EFAULT;
1320 if (copy_from_user(&attr, (void __user *)arg, sizeof(attr)))
1321 break;
1322 r = kvm_s390_vm_get_attr(kvm, &attr);
1323 break;
1324 }
1325 case KVM_HAS_DEVICE_ATTR: {
1326 r = -EFAULT;
1327 if (copy_from_user(&attr, (void __user *)arg, sizeof(attr)))
1328 break;
1329 r = kvm_s390_vm_has_attr(kvm, &attr);
1330 break;
1331 }
30ee2a98
JH
1332 case KVM_S390_GET_SKEYS: {
1333 struct kvm_s390_skeys args;
1334
1335 r = -EFAULT;
1336 if (copy_from_user(&args, argp,
1337 sizeof(struct kvm_s390_skeys)))
1338 break;
1339 r = kvm_s390_get_skeys(kvm, &args);
1340 break;
1341 }
1342 case KVM_S390_SET_SKEYS: {
1343 struct kvm_s390_skeys args;
1344
1345 r = -EFAULT;
1346 if (copy_from_user(&args, argp,
1347 sizeof(struct kvm_s390_skeys)))
1348 break;
1349 r = kvm_s390_set_skeys(kvm, &args);
1350 break;
1351 }
b0c632db 1352 default:
367e1319 1353 r = -ENOTTY;
b0c632db
HC
1354 }
1355
1356 return r;
1357}
1358
45c9b47c
TK
1359static int kvm_s390_query_ap_config(u8 *config)
1360{
1361 u32 fcn_code = 0x04000000UL;
86044c8c 1362 u32 cc = 0;
45c9b47c 1363
86044c8c 1364 memset(config, 0, 128);
45c9b47c
TK
1365 asm volatile(
1366 "lgr 0,%1\n"
1367 "lgr 2,%2\n"
1368 ".long 0xb2af0000\n" /* PQAP(QCI) */
86044c8c 1369 "0: ipm %0\n"
45c9b47c 1370 "srl %0,28\n"
86044c8c
CB
1371 "1:\n"
1372 EX_TABLE(0b, 1b)
1373 : "+r" (cc)
45c9b47c
TK
1374 : "r" (fcn_code), "r" (config)
1375 : "cc", "0", "2", "memory"
1376 );
1377
1378 return cc;
1379}
1380
1381static int kvm_s390_apxa_installed(void)
1382{
1383 u8 config[128];
1384 int cc;
1385
a6aacc3f 1386 if (test_facility(12)) {
45c9b47c
TK
1387 cc = kvm_s390_query_ap_config(config);
1388
1389 if (cc)
1390 pr_err("PQAP(QCI) failed with cc=%d", cc);
1391 else
1392 return config[0] & 0x40;
1393 }
1394
1395 return 0;
1396}
1397
1398static void kvm_s390_set_crycb_format(struct kvm *kvm)
1399{
1400 kvm->arch.crypto.crycbd = (__u32)(unsigned long) kvm->arch.crypto.crycb;
1401
1402 if (kvm_s390_apxa_installed())
1403 kvm->arch.crypto.crycbd |= CRYCB_FORMAT2;
1404 else
1405 kvm->arch.crypto.crycbd |= CRYCB_FORMAT1;
1406}
1407
9bb0ec09 1408static u64 kvm_s390_get_initial_cpuid(void)
9d8d5786 1409{
9bb0ec09
DH
1410 struct cpuid cpuid;
1411
1412 get_cpu_id(&cpuid);
1413 cpuid.version = 0xff;
1414 return *((u64 *) &cpuid);
9d8d5786
MM
1415}
1416
c54f0d6a 1417static void kvm_s390_crypto_init(struct kvm *kvm)
5102ee87 1418{
9d8d5786 1419 if (!test_kvm_facility(kvm, 76))
c54f0d6a 1420 return;
5102ee87 1421
c54f0d6a 1422 kvm->arch.crypto.crycb = &kvm->arch.sie_page2->crycb;
45c9b47c 1423 kvm_s390_set_crycb_format(kvm);
5102ee87 1424
ed6f76b4
TK
1425 /* Enable AES/DEA protected key functions by default */
1426 kvm->arch.crypto.aes_kw = 1;
1427 kvm->arch.crypto.dea_kw = 1;
1428 get_random_bytes(kvm->arch.crypto.crycb->aes_wrapping_key_mask,
1429 sizeof(kvm->arch.crypto.crycb->aes_wrapping_key_mask));
1430 get_random_bytes(kvm->arch.crypto.crycb->dea_wrapping_key_mask,
1431 sizeof(kvm->arch.crypto.crycb->dea_wrapping_key_mask));
5102ee87
TK
1432}
1433
7d43bafc
ED
1434static void sca_dispose(struct kvm *kvm)
1435{
1436 if (kvm->arch.use_esca)
5e044315 1437 free_pages_exact(kvm->arch.sca, sizeof(struct esca_block));
7d43bafc
ED
1438 else
1439 free_page((unsigned long)(kvm->arch.sca));
1440 kvm->arch.sca = NULL;
1441}
1442
e08b9637 1443int kvm_arch_init_vm(struct kvm *kvm, unsigned long type)
b0c632db 1444{
76a6dd72 1445 gfp_t alloc_flags = GFP_KERNEL;
9d8d5786 1446 int i, rc;
b0c632db 1447 char debug_name[16];
f6c137ff 1448 static unsigned long sca_offset;
b0c632db 1449
e08b9637
CO
1450 rc = -EINVAL;
1451#ifdef CONFIG_KVM_S390_UCONTROL
1452 if (type & ~KVM_VM_S390_UCONTROL)
1453 goto out_err;
1454 if ((type & KVM_VM_S390_UCONTROL) && (!capable(CAP_SYS_ADMIN)))
1455 goto out_err;
1456#else
1457 if (type)
1458 goto out_err;
1459#endif
1460
b0c632db
HC
1461 rc = s390_enable_sie();
1462 if (rc)
d89f5eff 1463 goto out_err;
b0c632db 1464
b290411a
CO
1465 rc = -ENOMEM;
1466
7d0a5e62
JF
1467 ratelimit_state_init(&kvm->arch.sthyi_limit, 5 * HZ, 500);
1468
7d43bafc 1469 kvm->arch.use_esca = 0; /* start with basic SCA */
76a6dd72
DH
1470 if (!sclp.has_64bscao)
1471 alloc_flags |= GFP_DMA;
5e044315 1472 rwlock_init(&kvm->arch.sca_lock);
76a6dd72 1473 kvm->arch.sca = (struct bsca_block *) get_zeroed_page(alloc_flags);
b0c632db 1474 if (!kvm->arch.sca)
d89f5eff 1475 goto out_err;
f6c137ff 1476 spin_lock(&kvm_lock);
c5c2c393 1477 sca_offset += 16;
bc784cce 1478 if (sca_offset + sizeof(struct bsca_block) > PAGE_SIZE)
c5c2c393 1479 sca_offset = 0;
bc784cce
ED
1480 kvm->arch.sca = (struct bsca_block *)
1481 ((char *) kvm->arch.sca + sca_offset);
f6c137ff 1482 spin_unlock(&kvm_lock);
b0c632db
HC
1483
1484 sprintf(debug_name, "kvm-%u", current->pid);
1485
1cb9cf72 1486 kvm->arch.dbf = debug_register(debug_name, 32, 1, 7 * sizeof(long));
b0c632db 1487 if (!kvm->arch.dbf)
40f5b735 1488 goto out_err;
b0c632db 1489
c54f0d6a
DH
1490 kvm->arch.sie_page2 =
1491 (struct sie_page2 *) get_zeroed_page(GFP_KERNEL | GFP_DMA);
1492 if (!kvm->arch.sie_page2)
40f5b735 1493 goto out_err;
9d8d5786 1494
fb5bf93f 1495 /* Populate the facility mask initially. */
c54f0d6a 1496 memcpy(kvm->arch.model.fac_mask, S390_lowcore.stfle_fac_list,
04478197 1497 sizeof(S390_lowcore.stfle_fac_list));
9d8d5786
MM
1498 for (i = 0; i < S390_ARCH_FAC_LIST_SIZE_U64; i++) {
1499 if (i < kvm_s390_fac_list_mask_size())
c54f0d6a 1500 kvm->arch.model.fac_mask[i] &= kvm_s390_fac_list_mask[i];
9d8d5786 1501 else
c54f0d6a 1502 kvm->arch.model.fac_mask[i] = 0UL;
9d8d5786
MM
1503 }
1504
981467c9 1505 /* Populate the facility list initially. */
c54f0d6a
DH
1506 kvm->arch.model.fac_list = kvm->arch.sie_page2->fac_list;
1507 memcpy(kvm->arch.model.fac_list, kvm->arch.model.fac_mask,
981467c9
MM
1508 S390_ARCH_FAC_LIST_SIZE_BYTE);
1509
95ca2cb5
JF
1510 set_kvm_facility(kvm->arch.model.fac_mask, 74);
1511 set_kvm_facility(kvm->arch.model.fac_list, 74);
1512
9bb0ec09 1513 kvm->arch.model.cpuid = kvm_s390_get_initial_cpuid();
37c5f6c8 1514 kvm->arch.model.ibc = sclp.ibc & 0x0fff;
9d8d5786 1515
c54f0d6a 1516 kvm_s390_crypto_init(kvm);
5102ee87 1517
ba5c1e9b 1518 spin_lock_init(&kvm->arch.float_int.lock);
6d3da241
JF
1519 for (i = 0; i < FIRQ_LIST_COUNT; i++)
1520 INIT_LIST_HEAD(&kvm->arch.float_int.lists[i]);
8a242234 1521 init_waitqueue_head(&kvm->arch.ipte_wq);
a6b7e459 1522 mutex_init(&kvm->arch.ipte_mutex);
ba5c1e9b 1523
b0c632db 1524 debug_register_view(kvm->arch.dbf, &debug_sprintf_view);
78f26131 1525 VM_EVENT(kvm, 3, "vm created with type %lu", type);
b0c632db 1526
e08b9637
CO
1527 if (type & KVM_VM_S390_UCONTROL) {
1528 kvm->arch.gmap = NULL;
a3a92c31 1529 kvm->arch.mem_limit = KVM_S390_NO_MEM_LIMIT;
e08b9637 1530 } else {
32e6b236
GH
1531 if (sclp.hamax == U64_MAX)
1532 kvm->arch.mem_limit = TASK_MAX_SIZE;
1533 else
1534 kvm->arch.mem_limit = min_t(unsigned long, TASK_MAX_SIZE,
1535 sclp.hamax + 1);
6ea427bb 1536 kvm->arch.gmap = gmap_create(current->mm, kvm->arch.mem_limit - 1);
e08b9637 1537 if (!kvm->arch.gmap)
40f5b735 1538 goto out_err;
2c70fe44 1539 kvm->arch.gmap->private = kvm;
24eb3a82 1540 kvm->arch.gmap->pfault_enabled = 0;
e08b9637 1541 }
fa6b7fe9
CH
1542
1543 kvm->arch.css_support = 0;
84223598 1544 kvm->arch.use_irqchip = 0;
72f25020 1545 kvm->arch.epoch = 0;
fa6b7fe9 1546
8ad35755 1547 spin_lock_init(&kvm->arch.start_stop_lock);
a3508fbe 1548 kvm_s390_vsie_init(kvm);
8335713a 1549 KVM_EVENT(3, "vm 0x%pK created by pid %u", kvm, current->pid);
8ad35755 1550
d89f5eff 1551 return 0;
40f5b735 1552out_err:
c54f0d6a 1553 free_page((unsigned long)kvm->arch.sie_page2);
598841ca 1554 debug_unregister(kvm->arch.dbf);
7d43bafc 1555 sca_dispose(kvm);
78f26131 1556 KVM_EVENT(3, "creation of vm failed: %d", rc);
d89f5eff 1557 return rc;
b0c632db
HC
1558}
1559
235539b4
LC
1560bool kvm_arch_has_vcpu_debugfs(void)
1561{
1562 return false;
1563}
1564
1565int kvm_arch_create_vcpu_debugfs(struct kvm_vcpu *vcpu)
1566{
1567 return 0;
1568}
1569
d329c035
CB
1570void kvm_arch_vcpu_destroy(struct kvm_vcpu *vcpu)
1571{
1572 VCPU_EVENT(vcpu, 3, "%s", "free cpu");
ade38c31 1573 trace_kvm_s390_destroy_vcpu(vcpu->vcpu_id);
67335e63 1574 kvm_s390_clear_local_irqs(vcpu);
3c038e6b 1575 kvm_clear_async_pf_completion_queue(vcpu);
bc784cce 1576 if (!kvm_is_ucontrol(vcpu->kvm))
a6e2f683 1577 sca_del_vcpu(vcpu);
27e0393f
CO
1578
1579 if (kvm_is_ucontrol(vcpu->kvm))
6ea427bb 1580 gmap_remove(vcpu->arch.gmap);
27e0393f 1581
e6db1d61 1582 if (vcpu->kvm->arch.use_cmma)
b31605c1 1583 kvm_s390_vcpu_unsetup_cmma(vcpu);
d329c035 1584 free_page((unsigned long)(vcpu->arch.sie_block));
b31288fa 1585
6692cef3 1586 kvm_vcpu_uninit(vcpu);
b110feaf 1587 kmem_cache_free(kvm_vcpu_cache, vcpu);
d329c035
CB
1588}
1589
1590static void kvm_free_vcpus(struct kvm *kvm)
1591{
1592 unsigned int i;
988a2cae 1593 struct kvm_vcpu *vcpu;
d329c035 1594
988a2cae
GN
1595 kvm_for_each_vcpu(i, vcpu, kvm)
1596 kvm_arch_vcpu_destroy(vcpu);
1597
1598 mutex_lock(&kvm->lock);
1599 for (i = 0; i < atomic_read(&kvm->online_vcpus); i++)
1600 kvm->vcpus[i] = NULL;
1601
1602 atomic_set(&kvm->online_vcpus, 0);
1603 mutex_unlock(&kvm->lock);
d329c035
CB
1604}
1605
b0c632db
HC
1606void kvm_arch_destroy_vm(struct kvm *kvm)
1607{
d329c035 1608 kvm_free_vcpus(kvm);
7d43bafc 1609 sca_dispose(kvm);
d329c035 1610 debug_unregister(kvm->arch.dbf);
c54f0d6a 1611 free_page((unsigned long)kvm->arch.sie_page2);
27e0393f 1612 if (!kvm_is_ucontrol(kvm))
6ea427bb 1613 gmap_remove(kvm->arch.gmap);
841b91c5 1614 kvm_s390_destroy_adapters(kvm);
67335e63 1615 kvm_s390_clear_float_irqs(kvm);
a3508fbe 1616 kvm_s390_vsie_destroy(kvm);
8335713a 1617 KVM_EVENT(3, "vm 0x%pK destroyed", kvm);
b0c632db
HC
1618}
1619
1620/* Section: vcpu related */
dafd032a
DD
1621static int __kvm_ucontrol_vcpu_init(struct kvm_vcpu *vcpu)
1622{
6ea427bb 1623 vcpu->arch.gmap = gmap_create(current->mm, -1UL);
dafd032a
DD
1624 if (!vcpu->arch.gmap)
1625 return -ENOMEM;
1626 vcpu->arch.gmap->private = vcpu->kvm;
1627
1628 return 0;
1629}
1630
a6e2f683
ED
1631static void sca_del_vcpu(struct kvm_vcpu *vcpu)
1632{
a6940674
DH
1633 if (!kvm_s390_use_sca_entries())
1634 return;
5e044315 1635 read_lock(&vcpu->kvm->arch.sca_lock);
7d43bafc
ED
1636 if (vcpu->kvm->arch.use_esca) {
1637 struct esca_block *sca = vcpu->kvm->arch.sca;
a6e2f683 1638
7d43bafc 1639 clear_bit_inv(vcpu->vcpu_id, (unsigned long *) sca->mcn);
10ce32d5 1640 sca->cpu[vcpu->vcpu_id].sda = 0;
7d43bafc
ED
1641 } else {
1642 struct bsca_block *sca = vcpu->kvm->arch.sca;
1643
1644 clear_bit_inv(vcpu->vcpu_id, (unsigned long *) &sca->mcn);
10ce32d5 1645 sca->cpu[vcpu->vcpu_id].sda = 0;
7d43bafc 1646 }
5e044315 1647 read_unlock(&vcpu->kvm->arch.sca_lock);
a6e2f683
ED
1648}
1649
eaa78f34 1650static void sca_add_vcpu(struct kvm_vcpu *vcpu)
a6e2f683 1651{
a6940674
DH
1652 if (!kvm_s390_use_sca_entries()) {
1653 struct bsca_block *sca = vcpu->kvm->arch.sca;
1654
1655 /* we still need the basic sca for the ipte control */
1656 vcpu->arch.sie_block->scaoh = (__u32)(((__u64)sca) >> 32);
1657 vcpu->arch.sie_block->scaol = (__u32)(__u64)sca;
1658 }
eaa78f34
DH
1659 read_lock(&vcpu->kvm->arch.sca_lock);
1660 if (vcpu->kvm->arch.use_esca) {
1661 struct esca_block *sca = vcpu->kvm->arch.sca;
7d43bafc 1662
eaa78f34 1663 sca->cpu[vcpu->vcpu_id].sda = (__u64) vcpu->arch.sie_block;
7d43bafc
ED
1664 vcpu->arch.sie_block->scaoh = (__u32)(((__u64)sca) >> 32);
1665 vcpu->arch.sie_block->scaol = (__u32)(__u64)sca & ~0x3fU;
0c9d8683 1666 vcpu->arch.sie_block->ecb2 |= ECB2_ESCA;
eaa78f34 1667 set_bit_inv(vcpu->vcpu_id, (unsigned long *) sca->mcn);
7d43bafc 1668 } else {
eaa78f34 1669 struct bsca_block *sca = vcpu->kvm->arch.sca;
a6e2f683 1670
eaa78f34 1671 sca->cpu[vcpu->vcpu_id].sda = (__u64) vcpu->arch.sie_block;
7d43bafc
ED
1672 vcpu->arch.sie_block->scaoh = (__u32)(((__u64)sca) >> 32);
1673 vcpu->arch.sie_block->scaol = (__u32)(__u64)sca;
eaa78f34 1674 set_bit_inv(vcpu->vcpu_id, (unsigned long *) &sca->mcn);
7d43bafc 1675 }
eaa78f34 1676 read_unlock(&vcpu->kvm->arch.sca_lock);
5e044315
ED
1677}
1678
1679/* Basic SCA to Extended SCA data copy routines */
1680static inline void sca_copy_entry(struct esca_entry *d, struct bsca_entry *s)
1681{
1682 d->sda = s->sda;
1683 d->sigp_ctrl.c = s->sigp_ctrl.c;
1684 d->sigp_ctrl.scn = s->sigp_ctrl.scn;
1685}
1686
1687static void sca_copy_b_to_e(struct esca_block *d, struct bsca_block *s)
1688{
1689 int i;
1690
1691 d->ipte_control = s->ipte_control;
1692 d->mcn[0] = s->mcn;
1693 for (i = 0; i < KVM_S390_BSCA_CPU_SLOTS; i++)
1694 sca_copy_entry(&d->cpu[i], &s->cpu[i]);
1695}
1696
1697static int sca_switch_to_extended(struct kvm *kvm)
1698{
1699 struct bsca_block *old_sca = kvm->arch.sca;
1700 struct esca_block *new_sca;
1701 struct kvm_vcpu *vcpu;
1702 unsigned int vcpu_idx;
1703 u32 scaol, scaoh;
1704
1705 new_sca = alloc_pages_exact(sizeof(*new_sca), GFP_KERNEL|__GFP_ZERO);
1706 if (!new_sca)
1707 return -ENOMEM;
1708
1709 scaoh = (u32)((u64)(new_sca) >> 32);
1710 scaol = (u32)(u64)(new_sca) & ~0x3fU;
1711
1712 kvm_s390_vcpu_block_all(kvm);
1713 write_lock(&kvm->arch.sca_lock);
1714
1715 sca_copy_b_to_e(new_sca, old_sca);
1716
1717 kvm_for_each_vcpu(vcpu_idx, vcpu, kvm) {
1718 vcpu->arch.sie_block->scaoh = scaoh;
1719 vcpu->arch.sie_block->scaol = scaol;
0c9d8683 1720 vcpu->arch.sie_block->ecb2 |= ECB2_ESCA;
5e044315
ED
1721 }
1722 kvm->arch.sca = new_sca;
1723 kvm->arch.use_esca = 1;
1724
1725 write_unlock(&kvm->arch.sca_lock);
1726 kvm_s390_vcpu_unblock_all(kvm);
1727
1728 free_page((unsigned long)old_sca);
1729
8335713a
CB
1730 VM_EVENT(kvm, 2, "Switched to ESCA (0x%pK -> 0x%pK)",
1731 old_sca, kvm->arch.sca);
5e044315 1732 return 0;
a6e2f683
ED
1733}
1734
1735static int sca_can_add_vcpu(struct kvm *kvm, unsigned int id)
1736{
5e044315
ED
1737 int rc;
1738
a6940674
DH
1739 if (!kvm_s390_use_sca_entries()) {
1740 if (id < KVM_MAX_VCPUS)
1741 return true;
1742 return false;
1743 }
5e044315
ED
1744 if (id < KVM_S390_BSCA_CPU_SLOTS)
1745 return true;
76a6dd72 1746 if (!sclp.has_esca || !sclp.has_64bscao)
5e044315
ED
1747 return false;
1748
1749 mutex_lock(&kvm->lock);
1750 rc = kvm->arch.use_esca ? 0 : sca_switch_to_extended(kvm);
1751 mutex_unlock(&kvm->lock);
1752
1753 return rc == 0 && id < KVM_S390_ESCA_CPU_SLOTS;
a6e2f683
ED
1754}
1755
b0c632db
HC
1756int kvm_arch_vcpu_init(struct kvm_vcpu *vcpu)
1757{
3c038e6b
DD
1758 vcpu->arch.pfault_token = KVM_S390_PFAULT_TOKEN_INVALID;
1759 kvm_clear_async_pf_completion_queue(vcpu);
59674c1a
CB
1760 vcpu->run->kvm_valid_regs = KVM_SYNC_PREFIX |
1761 KVM_SYNC_GPRS |
9eed0735 1762 KVM_SYNC_ACRS |
b028ee3e
DH
1763 KVM_SYNC_CRS |
1764 KVM_SYNC_ARCH0 |
1765 KVM_SYNC_PFAULT;
75a4615c 1766 kvm_s390_set_prefix(vcpu, 0);
c6e5f166
FZ
1767 if (test_kvm_facility(vcpu->kvm, 64))
1768 vcpu->run->kvm_valid_regs |= KVM_SYNC_RICCB;
4e0b1ab7
FZ
1769 if (test_kvm_facility(vcpu->kvm, 133))
1770 vcpu->run->kvm_valid_regs |= KVM_SYNC_GSCB;
f6aa6dc4
DH
1771 /* fprs can be synchronized via vrs, even if the guest has no vx. With
1772 * MACHINE_HAS_VX, (load|store)_fpu_regs() will work with vrs format.
1773 */
1774 if (MACHINE_HAS_VX)
68c55750 1775 vcpu->run->kvm_valid_regs |= KVM_SYNC_VRS;
6fd8e67d
DH
1776 else
1777 vcpu->run->kvm_valid_regs |= KVM_SYNC_FPRS;
dafd032a
DD
1778
1779 if (kvm_is_ucontrol(vcpu->kvm))
1780 return __kvm_ucontrol_vcpu_init(vcpu);
1781
b0c632db
HC
1782 return 0;
1783}
1784
db0758b2
DH
1785/* needs disabled preemption to protect from TOD sync and vcpu_load/put */
1786static void __start_cpu_timer_accounting(struct kvm_vcpu *vcpu)
1787{
1788 WARN_ON_ONCE(vcpu->arch.cputm_start != 0);
9c23a131 1789 raw_write_seqcount_begin(&vcpu->arch.cputm_seqcount);
db0758b2 1790 vcpu->arch.cputm_start = get_tod_clock_fast();
9c23a131 1791 raw_write_seqcount_end(&vcpu->arch.cputm_seqcount);
db0758b2
DH
1792}
1793
1794/* needs disabled preemption to protect from TOD sync and vcpu_load/put */
1795static void __stop_cpu_timer_accounting(struct kvm_vcpu *vcpu)
1796{
1797 WARN_ON_ONCE(vcpu->arch.cputm_start == 0);
9c23a131 1798 raw_write_seqcount_begin(&vcpu->arch.cputm_seqcount);
db0758b2
DH
1799 vcpu->arch.sie_block->cputm -= get_tod_clock_fast() - vcpu->arch.cputm_start;
1800 vcpu->arch.cputm_start = 0;
9c23a131 1801 raw_write_seqcount_end(&vcpu->arch.cputm_seqcount);
db0758b2
DH
1802}
1803
1804/* needs disabled preemption to protect from TOD sync and vcpu_load/put */
1805static void __enable_cpu_timer_accounting(struct kvm_vcpu *vcpu)
1806{
1807 WARN_ON_ONCE(vcpu->arch.cputm_enabled);
1808 vcpu->arch.cputm_enabled = true;
1809 __start_cpu_timer_accounting(vcpu);
1810}
1811
1812/* needs disabled preemption to protect from TOD sync and vcpu_load/put */
1813static void __disable_cpu_timer_accounting(struct kvm_vcpu *vcpu)
1814{
1815 WARN_ON_ONCE(!vcpu->arch.cputm_enabled);
1816 __stop_cpu_timer_accounting(vcpu);
1817 vcpu->arch.cputm_enabled = false;
1818}
1819
1820static void enable_cpu_timer_accounting(struct kvm_vcpu *vcpu)
1821{
1822 preempt_disable(); /* protect from TOD sync and vcpu_load/put */
1823 __enable_cpu_timer_accounting(vcpu);
1824 preempt_enable();
1825}
1826
1827static void disable_cpu_timer_accounting(struct kvm_vcpu *vcpu)
1828{
1829 preempt_disable(); /* protect from TOD sync and vcpu_load/put */
1830 __disable_cpu_timer_accounting(vcpu);
1831 preempt_enable();
1832}
1833
4287f247
DH
1834/* set the cpu timer - may only be called from the VCPU thread itself */
1835void kvm_s390_set_cpu_timer(struct kvm_vcpu *vcpu, __u64 cputm)
1836{
db0758b2 1837 preempt_disable(); /* protect from TOD sync and vcpu_load/put */
9c23a131 1838 raw_write_seqcount_begin(&vcpu->arch.cputm_seqcount);
db0758b2
DH
1839 if (vcpu->arch.cputm_enabled)
1840 vcpu->arch.cputm_start = get_tod_clock_fast();
4287f247 1841 vcpu->arch.sie_block->cputm = cputm;
9c23a131 1842 raw_write_seqcount_end(&vcpu->arch.cputm_seqcount);
db0758b2 1843 preempt_enable();
4287f247
DH
1844}
1845
db0758b2 1846/* update and get the cpu timer - can also be called from other VCPU threads */
4287f247
DH
1847__u64 kvm_s390_get_cpu_timer(struct kvm_vcpu *vcpu)
1848{
9c23a131 1849 unsigned int seq;
db0758b2 1850 __u64 value;
db0758b2
DH
1851
1852 if (unlikely(!vcpu->arch.cputm_enabled))
1853 return vcpu->arch.sie_block->cputm;
1854
9c23a131
DH
1855 preempt_disable(); /* protect from TOD sync and vcpu_load/put */
1856 do {
1857 seq = raw_read_seqcount(&vcpu->arch.cputm_seqcount);
1858 /*
1859 * If the writer would ever execute a read in the critical
1860 * section, e.g. in irq context, we have a deadlock.
1861 */
1862 WARN_ON_ONCE((seq & 1) && smp_processor_id() == vcpu->cpu);
1863 value = vcpu->arch.sie_block->cputm;
1864 /* if cputm_start is 0, accounting is being started/stopped */
1865 if (likely(vcpu->arch.cputm_start))
1866 value -= get_tod_clock_fast() - vcpu->arch.cputm_start;
1867 } while (read_seqcount_retry(&vcpu->arch.cputm_seqcount, seq & ~1));
1868 preempt_enable();
db0758b2 1869 return value;
4287f247
DH
1870}
1871
b0c632db
HC
1872void kvm_arch_vcpu_load(struct kvm_vcpu *vcpu, int cpu)
1873{
9977e886 1874
37d9df98 1875 gmap_enable(vcpu->arch.enabled_gmap);
805de8f4 1876 atomic_or(CPUSTAT_RUNNING, &vcpu->arch.sie_block->cpuflags);
5ebda316 1877 if (vcpu->arch.cputm_enabled && !is_vcpu_idle(vcpu))
db0758b2 1878 __start_cpu_timer_accounting(vcpu);
01a745ac 1879 vcpu->cpu = cpu;
b0c632db
HC
1880}
1881
1882void kvm_arch_vcpu_put(struct kvm_vcpu *vcpu)
1883{
01a745ac 1884 vcpu->cpu = -1;
5ebda316 1885 if (vcpu->arch.cputm_enabled && !is_vcpu_idle(vcpu))
db0758b2 1886 __stop_cpu_timer_accounting(vcpu);
805de8f4 1887 atomic_andnot(CPUSTAT_RUNNING, &vcpu->arch.sie_block->cpuflags);
37d9df98
DH
1888 vcpu->arch.enabled_gmap = gmap_get_enabled();
1889 gmap_disable(vcpu->arch.enabled_gmap);
9977e886 1890
b0c632db
HC
1891}
1892
1893static void kvm_s390_vcpu_initial_reset(struct kvm_vcpu *vcpu)
1894{
1895 /* this equals initial cpu reset in pop, but we don't switch to ESA */
1896 vcpu->arch.sie_block->gpsw.mask = 0UL;
1897 vcpu->arch.sie_block->gpsw.addr = 0UL;
8d26cf7b 1898 kvm_s390_set_prefix(vcpu, 0);
4287f247 1899 kvm_s390_set_cpu_timer(vcpu, 0);
b0c632db
HC
1900 vcpu->arch.sie_block->ckc = 0UL;
1901 vcpu->arch.sie_block->todpr = 0;
1902 memset(vcpu->arch.sie_block->gcr, 0, 16 * sizeof(__u64));
1903 vcpu->arch.sie_block->gcr[0] = 0xE0UL;
1904 vcpu->arch.sie_block->gcr[14] = 0xC2000000UL;
9abc2a08
DH
1905 /* make sure the new fpc will be lazily loaded */
1906 save_fpu_regs();
1907 current->thread.fpu.fpc = 0;
b0c632db 1908 vcpu->arch.sie_block->gbea = 1;
672550fb 1909 vcpu->arch.sie_block->pp = 0;
3c038e6b
DD
1910 vcpu->arch.pfault_token = KVM_S390_PFAULT_TOKEN_INVALID;
1911 kvm_clear_async_pf_completion_queue(vcpu);
6352e4d2
DH
1912 if (!kvm_s390_user_cpu_state_ctrl(vcpu->kvm))
1913 kvm_s390_vcpu_stop(vcpu);
2ed10cc1 1914 kvm_s390_clear_local_irqs(vcpu);
b0c632db
HC
1915}
1916
31928aa5 1917void kvm_arch_vcpu_postcreate(struct kvm_vcpu *vcpu)
42897d86 1918{
72f25020 1919 mutex_lock(&vcpu->kvm->lock);
fdf03650 1920 preempt_disable();
72f25020 1921 vcpu->arch.sie_block->epoch = vcpu->kvm->arch.epoch;
fdf03650 1922 preempt_enable();
72f25020 1923 mutex_unlock(&vcpu->kvm->lock);
25508824 1924 if (!kvm_is_ucontrol(vcpu->kvm)) {
dafd032a 1925 vcpu->arch.gmap = vcpu->kvm->arch.gmap;
eaa78f34 1926 sca_add_vcpu(vcpu);
25508824 1927 }
6502a34c
DH
1928 if (test_kvm_facility(vcpu->kvm, 74) || vcpu->kvm->arch.user_instr0)
1929 vcpu->arch.sie_block->ictl |= ICTL_OPEREXC;
37d9df98
DH
1930 /* make vcpu_load load the right gmap on the first trigger */
1931 vcpu->arch.enabled_gmap = vcpu->arch.gmap;
42897d86
MT
1932}
1933
5102ee87
TK
1934static void kvm_s390_vcpu_crypto_setup(struct kvm_vcpu *vcpu)
1935{
9d8d5786 1936 if (!test_kvm_facility(vcpu->kvm, 76))
5102ee87
TK
1937 return;
1938
a374e892
TK
1939 vcpu->arch.sie_block->ecb3 &= ~(ECB3_AES | ECB3_DEA);
1940
1941 if (vcpu->kvm->arch.crypto.aes_kw)
1942 vcpu->arch.sie_block->ecb3 |= ECB3_AES;
1943 if (vcpu->kvm->arch.crypto.dea_kw)
1944 vcpu->arch.sie_block->ecb3 |= ECB3_DEA;
1945
5102ee87
TK
1946 vcpu->arch.sie_block->crycbd = vcpu->kvm->arch.crypto.crycbd;
1947}
1948
b31605c1
DD
1949void kvm_s390_vcpu_unsetup_cmma(struct kvm_vcpu *vcpu)
1950{
1951 free_page(vcpu->arch.sie_block->cbrlo);
1952 vcpu->arch.sie_block->cbrlo = 0;
1953}
1954
1955int kvm_s390_vcpu_setup_cmma(struct kvm_vcpu *vcpu)
1956{
1957 vcpu->arch.sie_block->cbrlo = get_zeroed_page(GFP_KERNEL);
1958 if (!vcpu->arch.sie_block->cbrlo)
1959 return -ENOMEM;
1960
0c9d8683
DH
1961 vcpu->arch.sie_block->ecb2 |= ECB2_CMMA;
1962 vcpu->arch.sie_block->ecb2 &= ~ECB2_PFMFI;
b31605c1
DD
1963 return 0;
1964}
1965
91520f1a
MM
1966static void kvm_s390_vcpu_setup_model(struct kvm_vcpu *vcpu)
1967{
1968 struct kvm_s390_cpu_model *model = &vcpu->kvm->arch.model;
1969
91520f1a 1970 vcpu->arch.sie_block->ibc = model->ibc;
80bc79dc 1971 if (test_kvm_facility(vcpu->kvm, 7))
c54f0d6a 1972 vcpu->arch.sie_block->fac = (u32)(u64) model->fac_list;
91520f1a
MM
1973}
1974
b0c632db
HC
1975int kvm_arch_vcpu_setup(struct kvm_vcpu *vcpu)
1976{
b31605c1 1977 int rc = 0;
b31288fa 1978
9e6dabef
CH
1979 atomic_set(&vcpu->arch.sie_block->cpuflags, CPUSTAT_ZARCH |
1980 CPUSTAT_SM |
a4a4f191
GH
1981 CPUSTAT_STOPPED);
1982
53df84f8 1983 if (test_kvm_facility(vcpu->kvm, 78))
805de8f4 1984 atomic_or(CPUSTAT_GED2, &vcpu->arch.sie_block->cpuflags);
53df84f8 1985 else if (test_kvm_facility(vcpu->kvm, 8))
805de8f4 1986 atomic_or(CPUSTAT_GED, &vcpu->arch.sie_block->cpuflags);
a4a4f191 1987
91520f1a
MM
1988 kvm_s390_vcpu_setup_model(vcpu);
1989
bdab09f3
DH
1990 /* pgste_set_pte has special handling for !MACHINE_HAS_ESOP */
1991 if (MACHINE_HAS_ESOP)
0c9d8683 1992 vcpu->arch.sie_block->ecb |= ECB_HOSTPROTINT;
bd50e8ec 1993 if (test_kvm_facility(vcpu->kvm, 9))
0c9d8683 1994 vcpu->arch.sie_block->ecb |= ECB_SRSI;
f597d24e 1995 if (test_kvm_facility(vcpu->kvm, 73))
0c9d8683 1996 vcpu->arch.sie_block->ecb |= ECB_TE;
7feb6bb8 1997
873b425e 1998 if (test_kvm_facility(vcpu->kvm, 8) && sclp.has_pfmfi)
0c9d8683 1999 vcpu->arch.sie_block->ecb2 |= ECB2_PFMFI;
cd1836f5 2000 if (test_kvm_facility(vcpu->kvm, 130))
0c9d8683
DH
2001 vcpu->arch.sie_block->ecb2 |= ECB2_IEP;
2002 vcpu->arch.sie_block->eca = ECA_MVPGI | ECA_PROTEXCI;
48ee7d3a 2003 if (sclp.has_cei)
0c9d8683 2004 vcpu->arch.sie_block->eca |= ECA_CEI;
11ad65b7 2005 if (sclp.has_ib)
0c9d8683 2006 vcpu->arch.sie_block->eca |= ECA_IB;
37c5f6c8 2007 if (sclp.has_siif)
0c9d8683 2008 vcpu->arch.sie_block->eca |= ECA_SII;
37c5f6c8 2009 if (sclp.has_sigpif)
0c9d8683 2010 vcpu->arch.sie_block->eca |= ECA_SIGPI;
18280d8b 2011 if (test_kvm_facility(vcpu->kvm, 129)) {
0c9d8683
DH
2012 vcpu->arch.sie_block->eca |= ECA_VX;
2013 vcpu->arch.sie_block->ecd |= ECD_HOSTREGMGMT;
13211ea7 2014 }
4e0b1ab7
FZ
2015 vcpu->arch.sie_block->sdnxo = ((unsigned long) &vcpu->run->s.regs.sdnx)
2016 | SDNXC;
c6e5f166 2017 vcpu->arch.sie_block->riccbd = (unsigned long) &vcpu->run->s.regs.riccb;
492d8642 2018 vcpu->arch.sie_block->ictl |= ICTL_ISKE | ICTL_SSKE | ICTL_RRBE;
5a5e6536 2019
e6db1d61 2020 if (vcpu->kvm->arch.use_cmma) {
b31605c1
DD
2021 rc = kvm_s390_vcpu_setup_cmma(vcpu);
2022 if (rc)
2023 return rc;
b31288fa 2024 }
0ac96caf 2025 hrtimer_init(&vcpu->arch.ckc_timer, CLOCK_MONOTONIC, HRTIMER_MODE_REL);
ca872302 2026 vcpu->arch.ckc_timer.function = kvm_s390_idle_wakeup;
9d8d5786 2027
5102ee87
TK
2028 kvm_s390_vcpu_crypto_setup(vcpu);
2029
b31605c1 2030 return rc;
b0c632db
HC
2031}
2032
2033struct kvm_vcpu *kvm_arch_vcpu_create(struct kvm *kvm,
2034 unsigned int id)
2035{
4d47555a 2036 struct kvm_vcpu *vcpu;
7feb6bb8 2037 struct sie_page *sie_page;
4d47555a
CO
2038 int rc = -EINVAL;
2039
4215825e 2040 if (!kvm_is_ucontrol(kvm) && !sca_can_add_vcpu(kvm, id))
4d47555a
CO
2041 goto out;
2042
2043 rc = -ENOMEM;
b0c632db 2044
b110feaf 2045 vcpu = kmem_cache_zalloc(kvm_vcpu_cache, GFP_KERNEL);
b0c632db 2046 if (!vcpu)
4d47555a 2047 goto out;
b0c632db 2048
7feb6bb8
MM
2049 sie_page = (struct sie_page *) get_zeroed_page(GFP_KERNEL);
2050 if (!sie_page)
b0c632db
HC
2051 goto out_free_cpu;
2052
7feb6bb8
MM
2053 vcpu->arch.sie_block = &sie_page->sie_block;
2054 vcpu->arch.sie_block->itdba = (unsigned long) &sie_page->itdb;
2055
efed1104
DH
2056 /* the real guest size will always be smaller than msl */
2057 vcpu->arch.sie_block->mso = 0;
2058 vcpu->arch.sie_block->msl = sclp.hamax;
2059
b0c632db 2060 vcpu->arch.sie_block->icpua = id;
ba5c1e9b 2061 spin_lock_init(&vcpu->arch.local_int.lock);
ba5c1e9b 2062 vcpu->arch.local_int.float_int = &kvm->arch.float_int;
d0321a24 2063 vcpu->arch.local_int.wq = &vcpu->wq;
5288fbf0 2064 vcpu->arch.local_int.cpuflags = &vcpu->arch.sie_block->cpuflags;
9c23a131 2065 seqcount_init(&vcpu->arch.cputm_seqcount);
ba5c1e9b 2066
b0c632db
HC
2067 rc = kvm_vcpu_init(vcpu, kvm, id);
2068 if (rc)
9abc2a08 2069 goto out_free_sie_block;
8335713a 2070 VM_EVENT(kvm, 3, "create cpu %d at 0x%pK, sie block at 0x%pK", id, vcpu,
b0c632db 2071 vcpu->arch.sie_block);
ade38c31 2072 trace_kvm_s390_create_vcpu(id, vcpu, vcpu->arch.sie_block);
b0c632db 2073
b0c632db 2074 return vcpu;
7b06bf2f
WY
2075out_free_sie_block:
2076 free_page((unsigned long)(vcpu->arch.sie_block));
b0c632db 2077out_free_cpu:
b110feaf 2078 kmem_cache_free(kvm_vcpu_cache, vcpu);
4d47555a 2079out:
b0c632db
HC
2080 return ERR_PTR(rc);
2081}
2082
b0c632db
HC
2083int kvm_arch_vcpu_runnable(struct kvm_vcpu *vcpu)
2084{
9a022067 2085 return kvm_s390_vcpu_has_irq(vcpu, 0);
b0c632db
HC
2086}
2087
27406cd5 2088void kvm_s390_vcpu_block(struct kvm_vcpu *vcpu)
49b99e1e 2089{
805de8f4 2090 atomic_or(PROG_BLOCK_SIE, &vcpu->arch.sie_block->prog20);
61a6df54 2091 exit_sie(vcpu);
49b99e1e
CB
2092}
2093
27406cd5 2094void kvm_s390_vcpu_unblock(struct kvm_vcpu *vcpu)
49b99e1e 2095{
805de8f4 2096 atomic_andnot(PROG_BLOCK_SIE, &vcpu->arch.sie_block->prog20);
49b99e1e
CB
2097}
2098
8e236546
CB
2099static void kvm_s390_vcpu_request(struct kvm_vcpu *vcpu)
2100{
805de8f4 2101 atomic_or(PROG_REQUEST, &vcpu->arch.sie_block->prog20);
61a6df54 2102 exit_sie(vcpu);
8e236546
CB
2103}
2104
2105static void kvm_s390_vcpu_request_handled(struct kvm_vcpu *vcpu)
2106{
9bf9fde2 2107 atomic_andnot(PROG_REQUEST, &vcpu->arch.sie_block->prog20);
8e236546
CB
2108}
2109
49b99e1e
CB
2110/*
2111 * Kick a guest cpu out of SIE and wait until SIE is not running.
2112 * If the CPU is not running (e.g. waiting as idle) the function will
2113 * return immediately. */
2114void exit_sie(struct kvm_vcpu *vcpu)
2115{
805de8f4 2116 atomic_or(CPUSTAT_STOP_INT, &vcpu->arch.sie_block->cpuflags);
49b99e1e
CB
2117 while (vcpu->arch.sie_block->prog0c & PROG_IN_SIE)
2118 cpu_relax();
2119}
2120
8e236546
CB
2121/* Kick a guest cpu out of SIE to process a request synchronously */
2122void kvm_s390_sync_request(int req, struct kvm_vcpu *vcpu)
49b99e1e 2123{
8e236546
CB
2124 kvm_make_request(req, vcpu);
2125 kvm_s390_vcpu_request(vcpu);
49b99e1e
CB
2126}
2127
414d3b07
MS
2128static void kvm_gmap_notifier(struct gmap *gmap, unsigned long start,
2129 unsigned long end)
2c70fe44 2130{
2c70fe44
CB
2131 struct kvm *kvm = gmap->private;
2132 struct kvm_vcpu *vcpu;
414d3b07
MS
2133 unsigned long prefix;
2134 int i;
2c70fe44 2135
65d0b0d4
DH
2136 if (gmap_is_shadow(gmap))
2137 return;
414d3b07
MS
2138 if (start >= 1UL << 31)
2139 /* We are only interested in prefix pages */
2140 return;
2c70fe44
CB
2141 kvm_for_each_vcpu(i, vcpu, kvm) {
2142 /* match against both prefix pages */
414d3b07
MS
2143 prefix = kvm_s390_get_prefix(vcpu);
2144 if (prefix <= end && start <= prefix + 2*PAGE_SIZE - 1) {
2145 VCPU_EVENT(vcpu, 2, "gmap notifier for %lx-%lx",
2146 start, end);
8e236546 2147 kvm_s390_sync_request(KVM_REQ_MMU_RELOAD, vcpu);
2c70fe44
CB
2148 }
2149 }
2150}
2151
b6d33834
CD
2152int kvm_arch_vcpu_should_kick(struct kvm_vcpu *vcpu)
2153{
2154 /* kvm common code refers to this, but never calls it */
2155 BUG();
2156 return 0;
2157}
2158
14eebd91
CO
2159static int kvm_arch_vcpu_ioctl_get_one_reg(struct kvm_vcpu *vcpu,
2160 struct kvm_one_reg *reg)
2161{
2162 int r = -EINVAL;
2163
2164 switch (reg->id) {
29b7c71b
CO
2165 case KVM_REG_S390_TODPR:
2166 r = put_user(vcpu->arch.sie_block->todpr,
2167 (u32 __user *)reg->addr);
2168 break;
2169 case KVM_REG_S390_EPOCHDIFF:
2170 r = put_user(vcpu->arch.sie_block->epoch,
2171 (u64 __user *)reg->addr);
2172 break;
46a6dd1c 2173 case KVM_REG_S390_CPU_TIMER:
4287f247 2174 r = put_user(kvm_s390_get_cpu_timer(vcpu),
46a6dd1c
J
2175 (u64 __user *)reg->addr);
2176 break;
2177 case KVM_REG_S390_CLOCK_COMP:
2178 r = put_user(vcpu->arch.sie_block->ckc,
2179 (u64 __user *)reg->addr);
2180 break;
536336c2
DD
2181 case KVM_REG_S390_PFTOKEN:
2182 r = put_user(vcpu->arch.pfault_token,
2183 (u64 __user *)reg->addr);
2184 break;
2185 case KVM_REG_S390_PFCOMPARE:
2186 r = put_user(vcpu->arch.pfault_compare,
2187 (u64 __user *)reg->addr);
2188 break;
2189 case KVM_REG_S390_PFSELECT:
2190 r = put_user(vcpu->arch.pfault_select,
2191 (u64 __user *)reg->addr);
2192 break;
672550fb
CB
2193 case KVM_REG_S390_PP:
2194 r = put_user(vcpu->arch.sie_block->pp,
2195 (u64 __user *)reg->addr);
2196 break;
afa45ff5
CB
2197 case KVM_REG_S390_GBEA:
2198 r = put_user(vcpu->arch.sie_block->gbea,
2199 (u64 __user *)reg->addr);
2200 break;
14eebd91
CO
2201 default:
2202 break;
2203 }
2204
2205 return r;
2206}
2207
2208static int kvm_arch_vcpu_ioctl_set_one_reg(struct kvm_vcpu *vcpu,
2209 struct kvm_one_reg *reg)
2210{
2211 int r = -EINVAL;
4287f247 2212 __u64 val;
14eebd91
CO
2213
2214 switch (reg->id) {
29b7c71b
CO
2215 case KVM_REG_S390_TODPR:
2216 r = get_user(vcpu->arch.sie_block->todpr,
2217 (u32 __user *)reg->addr);
2218 break;
2219 case KVM_REG_S390_EPOCHDIFF:
2220 r = get_user(vcpu->arch.sie_block->epoch,
2221 (u64 __user *)reg->addr);
2222 break;
46a6dd1c 2223 case KVM_REG_S390_CPU_TIMER:
4287f247
DH
2224 r = get_user(val, (u64 __user *)reg->addr);
2225 if (!r)
2226 kvm_s390_set_cpu_timer(vcpu, val);
46a6dd1c
J
2227 break;
2228 case KVM_REG_S390_CLOCK_COMP:
2229 r = get_user(vcpu->arch.sie_block->ckc,
2230 (u64 __user *)reg->addr);
2231 break;
536336c2
DD
2232 case KVM_REG_S390_PFTOKEN:
2233 r = get_user(vcpu->arch.pfault_token,
2234 (u64 __user *)reg->addr);
9fbd8082
DH
2235 if (vcpu->arch.pfault_token == KVM_S390_PFAULT_TOKEN_INVALID)
2236 kvm_clear_async_pf_completion_queue(vcpu);
536336c2
DD
2237 break;
2238 case KVM_REG_S390_PFCOMPARE:
2239 r = get_user(vcpu->arch.pfault_compare,
2240 (u64 __user *)reg->addr);
2241 break;
2242 case KVM_REG_S390_PFSELECT:
2243 r = get_user(vcpu->arch.pfault_select,
2244 (u64 __user *)reg->addr);
2245 break;
672550fb
CB
2246 case KVM_REG_S390_PP:
2247 r = get_user(vcpu->arch.sie_block->pp,
2248 (u64 __user *)reg->addr);
2249 break;
afa45ff5
CB
2250 case KVM_REG_S390_GBEA:
2251 r = get_user(vcpu->arch.sie_block->gbea,
2252 (u64 __user *)reg->addr);
2253 break;
14eebd91
CO
2254 default:
2255 break;
2256 }
2257
2258 return r;
2259}
b6d33834 2260
b0c632db
HC
2261static int kvm_arch_vcpu_ioctl_initial_reset(struct kvm_vcpu *vcpu)
2262{
b0c632db 2263 kvm_s390_vcpu_initial_reset(vcpu);
b0c632db
HC
2264 return 0;
2265}
2266
2267int kvm_arch_vcpu_ioctl_set_regs(struct kvm_vcpu *vcpu, struct kvm_regs *regs)
2268{
5a32c1af 2269 memcpy(&vcpu->run->s.regs.gprs, &regs->gprs, sizeof(regs->gprs));
b0c632db
HC
2270 return 0;
2271}
2272
2273int kvm_arch_vcpu_ioctl_get_regs(struct kvm_vcpu *vcpu, struct kvm_regs *regs)
2274{
5a32c1af 2275 memcpy(&regs->gprs, &vcpu->run->s.regs.gprs, sizeof(regs->gprs));
b0c632db
HC
2276 return 0;
2277}
2278
2279int kvm_arch_vcpu_ioctl_set_sregs(struct kvm_vcpu *vcpu,
2280 struct kvm_sregs *sregs)
2281{
59674c1a 2282 memcpy(&vcpu->run->s.regs.acrs, &sregs->acrs, sizeof(sregs->acrs));
b0c632db 2283 memcpy(&vcpu->arch.sie_block->gcr, &sregs->crs, sizeof(sregs->crs));
b0c632db
HC
2284 return 0;
2285}
2286
2287int kvm_arch_vcpu_ioctl_get_sregs(struct kvm_vcpu *vcpu,
2288 struct kvm_sregs *sregs)
2289{
59674c1a 2290 memcpy(&sregs->acrs, &vcpu->run->s.regs.acrs, sizeof(sregs->acrs));
b0c632db 2291 memcpy(&sregs->crs, &vcpu->arch.sie_block->gcr, sizeof(sregs->crs));
b0c632db
HC
2292 return 0;
2293}
2294
2295int kvm_arch_vcpu_ioctl_set_fpu(struct kvm_vcpu *vcpu, struct kvm_fpu *fpu)
2296{
4725c860
MS
2297 if (test_fp_ctl(fpu->fpc))
2298 return -EINVAL;
e1788bb9 2299 vcpu->run->s.regs.fpc = fpu->fpc;
9abc2a08 2300 if (MACHINE_HAS_VX)
a7d4b8f2
DH
2301 convert_fp_to_vx((__vector128 *) vcpu->run->s.regs.vrs,
2302 (freg_t *) fpu->fprs);
9abc2a08 2303 else
a7d4b8f2 2304 memcpy(vcpu->run->s.regs.fprs, &fpu->fprs, sizeof(fpu->fprs));
b0c632db
HC
2305 return 0;
2306}
2307
2308int kvm_arch_vcpu_ioctl_get_fpu(struct kvm_vcpu *vcpu, struct kvm_fpu *fpu)
2309{
9abc2a08
DH
2310 /* make sure we have the latest values */
2311 save_fpu_regs();
2312 if (MACHINE_HAS_VX)
a7d4b8f2
DH
2313 convert_vx_to_fp((freg_t *) fpu->fprs,
2314 (__vector128 *) vcpu->run->s.regs.vrs);
9abc2a08 2315 else
a7d4b8f2 2316 memcpy(fpu->fprs, vcpu->run->s.regs.fprs, sizeof(fpu->fprs));
e1788bb9 2317 fpu->fpc = vcpu->run->s.regs.fpc;
b0c632db
HC
2318 return 0;
2319}
2320
2321static int kvm_arch_vcpu_ioctl_set_initial_psw(struct kvm_vcpu *vcpu, psw_t psw)
2322{
2323 int rc = 0;
2324
7a42fdc2 2325 if (!is_vcpu_stopped(vcpu))
b0c632db 2326 rc = -EBUSY;
d7b0b5eb
CO
2327 else {
2328 vcpu->run->psw_mask = psw.mask;
2329 vcpu->run->psw_addr = psw.addr;
2330 }
b0c632db
HC
2331 return rc;
2332}
2333
2334int kvm_arch_vcpu_ioctl_translate(struct kvm_vcpu *vcpu,
2335 struct kvm_translation *tr)
2336{
2337 return -EINVAL; /* not implemented yet */
2338}
2339
27291e21
DH
2340#define VALID_GUESTDBG_FLAGS (KVM_GUESTDBG_SINGLESTEP | \
2341 KVM_GUESTDBG_USE_HW_BP | \
2342 KVM_GUESTDBG_ENABLE)
2343
d0bfb940
JK
2344int kvm_arch_vcpu_ioctl_set_guest_debug(struct kvm_vcpu *vcpu,
2345 struct kvm_guest_debug *dbg)
b0c632db 2346{
27291e21
DH
2347 int rc = 0;
2348
2349 vcpu->guest_debug = 0;
2350 kvm_s390_clear_bp_data(vcpu);
2351
2de3bfc2 2352 if (dbg->control & ~VALID_GUESTDBG_FLAGS)
27291e21 2353 return -EINVAL;
89b5b4de
DH
2354 if (!sclp.has_gpere)
2355 return -EINVAL;
27291e21
DH
2356
2357 if (dbg->control & KVM_GUESTDBG_ENABLE) {
2358 vcpu->guest_debug = dbg->control;
2359 /* enforce guest PER */
805de8f4 2360 atomic_or(CPUSTAT_P, &vcpu->arch.sie_block->cpuflags);
27291e21
DH
2361
2362 if (dbg->control & KVM_GUESTDBG_USE_HW_BP)
2363 rc = kvm_s390_import_bp_data(vcpu, dbg);
2364 } else {
805de8f4 2365 atomic_andnot(CPUSTAT_P, &vcpu->arch.sie_block->cpuflags);
27291e21
DH
2366 vcpu->arch.guestdbg.last_bp = 0;
2367 }
2368
2369 if (rc) {
2370 vcpu->guest_debug = 0;
2371 kvm_s390_clear_bp_data(vcpu);
805de8f4 2372 atomic_andnot(CPUSTAT_P, &vcpu->arch.sie_block->cpuflags);
27291e21
DH
2373 }
2374
2375 return rc;
b0c632db
HC
2376}
2377
62d9f0db
MT
2378int kvm_arch_vcpu_ioctl_get_mpstate(struct kvm_vcpu *vcpu,
2379 struct kvm_mp_state *mp_state)
2380{
6352e4d2
DH
2381 /* CHECK_STOP and LOAD are not supported yet */
2382 return is_vcpu_stopped(vcpu) ? KVM_MP_STATE_STOPPED :
2383 KVM_MP_STATE_OPERATING;
62d9f0db
MT
2384}
2385
2386int kvm_arch_vcpu_ioctl_set_mpstate(struct kvm_vcpu *vcpu,
2387 struct kvm_mp_state *mp_state)
2388{
6352e4d2
DH
2389 int rc = 0;
2390
2391 /* user space knows about this interface - let it control the state */
2392 vcpu->kvm->arch.user_cpu_state_ctrl = 1;
2393
2394 switch (mp_state->mp_state) {
2395 case KVM_MP_STATE_STOPPED:
2396 kvm_s390_vcpu_stop(vcpu);
2397 break;
2398 case KVM_MP_STATE_OPERATING:
2399 kvm_s390_vcpu_start(vcpu);
2400 break;
2401 case KVM_MP_STATE_LOAD:
2402 case KVM_MP_STATE_CHECK_STOP:
2403 /* fall through - CHECK_STOP and LOAD are not supported yet */
2404 default:
2405 rc = -ENXIO;
2406 }
2407
2408 return rc;
62d9f0db
MT
2409}
2410
8ad35755
DH
2411static bool ibs_enabled(struct kvm_vcpu *vcpu)
2412{
2413 return atomic_read(&vcpu->arch.sie_block->cpuflags) & CPUSTAT_IBS;
2414}
2415
2c70fe44
CB
2416static int kvm_s390_handle_requests(struct kvm_vcpu *vcpu)
2417{
8ad35755 2418retry:
8e236546 2419 kvm_s390_vcpu_request_handled(vcpu);
586b7ccd
CB
2420 if (!vcpu->requests)
2421 return 0;
2c70fe44
CB
2422 /*
2423 * We use MMU_RELOAD just to re-arm the ipte notifier for the
b2d73b2a 2424 * guest prefix page. gmap_mprotect_notify will wait on the ptl lock.
2c70fe44
CB
2425 * This ensures that the ipte instruction for this request has
2426 * already finished. We might race against a second unmapper that
2427 * wants to set the blocking bit. Lets just retry the request loop.
2428 */
8ad35755 2429 if (kvm_check_request(KVM_REQ_MMU_RELOAD, vcpu)) {
2c70fe44 2430 int rc;
b2d73b2a
MS
2431 rc = gmap_mprotect_notify(vcpu->arch.gmap,
2432 kvm_s390_get_prefix(vcpu),
2433 PAGE_SIZE * 2, PROT_WRITE);
aca411a4
JN
2434 if (rc) {
2435 kvm_make_request(KVM_REQ_MMU_RELOAD, vcpu);
2c70fe44 2436 return rc;
aca411a4 2437 }
8ad35755 2438 goto retry;
2c70fe44 2439 }
8ad35755 2440
d3d692c8
DH
2441 if (kvm_check_request(KVM_REQ_TLB_FLUSH, vcpu)) {
2442 vcpu->arch.sie_block->ihcpu = 0xffff;
2443 goto retry;
2444 }
2445
8ad35755
DH
2446 if (kvm_check_request(KVM_REQ_ENABLE_IBS, vcpu)) {
2447 if (!ibs_enabled(vcpu)) {
2448 trace_kvm_s390_enable_disable_ibs(vcpu->vcpu_id, 1);
805de8f4 2449 atomic_or(CPUSTAT_IBS,
8ad35755
DH
2450 &vcpu->arch.sie_block->cpuflags);
2451 }
2452 goto retry;
2c70fe44 2453 }
8ad35755
DH
2454
2455 if (kvm_check_request(KVM_REQ_DISABLE_IBS, vcpu)) {
2456 if (ibs_enabled(vcpu)) {
2457 trace_kvm_s390_enable_disable_ibs(vcpu->vcpu_id, 0);
805de8f4 2458 atomic_andnot(CPUSTAT_IBS,
8ad35755
DH
2459 &vcpu->arch.sie_block->cpuflags);
2460 }
2461 goto retry;
2462 }
2463
6502a34c
DH
2464 if (kvm_check_request(KVM_REQ_ICPT_OPEREXC, vcpu)) {
2465 vcpu->arch.sie_block->ictl |= ICTL_OPEREXC;
2466 goto retry;
2467 }
2468
0759d068
DH
2469 /* nothing to do, just clear the request */
2470 clear_bit(KVM_REQ_UNHALT, &vcpu->requests);
2471
2c70fe44
CB
2472 return 0;
2473}
2474
25ed1675
DH
2475void kvm_s390_set_tod_clock(struct kvm *kvm, u64 tod)
2476{
2477 struct kvm_vcpu *vcpu;
2478 int i;
2479
2480 mutex_lock(&kvm->lock);
2481 preempt_disable();
2482 kvm->arch.epoch = tod - get_tod_clock();
2483 kvm_s390_vcpu_block_all(kvm);
2484 kvm_for_each_vcpu(i, vcpu, kvm)
2485 vcpu->arch.sie_block->epoch = kvm->arch.epoch;
2486 kvm_s390_vcpu_unblock_all(kvm);
2487 preempt_enable();
2488 mutex_unlock(&kvm->lock);
2489}
2490
fa576c58
TH
2491/**
2492 * kvm_arch_fault_in_page - fault-in guest page if necessary
2493 * @vcpu: The corresponding virtual cpu
2494 * @gpa: Guest physical address
2495 * @writable: Whether the page should be writable or not
2496 *
2497 * Make sure that a guest page has been faulted-in on the host.
2498 *
2499 * Return: Zero on success, negative error code otherwise.
2500 */
2501long kvm_arch_fault_in_page(struct kvm_vcpu *vcpu, gpa_t gpa, int writable)
24eb3a82 2502{
527e30b4
MS
2503 return gmap_fault(vcpu->arch.gmap, gpa,
2504 writable ? FAULT_FLAG_WRITE : 0);
24eb3a82
DD
2505}
2506
3c038e6b
DD
2507static void __kvm_inject_pfault_token(struct kvm_vcpu *vcpu, bool start_token,
2508 unsigned long token)
2509{
2510 struct kvm_s390_interrupt inti;
383d0b05 2511 struct kvm_s390_irq irq;
3c038e6b
DD
2512
2513 if (start_token) {
383d0b05
JF
2514 irq.u.ext.ext_params2 = token;
2515 irq.type = KVM_S390_INT_PFAULT_INIT;
2516 WARN_ON_ONCE(kvm_s390_inject_vcpu(vcpu, &irq));
3c038e6b
DD
2517 } else {
2518 inti.type = KVM_S390_INT_PFAULT_DONE;
383d0b05 2519 inti.parm64 = token;
3c038e6b
DD
2520 WARN_ON_ONCE(kvm_s390_inject_vm(vcpu->kvm, &inti));
2521 }
2522}
2523
2524void kvm_arch_async_page_not_present(struct kvm_vcpu *vcpu,
2525 struct kvm_async_pf *work)
2526{
2527 trace_kvm_s390_pfault_init(vcpu, work->arch.pfault_token);
2528 __kvm_inject_pfault_token(vcpu, true, work->arch.pfault_token);
2529}
2530
2531void kvm_arch_async_page_present(struct kvm_vcpu *vcpu,
2532 struct kvm_async_pf *work)
2533{
2534 trace_kvm_s390_pfault_done(vcpu, work->arch.pfault_token);
2535 __kvm_inject_pfault_token(vcpu, false, work->arch.pfault_token);
2536}
2537
2538void kvm_arch_async_page_ready(struct kvm_vcpu *vcpu,
2539 struct kvm_async_pf *work)
2540{
2541 /* s390 will always inject the page directly */
2542}
2543
2544bool kvm_arch_can_inject_async_page_present(struct kvm_vcpu *vcpu)
2545{
2546 /*
2547 * s390 will always inject the page directly,
2548 * but we still want check_async_completion to cleanup
2549 */
2550 return true;
2551}
2552
2553static int kvm_arch_setup_async_pf(struct kvm_vcpu *vcpu)
2554{
2555 hva_t hva;
2556 struct kvm_arch_async_pf arch;
2557 int rc;
2558
2559 if (vcpu->arch.pfault_token == KVM_S390_PFAULT_TOKEN_INVALID)
2560 return 0;
2561 if ((vcpu->arch.sie_block->gpsw.mask & vcpu->arch.pfault_select) !=
2562 vcpu->arch.pfault_compare)
2563 return 0;
2564 if (psw_extint_disabled(vcpu))
2565 return 0;
9a022067 2566 if (kvm_s390_vcpu_has_irq(vcpu, 0))
3c038e6b
DD
2567 return 0;
2568 if (!(vcpu->arch.sie_block->gcr[0] & 0x200ul))
2569 return 0;
2570 if (!vcpu->arch.gmap->pfault_enabled)
2571 return 0;
2572
81480cc1
HC
2573 hva = gfn_to_hva(vcpu->kvm, gpa_to_gfn(current->thread.gmap_addr));
2574 hva += current->thread.gmap_addr & ~PAGE_MASK;
2575 if (read_guest_real(vcpu, vcpu->arch.pfault_token, &arch.pfault_token, 8))
3c038e6b
DD
2576 return 0;
2577
2578 rc = kvm_setup_async_pf(vcpu, current->thread.gmap_addr, hva, &arch);
2579 return rc;
2580}
2581
3fb4c40f 2582static int vcpu_pre_run(struct kvm_vcpu *vcpu)
b0c632db 2583{
3fb4c40f 2584 int rc, cpuflags;
e168bf8d 2585
3c038e6b
DD
2586 /*
2587 * On s390 notifications for arriving pages will be delivered directly
2588 * to the guest but the house keeping for completed pfaults is
2589 * handled outside the worker.
2590 */
2591 kvm_check_async_pf_completion(vcpu);
2592
7ec7c8c7
CB
2593 vcpu->arch.sie_block->gg14 = vcpu->run->s.regs.gprs[14];
2594 vcpu->arch.sie_block->gg15 = vcpu->run->s.regs.gprs[15];
b0c632db
HC
2595
2596 if (need_resched())
2597 schedule();
2598
d3a73acb 2599 if (test_cpu_flag(CIF_MCCK_PENDING))
71cde587
CB
2600 s390_handle_mcck();
2601
79395031
JF
2602 if (!kvm_is_ucontrol(vcpu->kvm)) {
2603 rc = kvm_s390_deliver_pending_interrupts(vcpu);
2604 if (rc)
2605 return rc;
2606 }
0ff31867 2607
2c70fe44
CB
2608 rc = kvm_s390_handle_requests(vcpu);
2609 if (rc)
2610 return rc;
2611
27291e21
DH
2612 if (guestdbg_enabled(vcpu)) {
2613 kvm_s390_backup_guest_per_regs(vcpu);
2614 kvm_s390_patch_guest_per_regs(vcpu);
2615 }
2616
b0c632db 2617 vcpu->arch.sie_block->icptcode = 0;
3fb4c40f
TH
2618 cpuflags = atomic_read(&vcpu->arch.sie_block->cpuflags);
2619 VCPU_EVENT(vcpu, 6, "entering sie flags %x", cpuflags);
2620 trace_kvm_s390_sie_enter(vcpu, cpuflags);
2b29a9fd 2621
3fb4c40f
TH
2622 return 0;
2623}
2624
492d8642
TH
2625static int vcpu_post_run_fault_in_sie(struct kvm_vcpu *vcpu)
2626{
56317920
DH
2627 struct kvm_s390_pgm_info pgm_info = {
2628 .code = PGM_ADDRESSING,
2629 };
2630 u8 opcode, ilen;
492d8642
TH
2631 int rc;
2632
2633 VCPU_EVENT(vcpu, 3, "%s", "fault in sie instruction");
2634 trace_kvm_s390_sie_fault(vcpu);
2635
2636 /*
2637 * We want to inject an addressing exception, which is defined as a
2638 * suppressing or terminating exception. However, since we came here
2639 * by a DAT access exception, the PSW still points to the faulting
2640 * instruction since DAT exceptions are nullifying. So we've got
2641 * to look up the current opcode to get the length of the instruction
2642 * to be able to forward the PSW.
2643 */
3fa8cad7 2644 rc = read_guest_instr(vcpu, vcpu->arch.sie_block->gpsw.addr, &opcode, 1);
56317920 2645 ilen = insn_length(opcode);
9b0d721a
DH
2646 if (rc < 0) {
2647 return rc;
2648 } else if (rc) {
2649 /* Instruction-Fetching Exceptions - we can't detect the ilen.
2650 * Forward by arbitrary ilc, injection will take care of
2651 * nullification if necessary.
2652 */
2653 pgm_info = vcpu->arch.pgm;
2654 ilen = 4;
2655 }
56317920
DH
2656 pgm_info.flags = ilen | KVM_S390_PGM_FLAGS_ILC_VALID;
2657 kvm_s390_forward_psw(vcpu, ilen);
2658 return kvm_s390_inject_prog_irq(vcpu, &pgm_info);
492d8642
TH
2659}
2660
3fb4c40f
TH
2661static int vcpu_post_run(struct kvm_vcpu *vcpu, int exit_reason)
2662{
2b29a9fd
DD
2663 VCPU_EVENT(vcpu, 6, "exit sie icptcode %d",
2664 vcpu->arch.sie_block->icptcode);
2665 trace_kvm_s390_sie_exit(vcpu, vcpu->arch.sie_block->icptcode);
2666
27291e21
DH
2667 if (guestdbg_enabled(vcpu))
2668 kvm_s390_restore_guest_per_regs(vcpu);
2669
7ec7c8c7
CB
2670 vcpu->run->s.regs.gprs[14] = vcpu->arch.sie_block->gg14;
2671 vcpu->run->s.regs.gprs[15] = vcpu->arch.sie_block->gg15;
71f116bf
DH
2672
2673 if (vcpu->arch.sie_block->icptcode > 0) {
2674 int rc = kvm_handle_sie_intercept(vcpu);
2675
2676 if (rc != -EOPNOTSUPP)
2677 return rc;
2678 vcpu->run->exit_reason = KVM_EXIT_S390_SIEIC;
2679 vcpu->run->s390_sieic.icptcode = vcpu->arch.sie_block->icptcode;
2680 vcpu->run->s390_sieic.ipa = vcpu->arch.sie_block->ipa;
2681 vcpu->run->s390_sieic.ipb = vcpu->arch.sie_block->ipb;
2682 return -EREMOTE;
2683 } else if (exit_reason != -EFAULT) {
2684 vcpu->stat.exit_null++;
2685 return 0;
210b1607
TH
2686 } else if (kvm_is_ucontrol(vcpu->kvm)) {
2687 vcpu->run->exit_reason = KVM_EXIT_S390_UCONTROL;
2688 vcpu->run->s390_ucontrol.trans_exc_code =
2689 current->thread.gmap_addr;
2690 vcpu->run->s390_ucontrol.pgm_code = 0x10;
71f116bf 2691 return -EREMOTE;
24eb3a82 2692 } else if (current->thread.gmap_pfault) {
3c038e6b 2693 trace_kvm_s390_major_guest_pfault(vcpu);
24eb3a82 2694 current->thread.gmap_pfault = 0;
71f116bf
DH
2695 if (kvm_arch_setup_async_pf(vcpu))
2696 return 0;
2697 return kvm_arch_fault_in_page(vcpu, current->thread.gmap_addr, 1);
a76ccff6 2698 }
71f116bf 2699 return vcpu_post_run_fault_in_sie(vcpu);
3fb4c40f
TH
2700}
2701
2702static int __vcpu_run(struct kvm_vcpu *vcpu)
2703{
2704 int rc, exit_reason;
2705
800c1065
TH
2706 /*
2707 * We try to hold kvm->srcu during most of vcpu_run (except when run-
2708 * ning the guest), so that memslots (and other stuff) are protected
2709 */
2710 vcpu->srcu_idx = srcu_read_lock(&vcpu->kvm->srcu);
2711
a76ccff6
TH
2712 do {
2713 rc = vcpu_pre_run(vcpu);
2714 if (rc)
2715 break;
3fb4c40f 2716
800c1065 2717 srcu_read_unlock(&vcpu->kvm->srcu, vcpu->srcu_idx);
a76ccff6
TH
2718 /*
2719 * As PF_VCPU will be used in fault handler, between
2720 * guest_enter and guest_exit should be no uaccess.
2721 */
0097d12e 2722 local_irq_disable();
6edaa530 2723 guest_enter_irqoff();
db0758b2 2724 __disable_cpu_timer_accounting(vcpu);
0097d12e 2725 local_irq_enable();
a76ccff6
TH
2726 exit_reason = sie64a(vcpu->arch.sie_block,
2727 vcpu->run->s.regs.gprs);
0097d12e 2728 local_irq_disable();
db0758b2 2729 __enable_cpu_timer_accounting(vcpu);
6edaa530 2730 guest_exit_irqoff();
0097d12e 2731 local_irq_enable();
800c1065 2732 vcpu->srcu_idx = srcu_read_lock(&vcpu->kvm->srcu);
a76ccff6
TH
2733
2734 rc = vcpu_post_run(vcpu, exit_reason);
27291e21 2735 } while (!signal_pending(current) && !guestdbg_exit_pending(vcpu) && !rc);
3fb4c40f 2736
800c1065 2737 srcu_read_unlock(&vcpu->kvm->srcu, vcpu->srcu_idx);
e168bf8d 2738 return rc;
b0c632db
HC
2739}
2740
b028ee3e
DH
2741static void sync_regs(struct kvm_vcpu *vcpu, struct kvm_run *kvm_run)
2742{
4d5f2c04 2743 struct runtime_instr_cb *riccb;
4e0b1ab7 2744 struct gs_cb *gscb;
4d5f2c04
CB
2745
2746 riccb = (struct runtime_instr_cb *) &kvm_run->s.regs.riccb;
4e0b1ab7 2747 gscb = (struct gs_cb *) &kvm_run->s.regs.gscb;
b028ee3e
DH
2748 vcpu->arch.sie_block->gpsw.mask = kvm_run->psw_mask;
2749 vcpu->arch.sie_block->gpsw.addr = kvm_run->psw_addr;
2750 if (kvm_run->kvm_dirty_regs & KVM_SYNC_PREFIX)
2751 kvm_s390_set_prefix(vcpu, kvm_run->s.regs.prefix);
2752 if (kvm_run->kvm_dirty_regs & KVM_SYNC_CRS) {
2753 memcpy(&vcpu->arch.sie_block->gcr, &kvm_run->s.regs.crs, 128);
d3d692c8
DH
2754 /* some control register changes require a tlb flush */
2755 kvm_make_request(KVM_REQ_TLB_FLUSH, vcpu);
b028ee3e
DH
2756 }
2757 if (kvm_run->kvm_dirty_regs & KVM_SYNC_ARCH0) {
4287f247 2758 kvm_s390_set_cpu_timer(vcpu, kvm_run->s.regs.cputm);
b028ee3e
DH
2759 vcpu->arch.sie_block->ckc = kvm_run->s.regs.ckc;
2760 vcpu->arch.sie_block->todpr = kvm_run->s.regs.todpr;
2761 vcpu->arch.sie_block->pp = kvm_run->s.regs.pp;
2762 vcpu->arch.sie_block->gbea = kvm_run->s.regs.gbea;
2763 }
2764 if (kvm_run->kvm_dirty_regs & KVM_SYNC_PFAULT) {
2765 vcpu->arch.pfault_token = kvm_run->s.regs.pft;
2766 vcpu->arch.pfault_select = kvm_run->s.regs.pfs;
2767 vcpu->arch.pfault_compare = kvm_run->s.regs.pfc;
9fbd8082
DH
2768 if (vcpu->arch.pfault_token == KVM_S390_PFAULT_TOKEN_INVALID)
2769 kvm_clear_async_pf_completion_queue(vcpu);
b028ee3e 2770 }
80cd8763
FZ
2771 /*
2772 * If userspace sets the riccb (e.g. after migration) to a valid state,
2773 * we should enable RI here instead of doing the lazy enablement.
2774 */
2775 if ((kvm_run->kvm_dirty_regs & KVM_SYNC_RICCB) &&
4d5f2c04
CB
2776 test_kvm_facility(vcpu->kvm, 64) &&
2777 riccb->valid &&
0c9d8683 2778 !(vcpu->arch.sie_block->ecb3 & ECB3_RI)) {
4d5f2c04 2779 VCPU_EVENT(vcpu, 3, "%s", "ENABLE: RI (sync_regs)");
0c9d8683 2780 vcpu->arch.sie_block->ecb3 |= ECB3_RI;
80cd8763 2781 }
4e0b1ab7
FZ
2782 /*
2783 * If userspace sets the gscb (e.g. after migration) to non-zero,
2784 * we should enable GS here instead of doing the lazy enablement.
2785 */
2786 if ((kvm_run->kvm_dirty_regs & KVM_SYNC_GSCB) &&
2787 test_kvm_facility(vcpu->kvm, 133) &&
2788 gscb->gssm &&
2789 !vcpu->arch.gs_enabled) {
2790 VCPU_EVENT(vcpu, 3, "%s", "ENABLE: GS (sync_regs)");
2791 vcpu->arch.sie_block->ecb |= ECB_GS;
2792 vcpu->arch.sie_block->ecd |= ECD_HOSTREGMGMT;
2793 vcpu->arch.gs_enabled = 1;
2794 }
31d8b8d4
CB
2795 save_access_regs(vcpu->arch.host_acrs);
2796 restore_access_regs(vcpu->run->s.regs.acrs);
e1788bb9
CB
2797 /* save host (userspace) fprs/vrs */
2798 save_fpu_regs();
2799 vcpu->arch.host_fpregs.fpc = current->thread.fpu.fpc;
2800 vcpu->arch.host_fpregs.regs = current->thread.fpu.regs;
2801 if (MACHINE_HAS_VX)
2802 current->thread.fpu.regs = vcpu->run->s.regs.vrs;
2803 else
2804 current->thread.fpu.regs = vcpu->run->s.regs.fprs;
2805 current->thread.fpu.fpc = vcpu->run->s.regs.fpc;
2806 if (test_fp_ctl(current->thread.fpu.fpc))
2807 /* User space provided an invalid FPC, let's clear it */
2808 current->thread.fpu.fpc = 0;
4e0b1ab7
FZ
2809 if (MACHINE_HAS_GS) {
2810 preempt_disable();
2811 __ctl_set_bit(2, 4);
2812 if (current->thread.gs_cb) {
2813 vcpu->arch.host_gscb = current->thread.gs_cb;
2814 save_gs_cb(vcpu->arch.host_gscb);
2815 }
2816 if (vcpu->arch.gs_enabled) {
2817 current->thread.gs_cb = (struct gs_cb *)
2818 &vcpu->run->s.regs.gscb;
2819 restore_gs_cb(current->thread.gs_cb);
2820 }
2821 preempt_enable();
2822 }
80cd8763 2823
b028ee3e
DH
2824 kvm_run->kvm_dirty_regs = 0;
2825}
2826
2827static void store_regs(struct kvm_vcpu *vcpu, struct kvm_run *kvm_run)
2828{
2829 kvm_run->psw_mask = vcpu->arch.sie_block->gpsw.mask;
2830 kvm_run->psw_addr = vcpu->arch.sie_block->gpsw.addr;
2831 kvm_run->s.regs.prefix = kvm_s390_get_prefix(vcpu);
2832 memcpy(&kvm_run->s.regs.crs, &vcpu->arch.sie_block->gcr, 128);
4287f247 2833 kvm_run->s.regs.cputm = kvm_s390_get_cpu_timer(vcpu);
b028ee3e
DH
2834 kvm_run->s.regs.ckc = vcpu->arch.sie_block->ckc;
2835 kvm_run->s.regs.todpr = vcpu->arch.sie_block->todpr;
2836 kvm_run->s.regs.pp = vcpu->arch.sie_block->pp;
2837 kvm_run->s.regs.gbea = vcpu->arch.sie_block->gbea;
2838 kvm_run->s.regs.pft = vcpu->arch.pfault_token;
2839 kvm_run->s.regs.pfs = vcpu->arch.pfault_select;
2840 kvm_run->s.regs.pfc = vcpu->arch.pfault_compare;
31d8b8d4
CB
2841 save_access_regs(vcpu->run->s.regs.acrs);
2842 restore_access_regs(vcpu->arch.host_acrs);
e1788bb9
CB
2843 /* Save guest register state */
2844 save_fpu_regs();
2845 vcpu->run->s.regs.fpc = current->thread.fpu.fpc;
2846 /* Restore will be done lazily at return */
2847 current->thread.fpu.fpc = vcpu->arch.host_fpregs.fpc;
2848 current->thread.fpu.regs = vcpu->arch.host_fpregs.regs;
4e0b1ab7
FZ
2849 if (MACHINE_HAS_GS) {
2850 __ctl_set_bit(2, 4);
2851 if (vcpu->arch.gs_enabled)
2852 save_gs_cb(current->thread.gs_cb);
2853 preempt_disable();
2854 current->thread.gs_cb = vcpu->arch.host_gscb;
2855 restore_gs_cb(vcpu->arch.host_gscb);
2856 preempt_enable();
2857 if (!vcpu->arch.host_gscb)
2858 __ctl_clear_bit(2, 4);
2859 vcpu->arch.host_gscb = NULL;
2860 }
e1788bb9 2861
b028ee3e
DH
2862}
2863
b0c632db
HC
2864int kvm_arch_vcpu_ioctl_run(struct kvm_vcpu *vcpu, struct kvm_run *kvm_run)
2865{
8f2abe6a 2866 int rc;
b0c632db
HC
2867 sigset_t sigsaved;
2868
460df4c1
PB
2869 if (kvm_run->immediate_exit)
2870 return -EINTR;
2871
27291e21
DH
2872 if (guestdbg_exit_pending(vcpu)) {
2873 kvm_s390_prepare_debug_exit(vcpu);
2874 return 0;
2875 }
2876
b0c632db
HC
2877 if (vcpu->sigset_active)
2878 sigprocmask(SIG_SETMASK, &vcpu->sigset, &sigsaved);
2879
6352e4d2
DH
2880 if (!kvm_s390_user_cpu_state_ctrl(vcpu->kvm)) {
2881 kvm_s390_vcpu_start(vcpu);
2882 } else if (is_vcpu_stopped(vcpu)) {
ea2cdd27 2883 pr_err_ratelimited("can't run stopped vcpu %d\n",
6352e4d2
DH
2884 vcpu->vcpu_id);
2885 return -EINVAL;
2886 }
b0c632db 2887
b028ee3e 2888 sync_regs(vcpu, kvm_run);
db0758b2 2889 enable_cpu_timer_accounting(vcpu);
d7b0b5eb 2890
dab4079d 2891 might_fault();
a76ccff6 2892 rc = __vcpu_run(vcpu);
9ace903d 2893
b1d16c49
CE
2894 if (signal_pending(current) && !rc) {
2895 kvm_run->exit_reason = KVM_EXIT_INTR;
8f2abe6a 2896 rc = -EINTR;
b1d16c49 2897 }
8f2abe6a 2898
27291e21
DH
2899 if (guestdbg_exit_pending(vcpu) && !rc) {
2900 kvm_s390_prepare_debug_exit(vcpu);
2901 rc = 0;
2902 }
2903
8f2abe6a 2904 if (rc == -EREMOTE) {
71f116bf 2905 /* userspace support is needed, kvm_run has been prepared */
8f2abe6a
CB
2906 rc = 0;
2907 }
b0c632db 2908
db0758b2 2909 disable_cpu_timer_accounting(vcpu);
b028ee3e 2910 store_regs(vcpu, kvm_run);
d7b0b5eb 2911
b0c632db
HC
2912 if (vcpu->sigset_active)
2913 sigprocmask(SIG_SETMASK, &sigsaved, NULL);
2914
b0c632db 2915 vcpu->stat.exit_userspace++;
7e8e6ab4 2916 return rc;
b0c632db
HC
2917}
2918
b0c632db
HC
2919/*
2920 * store status at address
2921 * we use have two special cases:
2922 * KVM_S390_STORE_STATUS_NOADDR: -> 0x1200 on 64 bit
2923 * KVM_S390_STORE_STATUS_PREFIXED: -> prefix
2924 */
d0bce605 2925int kvm_s390_store_status_unloaded(struct kvm_vcpu *vcpu, unsigned long gpa)
b0c632db 2926{
092670cd 2927 unsigned char archmode = 1;
9abc2a08 2928 freg_t fprs[NUM_FPRS];
fda902cb 2929 unsigned int px;
4287f247 2930 u64 clkcomp, cputm;
d0bce605 2931 int rc;
b0c632db 2932
d9a3a09a 2933 px = kvm_s390_get_prefix(vcpu);
d0bce605
HC
2934 if (gpa == KVM_S390_STORE_STATUS_NOADDR) {
2935 if (write_guest_abs(vcpu, 163, &archmode, 1))
b0c632db 2936 return -EFAULT;
d9a3a09a 2937 gpa = 0;
d0bce605
HC
2938 } else if (gpa == KVM_S390_STORE_STATUS_PREFIXED) {
2939 if (write_guest_real(vcpu, 163, &archmode, 1))
b0c632db 2940 return -EFAULT;
d9a3a09a
MS
2941 gpa = px;
2942 } else
2943 gpa -= __LC_FPREGS_SAVE_AREA;
9abc2a08
DH
2944
2945 /* manually convert vector registers if necessary */
2946 if (MACHINE_HAS_VX) {
9522b37f 2947 convert_vx_to_fp(fprs, (__vector128 *) vcpu->run->s.regs.vrs);
9abc2a08
DH
2948 rc = write_guest_abs(vcpu, gpa + __LC_FPREGS_SAVE_AREA,
2949 fprs, 128);
2950 } else {
2951 rc = write_guest_abs(vcpu, gpa + __LC_FPREGS_SAVE_AREA,
6fd8e67d 2952 vcpu->run->s.regs.fprs, 128);
9abc2a08 2953 }
d9a3a09a 2954 rc |= write_guest_abs(vcpu, gpa + __LC_GPREGS_SAVE_AREA,
d0bce605 2955 vcpu->run->s.regs.gprs, 128);
d9a3a09a 2956 rc |= write_guest_abs(vcpu, gpa + __LC_PSW_SAVE_AREA,
d0bce605 2957 &vcpu->arch.sie_block->gpsw, 16);
d9a3a09a 2958 rc |= write_guest_abs(vcpu, gpa + __LC_PREFIX_SAVE_AREA,
fda902cb 2959 &px, 4);
d9a3a09a 2960 rc |= write_guest_abs(vcpu, gpa + __LC_FP_CREG_SAVE_AREA,
9abc2a08 2961 &vcpu->run->s.regs.fpc, 4);
d9a3a09a 2962 rc |= write_guest_abs(vcpu, gpa + __LC_TOD_PROGREG_SAVE_AREA,
d0bce605 2963 &vcpu->arch.sie_block->todpr, 4);
4287f247 2964 cputm = kvm_s390_get_cpu_timer(vcpu);
d9a3a09a 2965 rc |= write_guest_abs(vcpu, gpa + __LC_CPU_TIMER_SAVE_AREA,
4287f247 2966 &cputm, 8);
178bd789 2967 clkcomp = vcpu->arch.sie_block->ckc >> 8;
d9a3a09a 2968 rc |= write_guest_abs(vcpu, gpa + __LC_CLOCK_COMP_SAVE_AREA,
d0bce605 2969 &clkcomp, 8);
d9a3a09a 2970 rc |= write_guest_abs(vcpu, gpa + __LC_AREGS_SAVE_AREA,
d0bce605 2971 &vcpu->run->s.regs.acrs, 64);
d9a3a09a 2972 rc |= write_guest_abs(vcpu, gpa + __LC_CREGS_SAVE_AREA,
d0bce605
HC
2973 &vcpu->arch.sie_block->gcr, 128);
2974 return rc ? -EFAULT : 0;
b0c632db
HC
2975}
2976
e879892c
TH
2977int kvm_s390_vcpu_store_status(struct kvm_vcpu *vcpu, unsigned long addr)
2978{
2979 /*
2980 * The guest FPRS and ACRS are in the host FPRS/ACRS due to the lazy
31d8b8d4 2981 * switch in the run ioctl. Let's update our copies before we save
e879892c
TH
2982 * it into the save area
2983 */
d0164ee2 2984 save_fpu_regs();
9abc2a08 2985 vcpu->run->s.regs.fpc = current->thread.fpu.fpc;
e879892c
TH
2986 save_access_regs(vcpu->run->s.regs.acrs);
2987
2988 return kvm_s390_store_status_unloaded(vcpu, addr);
2989}
2990
8ad35755
DH
2991static void __disable_ibs_on_vcpu(struct kvm_vcpu *vcpu)
2992{
2993 kvm_check_request(KVM_REQ_ENABLE_IBS, vcpu);
8e236546 2994 kvm_s390_sync_request(KVM_REQ_DISABLE_IBS, vcpu);
8ad35755
DH
2995}
2996
2997static void __disable_ibs_on_all_vcpus(struct kvm *kvm)
2998{
2999 unsigned int i;
3000 struct kvm_vcpu *vcpu;
3001
3002 kvm_for_each_vcpu(i, vcpu, kvm) {
3003 __disable_ibs_on_vcpu(vcpu);
3004 }
3005}
3006
3007static void __enable_ibs_on_vcpu(struct kvm_vcpu *vcpu)
3008{
09a400e7
DH
3009 if (!sclp.has_ibs)
3010 return;
8ad35755 3011 kvm_check_request(KVM_REQ_DISABLE_IBS, vcpu);
8e236546 3012 kvm_s390_sync_request(KVM_REQ_ENABLE_IBS, vcpu);
8ad35755
DH
3013}
3014
6852d7b6
DH
3015void kvm_s390_vcpu_start(struct kvm_vcpu *vcpu)
3016{
8ad35755
DH
3017 int i, online_vcpus, started_vcpus = 0;
3018
3019 if (!is_vcpu_stopped(vcpu))
3020 return;
3021
6852d7b6 3022 trace_kvm_s390_vcpu_start_stop(vcpu->vcpu_id, 1);
8ad35755 3023 /* Only one cpu at a time may enter/leave the STOPPED state. */
433b9ee4 3024 spin_lock(&vcpu->kvm->arch.start_stop_lock);
8ad35755
DH
3025 online_vcpus = atomic_read(&vcpu->kvm->online_vcpus);
3026
3027 for (i = 0; i < online_vcpus; i++) {
3028 if (!is_vcpu_stopped(vcpu->kvm->vcpus[i]))
3029 started_vcpus++;
3030 }
3031
3032 if (started_vcpus == 0) {
3033 /* we're the only active VCPU -> speed it up */
3034 __enable_ibs_on_vcpu(vcpu);
3035 } else if (started_vcpus == 1) {
3036 /*
3037 * As we are starting a second VCPU, we have to disable
3038 * the IBS facility on all VCPUs to remove potentially
3039 * oustanding ENABLE requests.
3040 */
3041 __disable_ibs_on_all_vcpus(vcpu->kvm);
3042 }
3043
805de8f4 3044 atomic_andnot(CPUSTAT_STOPPED, &vcpu->arch.sie_block->cpuflags);
8ad35755
DH
3045 /*
3046 * Another VCPU might have used IBS while we were offline.
3047 * Let's play safe and flush the VCPU at startup.
3048 */
d3d692c8 3049 kvm_make_request(KVM_REQ_TLB_FLUSH, vcpu);
433b9ee4 3050 spin_unlock(&vcpu->kvm->arch.start_stop_lock);
8ad35755 3051 return;
6852d7b6
DH
3052}
3053
3054void kvm_s390_vcpu_stop(struct kvm_vcpu *vcpu)
3055{
8ad35755
DH
3056 int i, online_vcpus, started_vcpus = 0;
3057 struct kvm_vcpu *started_vcpu = NULL;
3058
3059 if (is_vcpu_stopped(vcpu))
3060 return;
3061
6852d7b6 3062 trace_kvm_s390_vcpu_start_stop(vcpu->vcpu_id, 0);
8ad35755 3063 /* Only one cpu at a time may enter/leave the STOPPED state. */
433b9ee4 3064 spin_lock(&vcpu->kvm->arch.start_stop_lock);
8ad35755
DH
3065 online_vcpus = atomic_read(&vcpu->kvm->online_vcpus);
3066
32f5ff63 3067 /* SIGP STOP and SIGP STOP AND STORE STATUS has been fully processed */
6cddd432 3068 kvm_s390_clear_stop_irq(vcpu);
32f5ff63 3069
805de8f4 3070 atomic_or(CPUSTAT_STOPPED, &vcpu->arch.sie_block->cpuflags);
8ad35755
DH
3071 __disable_ibs_on_vcpu(vcpu);
3072
3073 for (i = 0; i < online_vcpus; i++) {
3074 if (!is_vcpu_stopped(vcpu->kvm->vcpus[i])) {
3075 started_vcpus++;
3076 started_vcpu = vcpu->kvm->vcpus[i];
3077 }
3078 }
3079
3080 if (started_vcpus == 1) {
3081 /*
3082 * As we only have one VCPU left, we want to enable the
3083 * IBS facility for that VCPU to speed it up.
3084 */
3085 __enable_ibs_on_vcpu(started_vcpu);
3086 }
3087
433b9ee4 3088 spin_unlock(&vcpu->kvm->arch.start_stop_lock);
8ad35755 3089 return;
6852d7b6
DH
3090}
3091
d6712df9
CH
3092static int kvm_vcpu_ioctl_enable_cap(struct kvm_vcpu *vcpu,
3093 struct kvm_enable_cap *cap)
3094{
3095 int r;
3096
3097 if (cap->flags)
3098 return -EINVAL;
3099
3100 switch (cap->cap) {
fa6b7fe9
CH
3101 case KVM_CAP_S390_CSS_SUPPORT:
3102 if (!vcpu->kvm->arch.css_support) {
3103 vcpu->kvm->arch.css_support = 1;
c92ea7b9 3104 VM_EVENT(vcpu->kvm, 3, "%s", "ENABLE: CSS support");
fa6b7fe9
CH
3105 trace_kvm_s390_enable_css(vcpu->kvm);
3106 }
3107 r = 0;
3108 break;
d6712df9
CH
3109 default:
3110 r = -EINVAL;
3111 break;
3112 }
3113 return r;
3114}
3115
41408c28
TH
3116static long kvm_s390_guest_mem_op(struct kvm_vcpu *vcpu,
3117 struct kvm_s390_mem_op *mop)
3118{
3119 void __user *uaddr = (void __user *)mop->buf;
3120 void *tmpbuf = NULL;
3121 int r, srcu_idx;
3122 const u64 supported_flags = KVM_S390_MEMOP_F_INJECT_EXCEPTION
3123 | KVM_S390_MEMOP_F_CHECK_ONLY;
3124
3125 if (mop->flags & ~supported_flags)
3126 return -EINVAL;
3127
3128 if (mop->size > MEM_OP_MAX_SIZE)
3129 return -E2BIG;
3130
3131 if (!(mop->flags & KVM_S390_MEMOP_F_CHECK_ONLY)) {
3132 tmpbuf = vmalloc(mop->size);
3133 if (!tmpbuf)
3134 return -ENOMEM;
3135 }
3136
3137 srcu_idx = srcu_read_lock(&vcpu->kvm->srcu);
3138
3139 switch (mop->op) {
3140 case KVM_S390_MEMOP_LOGICAL_READ:
3141 if (mop->flags & KVM_S390_MEMOP_F_CHECK_ONLY) {
92c96321
DH
3142 r = check_gva_range(vcpu, mop->gaddr, mop->ar,
3143 mop->size, GACC_FETCH);
41408c28
TH
3144 break;
3145 }
3146 r = read_guest(vcpu, mop->gaddr, mop->ar, tmpbuf, mop->size);
3147 if (r == 0) {
3148 if (copy_to_user(uaddr, tmpbuf, mop->size))
3149 r = -EFAULT;
3150 }
3151 break;
3152 case KVM_S390_MEMOP_LOGICAL_WRITE:
3153 if (mop->flags & KVM_S390_MEMOP_F_CHECK_ONLY) {
92c96321
DH
3154 r = check_gva_range(vcpu, mop->gaddr, mop->ar,
3155 mop->size, GACC_STORE);
41408c28
TH
3156 break;
3157 }
3158 if (copy_from_user(tmpbuf, uaddr, mop->size)) {
3159 r = -EFAULT;
3160 break;
3161 }
3162 r = write_guest(vcpu, mop->gaddr, mop->ar, tmpbuf, mop->size);
3163 break;
3164 default:
3165 r = -EINVAL;
3166 }
3167
3168 srcu_read_unlock(&vcpu->kvm->srcu, srcu_idx);
3169
3170 if (r > 0 && (mop->flags & KVM_S390_MEMOP_F_INJECT_EXCEPTION) != 0)
3171 kvm_s390_inject_prog_irq(vcpu, &vcpu->arch.pgm);
3172
3173 vfree(tmpbuf);
3174 return r;
3175}
3176
b0c632db
HC
3177long kvm_arch_vcpu_ioctl(struct file *filp,
3178 unsigned int ioctl, unsigned long arg)
3179{
3180 struct kvm_vcpu *vcpu = filp->private_data;
3181 void __user *argp = (void __user *)arg;
800c1065 3182 int idx;
bc923cc9 3183 long r;
b0c632db 3184
93736624 3185 switch (ioctl) {
47b43c52
JF
3186 case KVM_S390_IRQ: {
3187 struct kvm_s390_irq s390irq;
3188
3189 r = -EFAULT;
3190 if (copy_from_user(&s390irq, argp, sizeof(s390irq)))
3191 break;
3192 r = kvm_s390_inject_vcpu(vcpu, &s390irq);
3193 break;
3194 }
93736624 3195 case KVM_S390_INTERRUPT: {
ba5c1e9b 3196 struct kvm_s390_interrupt s390int;
383d0b05 3197 struct kvm_s390_irq s390irq;
ba5c1e9b 3198
93736624 3199 r = -EFAULT;
ba5c1e9b 3200 if (copy_from_user(&s390int, argp, sizeof(s390int)))
93736624 3201 break;
383d0b05
JF
3202 if (s390int_to_s390irq(&s390int, &s390irq))
3203 return -EINVAL;
3204 r = kvm_s390_inject_vcpu(vcpu, &s390irq);
93736624 3205 break;
ba5c1e9b 3206 }
b0c632db 3207 case KVM_S390_STORE_STATUS:
800c1065 3208 idx = srcu_read_lock(&vcpu->kvm->srcu);
bc923cc9 3209 r = kvm_s390_vcpu_store_status(vcpu, arg);
800c1065 3210 srcu_read_unlock(&vcpu->kvm->srcu, idx);
bc923cc9 3211 break;
b0c632db
HC
3212 case KVM_S390_SET_INITIAL_PSW: {
3213 psw_t psw;
3214
bc923cc9 3215 r = -EFAULT;
b0c632db 3216 if (copy_from_user(&psw, argp, sizeof(psw)))
bc923cc9
AK
3217 break;
3218 r = kvm_arch_vcpu_ioctl_set_initial_psw(vcpu, psw);
3219 break;
b0c632db
HC
3220 }
3221 case KVM_S390_INITIAL_RESET:
bc923cc9
AK
3222 r = kvm_arch_vcpu_ioctl_initial_reset(vcpu);
3223 break;
14eebd91
CO
3224 case KVM_SET_ONE_REG:
3225 case KVM_GET_ONE_REG: {
3226 struct kvm_one_reg reg;
3227 r = -EFAULT;
3228 if (copy_from_user(&reg, argp, sizeof(reg)))
3229 break;
3230 if (ioctl == KVM_SET_ONE_REG)
3231 r = kvm_arch_vcpu_ioctl_set_one_reg(vcpu, &reg);
3232 else
3233 r = kvm_arch_vcpu_ioctl_get_one_reg(vcpu, &reg);
3234 break;
3235 }
27e0393f
CO
3236#ifdef CONFIG_KVM_S390_UCONTROL
3237 case KVM_S390_UCAS_MAP: {
3238 struct kvm_s390_ucas_mapping ucasmap;
3239
3240 if (copy_from_user(&ucasmap, argp, sizeof(ucasmap))) {
3241 r = -EFAULT;
3242 break;
3243 }
3244
3245 if (!kvm_is_ucontrol(vcpu->kvm)) {
3246 r = -EINVAL;
3247 break;
3248 }
3249
3250 r = gmap_map_segment(vcpu->arch.gmap, ucasmap.user_addr,
3251 ucasmap.vcpu_addr, ucasmap.length);
3252 break;
3253 }
3254 case KVM_S390_UCAS_UNMAP: {
3255 struct kvm_s390_ucas_mapping ucasmap;
3256
3257 if (copy_from_user(&ucasmap, argp, sizeof(ucasmap))) {
3258 r = -EFAULT;
3259 break;
3260 }
3261
3262 if (!kvm_is_ucontrol(vcpu->kvm)) {
3263 r = -EINVAL;
3264 break;
3265 }
3266
3267 r = gmap_unmap_segment(vcpu->arch.gmap, ucasmap.vcpu_addr,
3268 ucasmap.length);
3269 break;
3270 }
3271#endif
ccc7910f 3272 case KVM_S390_VCPU_FAULT: {
527e30b4 3273 r = gmap_fault(vcpu->arch.gmap, arg, 0);
ccc7910f
CO
3274 break;
3275 }
d6712df9
CH
3276 case KVM_ENABLE_CAP:
3277 {
3278 struct kvm_enable_cap cap;
3279 r = -EFAULT;
3280 if (copy_from_user(&cap, argp, sizeof(cap)))
3281 break;
3282 r = kvm_vcpu_ioctl_enable_cap(vcpu, &cap);
3283 break;
3284 }
41408c28
TH
3285 case KVM_S390_MEM_OP: {
3286 struct kvm_s390_mem_op mem_op;
3287
3288 if (copy_from_user(&mem_op, argp, sizeof(mem_op)) == 0)
3289 r = kvm_s390_guest_mem_op(vcpu, &mem_op);
3290 else
3291 r = -EFAULT;
3292 break;
3293 }
816c7667
JF
3294 case KVM_S390_SET_IRQ_STATE: {
3295 struct kvm_s390_irq_state irq_state;
3296
3297 r = -EFAULT;
3298 if (copy_from_user(&irq_state, argp, sizeof(irq_state)))
3299 break;
3300 if (irq_state.len > VCPU_IRQS_MAX_BUF ||
3301 irq_state.len == 0 ||
3302 irq_state.len % sizeof(struct kvm_s390_irq) > 0) {
3303 r = -EINVAL;
3304 break;
3305 }
3306 r = kvm_s390_set_irq_state(vcpu,
3307 (void __user *) irq_state.buf,
3308 irq_state.len);
3309 break;
3310 }
3311 case KVM_S390_GET_IRQ_STATE: {
3312 struct kvm_s390_irq_state irq_state;
3313
3314 r = -EFAULT;
3315 if (copy_from_user(&irq_state, argp, sizeof(irq_state)))
3316 break;
3317 if (irq_state.len == 0) {
3318 r = -EINVAL;
3319 break;
3320 }
3321 r = kvm_s390_get_irq_state(vcpu,
3322 (__u8 __user *) irq_state.buf,
3323 irq_state.len);
3324 break;
3325 }
b0c632db 3326 default:
3e6afcf1 3327 r = -ENOTTY;
b0c632db 3328 }
bc923cc9 3329 return r;
b0c632db
HC
3330}
3331
5b1c1493
CO
3332int kvm_arch_vcpu_fault(struct kvm_vcpu *vcpu, struct vm_fault *vmf)
3333{
3334#ifdef CONFIG_KVM_S390_UCONTROL
3335 if ((vmf->pgoff == KVM_S390_SIE_PAGE_OFFSET)
3336 && (kvm_is_ucontrol(vcpu->kvm))) {
3337 vmf->page = virt_to_page(vcpu->arch.sie_block);
3338 get_page(vmf->page);
3339 return 0;
3340 }
3341#endif
3342 return VM_FAULT_SIGBUS;
3343}
3344
5587027c
AK
3345int kvm_arch_create_memslot(struct kvm *kvm, struct kvm_memory_slot *slot,
3346 unsigned long npages)
db3fe4eb
TY
3347{
3348 return 0;
3349}
3350
b0c632db 3351/* Section: memory related */
f7784b8e
MT
3352int kvm_arch_prepare_memory_region(struct kvm *kvm,
3353 struct kvm_memory_slot *memslot,
09170a49 3354 const struct kvm_userspace_memory_region *mem,
7b6195a9 3355 enum kvm_mr_change change)
b0c632db 3356{
dd2887e7
NW
3357 /* A few sanity checks. We can have memory slots which have to be
3358 located/ended at a segment boundary (1MB). The memory in userland is
3359 ok to be fragmented into various different vmas. It is okay to mmap()
3360 and munmap() stuff in this slot after doing this call at any time */
b0c632db 3361
598841ca 3362 if (mem->userspace_addr & 0xffffful)
b0c632db
HC
3363 return -EINVAL;
3364
598841ca 3365 if (mem->memory_size & 0xffffful)
b0c632db
HC
3366 return -EINVAL;
3367
a3a92c31
DD
3368 if (mem->guest_phys_addr + mem->memory_size > kvm->arch.mem_limit)
3369 return -EINVAL;
3370
f7784b8e
MT
3371 return 0;
3372}
3373
3374void kvm_arch_commit_memory_region(struct kvm *kvm,
09170a49 3375 const struct kvm_userspace_memory_region *mem,
8482644a 3376 const struct kvm_memory_slot *old,
f36f3f28 3377 const struct kvm_memory_slot *new,
8482644a 3378 enum kvm_mr_change change)
f7784b8e 3379{
f7850c92 3380 int rc;
f7784b8e 3381
2cef4deb
CB
3382 /* If the basics of the memslot do not change, we do not want
3383 * to update the gmap. Every update causes several unnecessary
3384 * segment translation exceptions. This is usually handled just
3385 * fine by the normal fault handler + gmap, but it will also
3386 * cause faults on the prefix page of running guest CPUs.
3387 */
3388 if (old->userspace_addr == mem->userspace_addr &&
3389 old->base_gfn * PAGE_SIZE == mem->guest_phys_addr &&
3390 old->npages * PAGE_SIZE == mem->memory_size)
3391 return;
598841ca
CO
3392
3393 rc = gmap_map_segment(kvm->arch.gmap, mem->userspace_addr,
3394 mem->guest_phys_addr, mem->memory_size);
3395 if (rc)
ea2cdd27 3396 pr_warn("failed to commit memory region\n");
598841ca 3397 return;
b0c632db
HC
3398}
3399
60a37709
AY
3400static inline unsigned long nonhyp_mask(int i)
3401{
3402 unsigned int nonhyp_fai = (sclp.hmfai << i * 2) >> 30;
3403
3404 return 0x0000ffffffffffffUL >> (nonhyp_fai << 4);
3405}
3406
3491caf2
CB
3407void kvm_arch_vcpu_block_finish(struct kvm_vcpu *vcpu)
3408{
3409 vcpu->valid_wakeup = false;
3410}
3411
b0c632db
HC
3412static int __init kvm_s390_init(void)
3413{
60a37709
AY
3414 int i;
3415
07197fd0
DH
3416 if (!sclp.has_sief2) {
3417 pr_info("SIE not available\n");
3418 return -ENODEV;
3419 }
3420
60a37709
AY
3421 for (i = 0; i < 16; i++)
3422 kvm_s390_fac_list_mask[i] |=
3423 S390_lowcore.stfle_fac_list[i] & nonhyp_mask(i);
3424
9d8d5786 3425 return kvm_init(NULL, sizeof(struct kvm_vcpu), 0, THIS_MODULE);
b0c632db
HC
3426}
3427
3428static void __exit kvm_s390_exit(void)
3429{
3430 kvm_exit();
3431}
3432
3433module_init(kvm_s390_init);
3434module_exit(kvm_s390_exit);
566af940
CH
3435
3436/*
3437 * Enable autoloading of the kvm module.
3438 * Note that we add the module alias here instead of virt/kvm/kvm_main.c
3439 * since x86 takes a different approach.
3440 */
3441#include <linux/miscdevice.h>
3442MODULE_ALIAS_MISCDEV(KVM_MINOR);
3443MODULE_ALIAS("devname:kvm");