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