1 // SPDX-License-Identifier: GPL-2.0 2 /* 3 * hosting IBM Z kernel virtual machines (s390x) 4 * 5 * Copyright IBM Corp. 2008, 2018 6 * 7 * Author(s): Carsten Otte <cotte@de.ibm.com> 8 * Christian Borntraeger <borntraeger@de.ibm.com> 9 * Heiko Carstens <heiko.carstens@de.ibm.com> 10 * Christian Ehrhardt <ehrhardt@de.ibm.com> 11 * Jason J. Herne <jjherne@us.ibm.com> 12 */ 13 14 #define KMSG_COMPONENT "kvm-s390" 15 #define pr_fmt(fmt) KMSG_COMPONENT ": " fmt 16 17 #include <linux/compiler.h> 18 #include <linux/err.h> 19 #include <linux/fs.h> 20 #include <linux/hrtimer.h> 21 #include <linux/init.h> 22 #include <linux/kvm.h> 23 #include <linux/kvm_host.h> 24 #include <linux/mman.h> 25 #include <linux/module.h> 26 #include <linux/moduleparam.h> 27 #include <linux/random.h> 28 #include <linux/slab.h> 29 #include <linux/timer.h> 30 #include <linux/vmalloc.h> 31 #include <linux/bitmap.h> 32 #include <linux/sched/signal.h> 33 #include <linux/string.h> 34 35 #include <asm/asm-offsets.h> 36 #include <asm/lowcore.h> 37 #include <asm/stp.h> 38 #include <asm/pgtable.h> 39 #include <asm/gmap.h> 40 #include <asm/nmi.h> 41 #include <asm/switch_to.h> 42 #include <asm/isc.h> 43 #include <asm/sclp.h> 44 #include <asm/cpacf.h> 45 #include <asm/timex.h> 46 #include <asm/ap.h> 47 #include "kvm-s390.h" 48 #include "gaccess.h" 49 50 #define CREATE_TRACE_POINTS 51 #include "trace.h" 52 #include "trace-s390.h" 53 54 #define MEM_OP_MAX_SIZE 65536 /* Maximum transfer size for KVM_S390_MEM_OP */ 55 #define LOCAL_IRQS 32 56 #define VCPU_IRQS_MAX_BUF (sizeof(struct kvm_s390_irq) * \ 57 (KVM_MAX_VCPUS + LOCAL_IRQS)) 58 59 #define VCPU_STAT(x) offsetof(struct kvm_vcpu, stat.x), KVM_STAT_VCPU 60 #define VM_STAT(x) offsetof(struct kvm, stat.x), KVM_STAT_VM 61 62 struct kvm_stats_debugfs_item debugfs_entries[] = { 63 { "userspace_handled", VCPU_STAT(exit_userspace) }, 64 { "exit_null", VCPU_STAT(exit_null) }, 65 { "exit_validity", VCPU_STAT(exit_validity) }, 66 { "exit_stop_request", VCPU_STAT(exit_stop_request) }, 67 { "exit_external_request", VCPU_STAT(exit_external_request) }, 68 { "exit_io_request", VCPU_STAT(exit_io_request) }, 69 { "exit_external_interrupt", VCPU_STAT(exit_external_interrupt) }, 70 { "exit_instruction", VCPU_STAT(exit_instruction) }, 71 { "exit_pei", VCPU_STAT(exit_pei) }, 72 { "exit_program_interruption", VCPU_STAT(exit_program_interruption) }, 73 { "exit_instr_and_program_int", VCPU_STAT(exit_instr_and_program) }, 74 { "exit_operation_exception", VCPU_STAT(exit_operation_exception) }, 75 { "halt_successful_poll", VCPU_STAT(halt_successful_poll) }, 76 { "halt_attempted_poll", VCPU_STAT(halt_attempted_poll) }, 77 { "halt_poll_invalid", VCPU_STAT(halt_poll_invalid) }, 78 { "halt_no_poll_steal", VCPU_STAT(halt_no_poll_steal) }, 79 { "halt_wakeup", VCPU_STAT(halt_wakeup) }, 80 { "instruction_lctlg", VCPU_STAT(instruction_lctlg) }, 81 { "instruction_lctl", VCPU_STAT(instruction_lctl) }, 82 { "instruction_stctl", VCPU_STAT(instruction_stctl) }, 83 { "instruction_stctg", VCPU_STAT(instruction_stctg) }, 84 { "deliver_ckc", VCPU_STAT(deliver_ckc) }, 85 { "deliver_cputm", VCPU_STAT(deliver_cputm) }, 86 { "deliver_emergency_signal", VCPU_STAT(deliver_emergency_signal) }, 87 { "deliver_external_call", VCPU_STAT(deliver_external_call) }, 88 { "deliver_service_signal", VCPU_STAT(deliver_service_signal) }, 89 { "deliver_virtio", VCPU_STAT(deliver_virtio) }, 90 { "deliver_stop_signal", VCPU_STAT(deliver_stop_signal) }, 91 { "deliver_prefix_signal", VCPU_STAT(deliver_prefix_signal) }, 92 { "deliver_restart_signal", VCPU_STAT(deliver_restart_signal) }, 93 { "deliver_program", VCPU_STAT(deliver_program) }, 94 { "deliver_io", VCPU_STAT(deliver_io) }, 95 { "deliver_machine_check", VCPU_STAT(deliver_machine_check) }, 96 { "exit_wait_state", VCPU_STAT(exit_wait_state) }, 97 { "inject_ckc", VCPU_STAT(inject_ckc) }, 98 { "inject_cputm", VCPU_STAT(inject_cputm) }, 99 { "inject_external_call", VCPU_STAT(inject_external_call) }, 100 { "inject_float_mchk", VM_STAT(inject_float_mchk) }, 101 { "inject_emergency_signal", VCPU_STAT(inject_emergency_signal) }, 102 { "inject_io", VM_STAT(inject_io) }, 103 { "inject_mchk", VCPU_STAT(inject_mchk) }, 104 { "inject_pfault_done", VM_STAT(inject_pfault_done) }, 105 { "inject_program", VCPU_STAT(inject_program) }, 106 { "inject_restart", VCPU_STAT(inject_restart) }, 107 { "inject_service_signal", VM_STAT(inject_service_signal) }, 108 { "inject_set_prefix", VCPU_STAT(inject_set_prefix) }, 109 { "inject_stop_signal", VCPU_STAT(inject_stop_signal) }, 110 { "inject_pfault_init", VCPU_STAT(inject_pfault_init) }, 111 { "inject_virtio", VM_STAT(inject_virtio) }, 112 { "instruction_epsw", VCPU_STAT(instruction_epsw) }, 113 { "instruction_gs", VCPU_STAT(instruction_gs) }, 114 { "instruction_io_other", VCPU_STAT(instruction_io_other) }, 115 { "instruction_lpsw", VCPU_STAT(instruction_lpsw) }, 116 { "instruction_lpswe", VCPU_STAT(instruction_lpswe) }, 117 { "instruction_pfmf", VCPU_STAT(instruction_pfmf) }, 118 { "instruction_ptff", VCPU_STAT(instruction_ptff) }, 119 { "instruction_stidp", VCPU_STAT(instruction_stidp) }, 120 { "instruction_sck", VCPU_STAT(instruction_sck) }, 121 { "instruction_sckpf", VCPU_STAT(instruction_sckpf) }, 122 { "instruction_spx", VCPU_STAT(instruction_spx) }, 123 { "instruction_stpx", VCPU_STAT(instruction_stpx) }, 124 { "instruction_stap", VCPU_STAT(instruction_stap) }, 125 { "instruction_iske", VCPU_STAT(instruction_iske) }, 126 { "instruction_ri", VCPU_STAT(instruction_ri) }, 127 { "instruction_rrbe", VCPU_STAT(instruction_rrbe) }, 128 { "instruction_sske", VCPU_STAT(instruction_sske) }, 129 { "instruction_ipte_interlock", VCPU_STAT(instruction_ipte_interlock) }, 130 { "instruction_essa", VCPU_STAT(instruction_essa) }, 131 { "instruction_stsi", VCPU_STAT(instruction_stsi) }, 132 { "instruction_stfl", VCPU_STAT(instruction_stfl) }, 133 { "instruction_tb", VCPU_STAT(instruction_tb) }, 134 { "instruction_tpi", VCPU_STAT(instruction_tpi) }, 135 { "instruction_tprot", VCPU_STAT(instruction_tprot) }, 136 { "instruction_tsch", VCPU_STAT(instruction_tsch) }, 137 { "instruction_sthyi", VCPU_STAT(instruction_sthyi) }, 138 { "instruction_sie", VCPU_STAT(instruction_sie) }, 139 { "instruction_sigp_sense", VCPU_STAT(instruction_sigp_sense) }, 140 { "instruction_sigp_sense_running", VCPU_STAT(instruction_sigp_sense_running) }, 141 { "instruction_sigp_external_call", VCPU_STAT(instruction_sigp_external_call) }, 142 { "instruction_sigp_emergency", VCPU_STAT(instruction_sigp_emergency) }, 143 { "instruction_sigp_cond_emergency", VCPU_STAT(instruction_sigp_cond_emergency) }, 144 { "instruction_sigp_start", VCPU_STAT(instruction_sigp_start) }, 145 { "instruction_sigp_stop", VCPU_STAT(instruction_sigp_stop) }, 146 { "instruction_sigp_stop_store_status", VCPU_STAT(instruction_sigp_stop_store_status) }, 147 { "instruction_sigp_store_status", VCPU_STAT(instruction_sigp_store_status) }, 148 { "instruction_sigp_store_adtl_status", VCPU_STAT(instruction_sigp_store_adtl_status) }, 149 { "instruction_sigp_set_arch", VCPU_STAT(instruction_sigp_arch) }, 150 { "instruction_sigp_set_prefix", VCPU_STAT(instruction_sigp_prefix) }, 151 { "instruction_sigp_restart", VCPU_STAT(instruction_sigp_restart) }, 152 { "instruction_sigp_cpu_reset", VCPU_STAT(instruction_sigp_cpu_reset) }, 153 { "instruction_sigp_init_cpu_reset", VCPU_STAT(instruction_sigp_init_cpu_reset) }, 154 { "instruction_sigp_unknown", VCPU_STAT(instruction_sigp_unknown) }, 155 { "instruction_diag_10", VCPU_STAT(diagnose_10) }, 156 { "instruction_diag_44", VCPU_STAT(diagnose_44) }, 157 { "instruction_diag_9c", VCPU_STAT(diagnose_9c) }, 158 { "instruction_diag_258", VCPU_STAT(diagnose_258) }, 159 { "instruction_diag_308", VCPU_STAT(diagnose_308) }, 160 { "instruction_diag_500", VCPU_STAT(diagnose_500) }, 161 { "instruction_diag_other", VCPU_STAT(diagnose_other) }, 162 { NULL } 163 }; 164 165 struct kvm_s390_tod_clock_ext { 166 __u8 epoch_idx; 167 __u64 tod; 168 __u8 reserved[7]; 169 } __packed; 170 171 /* allow nested virtualization in KVM (if enabled by user space) */ 172 static int nested; 173 module_param(nested, int, S_IRUGO); 174 MODULE_PARM_DESC(nested, "Nested virtualization support"); 175 176 /* allow 1m huge page guest backing, if !nested */ 177 static int hpage; 178 module_param(hpage, int, 0444); 179 MODULE_PARM_DESC(hpage, "1m huge page backing support"); 180 181 /* maximum percentage of steal time for polling. >100 is treated like 100 */ 182 static u8 halt_poll_max_steal = 10; 183 module_param(halt_poll_max_steal, byte, 0644); 184 MODULE_PARM_DESC(hpage, "Maximum percentage of steal time to allow polling"); 185 186 /* 187 * For now we handle at most 16 double words as this is what the s390 base 188 * kernel handles and stores in the prefix page. If we ever need to go beyond 189 * this, this requires changes to code, but the external uapi can stay. 190 */ 191 #define SIZE_INTERNAL 16 192 193 /* 194 * Base feature mask that defines default mask for facilities. Consists of the 195 * defines in FACILITIES_KVM and the non-hypervisor managed bits. 196 */ 197 static unsigned long kvm_s390_fac_base[SIZE_INTERNAL] = { FACILITIES_KVM }; 198 /* 199 * Extended feature mask. Consists of the defines in FACILITIES_KVM_CPUMODEL 200 * and defines the facilities that can be enabled via a cpu model. 201 */ 202 static unsigned long kvm_s390_fac_ext[SIZE_INTERNAL] = { FACILITIES_KVM_CPUMODEL }; 203 204 static unsigned long kvm_s390_fac_size(void) 205 { 206 BUILD_BUG_ON(SIZE_INTERNAL > S390_ARCH_FAC_MASK_SIZE_U64); 207 BUILD_BUG_ON(SIZE_INTERNAL > S390_ARCH_FAC_LIST_SIZE_U64); 208 BUILD_BUG_ON(SIZE_INTERNAL * sizeof(unsigned long) > 209 sizeof(S390_lowcore.stfle_fac_list)); 210 211 return SIZE_INTERNAL; 212 } 213 214 /* available cpu features supported by kvm */ 215 static DECLARE_BITMAP(kvm_s390_available_cpu_feat, KVM_S390_VM_CPU_FEAT_NR_BITS); 216 /* available subfunctions indicated via query / "test bit" */ 217 static struct kvm_s390_vm_cpu_subfunc kvm_s390_available_subfunc; 218 219 static struct gmap_notifier gmap_notifier; 220 static struct gmap_notifier vsie_gmap_notifier; 221 debug_info_t *kvm_s390_dbf; 222 223 /* Section: not file related */ 224 int kvm_arch_hardware_enable(void) 225 { 226 /* every s390 is virtualization enabled ;-) */ 227 return 0; 228 } 229 230 static void kvm_gmap_notifier(struct gmap *gmap, unsigned long start, 231 unsigned long end); 232 233 static void kvm_clock_sync_scb(struct kvm_s390_sie_block *scb, u64 delta) 234 { 235 u8 delta_idx = 0; 236 237 /* 238 * The TOD jumps by delta, we have to compensate this by adding 239 * -delta to the epoch. 240 */ 241 delta = -delta; 242 243 /* sign-extension - we're adding to signed values below */ 244 if ((s64)delta < 0) 245 delta_idx = -1; 246 247 scb->epoch += delta; 248 if (scb->ecd & ECD_MEF) { 249 scb->epdx += delta_idx; 250 if (scb->epoch < delta) 251 scb->epdx += 1; 252 } 253 } 254 255 /* 256 * This callback is executed during stop_machine(). All CPUs are therefore 257 * temporarily stopped. In order not to change guest behavior, we have to 258 * disable preemption whenever we touch the epoch of kvm and the VCPUs, 259 * so a CPU won't be stopped while calculating with the epoch. 260 */ 261 static int kvm_clock_sync(struct notifier_block *notifier, unsigned long val, 262 void *v) 263 { 264 struct kvm *kvm; 265 struct kvm_vcpu *vcpu; 266 int i; 267 unsigned long long *delta = v; 268 269 list_for_each_entry(kvm, &vm_list, vm_list) { 270 kvm_for_each_vcpu(i, vcpu, kvm) { 271 kvm_clock_sync_scb(vcpu->arch.sie_block, *delta); 272 if (i == 0) { 273 kvm->arch.epoch = vcpu->arch.sie_block->epoch; 274 kvm->arch.epdx = vcpu->arch.sie_block->epdx; 275 } 276 if (vcpu->arch.cputm_enabled) 277 vcpu->arch.cputm_start += *delta; 278 if (vcpu->arch.vsie_block) 279 kvm_clock_sync_scb(vcpu->arch.vsie_block, 280 *delta); 281 } 282 } 283 return NOTIFY_OK; 284 } 285 286 static struct notifier_block kvm_clock_notifier = { 287 .notifier_call = kvm_clock_sync, 288 }; 289 290 int kvm_arch_hardware_setup(void) 291 { 292 gmap_notifier.notifier_call = kvm_gmap_notifier; 293 gmap_register_pte_notifier(&gmap_notifier); 294 vsie_gmap_notifier.notifier_call = kvm_s390_vsie_gmap_notifier; 295 gmap_register_pte_notifier(&vsie_gmap_notifier); 296 atomic_notifier_chain_register(&s390_epoch_delta_notifier, 297 &kvm_clock_notifier); 298 return 0; 299 } 300 301 void kvm_arch_hardware_unsetup(void) 302 { 303 gmap_unregister_pte_notifier(&gmap_notifier); 304 gmap_unregister_pte_notifier(&vsie_gmap_notifier); 305 atomic_notifier_chain_unregister(&s390_epoch_delta_notifier, 306 &kvm_clock_notifier); 307 } 308 309 static void allow_cpu_feat(unsigned long nr) 310 { 311 set_bit_inv(nr, kvm_s390_available_cpu_feat); 312 } 313 314 static inline int plo_test_bit(unsigned char nr) 315 { 316 register unsigned long r0 asm("0") = (unsigned long) nr | 0x100; 317 int cc; 318 319 asm volatile( 320 /* Parameter registers are ignored for "test bit" */ 321 " plo 0,0,0,0(0)\n" 322 " ipm %0\n" 323 " srl %0,28\n" 324 : "=d" (cc) 325 : "d" (r0) 326 : "cc"); 327 return cc == 0; 328 } 329 330 static inline void __insn32_query(unsigned int opcode, u8 query[32]) 331 { 332 register unsigned long r0 asm("0") = 0; /* query function */ 333 register unsigned long r1 asm("1") = (unsigned long) query; 334 335 asm volatile( 336 /* Parameter regs are ignored */ 337 " .insn rrf,%[opc] << 16,2,4,6,0\n" 338 : "=m" (*query) 339 : "d" (r0), "a" (r1), [opc] "i" (opcode) 340 : "cc"); 341 } 342 343 #define INSN_SORTL 0xb938 344 #define INSN_DFLTCC 0xb939 345 346 static void kvm_s390_cpu_feat_init(void) 347 { 348 int i; 349 350 for (i = 0; i < 256; ++i) { 351 if (plo_test_bit(i)) 352 kvm_s390_available_subfunc.plo[i >> 3] |= 0x80 >> (i & 7); 353 } 354 355 if (test_facility(28)) /* TOD-clock steering */ 356 ptff(kvm_s390_available_subfunc.ptff, 357 sizeof(kvm_s390_available_subfunc.ptff), 358 PTFF_QAF); 359 360 if (test_facility(17)) { /* MSA */ 361 __cpacf_query(CPACF_KMAC, (cpacf_mask_t *) 362 kvm_s390_available_subfunc.kmac); 363 __cpacf_query(CPACF_KMC, (cpacf_mask_t *) 364 kvm_s390_available_subfunc.kmc); 365 __cpacf_query(CPACF_KM, (cpacf_mask_t *) 366 kvm_s390_available_subfunc.km); 367 __cpacf_query(CPACF_KIMD, (cpacf_mask_t *) 368 kvm_s390_available_subfunc.kimd); 369 __cpacf_query(CPACF_KLMD, (cpacf_mask_t *) 370 kvm_s390_available_subfunc.klmd); 371 } 372 if (test_facility(76)) /* MSA3 */ 373 __cpacf_query(CPACF_PCKMO, (cpacf_mask_t *) 374 kvm_s390_available_subfunc.pckmo); 375 if (test_facility(77)) { /* MSA4 */ 376 __cpacf_query(CPACF_KMCTR, (cpacf_mask_t *) 377 kvm_s390_available_subfunc.kmctr); 378 __cpacf_query(CPACF_KMF, (cpacf_mask_t *) 379 kvm_s390_available_subfunc.kmf); 380 __cpacf_query(CPACF_KMO, (cpacf_mask_t *) 381 kvm_s390_available_subfunc.kmo); 382 __cpacf_query(CPACF_PCC, (cpacf_mask_t *) 383 kvm_s390_available_subfunc.pcc); 384 } 385 if (test_facility(57)) /* MSA5 */ 386 __cpacf_query(CPACF_PRNO, (cpacf_mask_t *) 387 kvm_s390_available_subfunc.ppno); 388 389 if (test_facility(146)) /* MSA8 */ 390 __cpacf_query(CPACF_KMA, (cpacf_mask_t *) 391 kvm_s390_available_subfunc.kma); 392 393 if (test_facility(155)) /* MSA9 */ 394 __cpacf_query(CPACF_KDSA, (cpacf_mask_t *) 395 kvm_s390_available_subfunc.kdsa); 396 397 if (test_facility(150)) /* SORTL */ 398 __insn32_query(INSN_SORTL, kvm_s390_available_subfunc.sortl); 399 400 if (test_facility(151)) /* DFLTCC */ 401 __insn32_query(INSN_DFLTCC, kvm_s390_available_subfunc.dfltcc); 402 403 if (MACHINE_HAS_ESOP) 404 allow_cpu_feat(KVM_S390_VM_CPU_FEAT_ESOP); 405 /* 406 * We need SIE support, ESOP (PROT_READ protection for gmap_shadow), 407 * 64bit SCAO (SCA passthrough) and IDTE (for gmap_shadow unshadowing). 408 */ 409 if (!sclp.has_sief2 || !MACHINE_HAS_ESOP || !sclp.has_64bscao || 410 !test_facility(3) || !nested) 411 return; 412 allow_cpu_feat(KVM_S390_VM_CPU_FEAT_SIEF2); 413 if (sclp.has_64bscao) 414 allow_cpu_feat(KVM_S390_VM_CPU_FEAT_64BSCAO); 415 if (sclp.has_siif) 416 allow_cpu_feat(KVM_S390_VM_CPU_FEAT_SIIF); 417 if (sclp.has_gpere) 418 allow_cpu_feat(KVM_S390_VM_CPU_FEAT_GPERE); 419 if (sclp.has_gsls) 420 allow_cpu_feat(KVM_S390_VM_CPU_FEAT_GSLS); 421 if (sclp.has_ib) 422 allow_cpu_feat(KVM_S390_VM_CPU_FEAT_IB); 423 if (sclp.has_cei) 424 allow_cpu_feat(KVM_S390_VM_CPU_FEAT_CEI); 425 if (sclp.has_ibs) 426 allow_cpu_feat(KVM_S390_VM_CPU_FEAT_IBS); 427 if (sclp.has_kss) 428 allow_cpu_feat(KVM_S390_VM_CPU_FEAT_KSS); 429 /* 430 * KVM_S390_VM_CPU_FEAT_SKEY: Wrong shadow of PTE.I bits will make 431 * all skey handling functions read/set the skey from the PGSTE 432 * instead of the real storage key. 433 * 434 * KVM_S390_VM_CPU_FEAT_CMMA: Wrong shadow of PTE.I bits will make 435 * pages being detected as preserved although they are resident. 436 * 437 * KVM_S390_VM_CPU_FEAT_PFMFI: Wrong shadow of PTE.I bits will 438 * have the same effect as for KVM_S390_VM_CPU_FEAT_SKEY. 439 * 440 * For KVM_S390_VM_CPU_FEAT_SKEY, KVM_S390_VM_CPU_FEAT_CMMA and 441 * KVM_S390_VM_CPU_FEAT_PFMFI, all PTE.I and PGSTE bits have to be 442 * correctly shadowed. We can do that for the PGSTE but not for PTE.I. 443 * 444 * KVM_S390_VM_CPU_FEAT_SIGPIF: Wrong SCB addresses in the SCA. We 445 * cannot easily shadow the SCA because of the ipte lock. 446 */ 447 } 448 449 int kvm_arch_init(void *opaque) 450 { 451 int rc; 452 453 kvm_s390_dbf = debug_register("kvm-trace", 32, 1, 7 * sizeof(long)); 454 if (!kvm_s390_dbf) 455 return -ENOMEM; 456 457 if (debug_register_view(kvm_s390_dbf, &debug_sprintf_view)) { 458 rc = -ENOMEM; 459 goto out_debug_unreg; 460 } 461 462 kvm_s390_cpu_feat_init(); 463 464 /* Register floating interrupt controller interface. */ 465 rc = kvm_register_device_ops(&kvm_flic_ops, KVM_DEV_TYPE_FLIC); 466 if (rc) { 467 pr_err("A FLIC registration call failed with rc=%d\n", rc); 468 goto out_debug_unreg; 469 } 470 471 rc = kvm_s390_gib_init(GAL_ISC); 472 if (rc) 473 goto out_gib_destroy; 474 475 return 0; 476 477 out_gib_destroy: 478 kvm_s390_gib_destroy(); 479 out_debug_unreg: 480 debug_unregister(kvm_s390_dbf); 481 return rc; 482 } 483 484 void kvm_arch_exit(void) 485 { 486 kvm_s390_gib_destroy(); 487 debug_unregister(kvm_s390_dbf); 488 } 489 490 /* Section: device related */ 491 long kvm_arch_dev_ioctl(struct file *filp, 492 unsigned int ioctl, unsigned long arg) 493 { 494 if (ioctl == KVM_S390_ENABLE_SIE) 495 return s390_enable_sie(); 496 return -EINVAL; 497 } 498 499 int kvm_vm_ioctl_check_extension(struct kvm *kvm, long ext) 500 { 501 int r; 502 503 switch (ext) { 504 case KVM_CAP_S390_PSW: 505 case KVM_CAP_S390_GMAP: 506 case KVM_CAP_SYNC_MMU: 507 #ifdef CONFIG_KVM_S390_UCONTROL 508 case KVM_CAP_S390_UCONTROL: 509 #endif 510 case KVM_CAP_ASYNC_PF: 511 case KVM_CAP_SYNC_REGS: 512 case KVM_CAP_ONE_REG: 513 case KVM_CAP_ENABLE_CAP: 514 case KVM_CAP_S390_CSS_SUPPORT: 515 case KVM_CAP_IOEVENTFD: 516 case KVM_CAP_DEVICE_CTRL: 517 case KVM_CAP_S390_IRQCHIP: 518 case KVM_CAP_VM_ATTRIBUTES: 519 case KVM_CAP_MP_STATE: 520 case KVM_CAP_IMMEDIATE_EXIT: 521 case KVM_CAP_S390_INJECT_IRQ: 522 case KVM_CAP_S390_USER_SIGP: 523 case KVM_CAP_S390_USER_STSI: 524 case KVM_CAP_S390_SKEYS: 525 case KVM_CAP_S390_IRQ_STATE: 526 case KVM_CAP_S390_USER_INSTR0: 527 case KVM_CAP_S390_CMMA_MIGRATION: 528 case KVM_CAP_S390_AIS: 529 case KVM_CAP_S390_AIS_MIGRATION: 530 r = 1; 531 break; 532 case KVM_CAP_S390_HPAGE_1M: 533 r = 0; 534 if (hpage && !kvm_is_ucontrol(kvm)) 535 r = 1; 536 break; 537 case KVM_CAP_S390_MEM_OP: 538 r = MEM_OP_MAX_SIZE; 539 break; 540 case KVM_CAP_NR_VCPUS: 541 case KVM_CAP_MAX_VCPUS: 542 r = KVM_S390_BSCA_CPU_SLOTS; 543 if (!kvm_s390_use_sca_entries()) 544 r = KVM_MAX_VCPUS; 545 else if (sclp.has_esca && sclp.has_64bscao) 546 r = KVM_S390_ESCA_CPU_SLOTS; 547 break; 548 case KVM_CAP_S390_COW: 549 r = MACHINE_HAS_ESOP; 550 break; 551 case KVM_CAP_S390_VECTOR_REGISTERS: 552 r = MACHINE_HAS_VX; 553 break; 554 case KVM_CAP_S390_RI: 555 r = test_facility(64); 556 break; 557 case KVM_CAP_S390_GS: 558 r = test_facility(133); 559 break; 560 case KVM_CAP_S390_BPB: 561 r = test_facility(82); 562 break; 563 default: 564 r = 0; 565 } 566 return r; 567 } 568 569 static void kvm_s390_sync_dirty_log(struct kvm *kvm, 570 struct kvm_memory_slot *memslot) 571 { 572 int i; 573 gfn_t cur_gfn, last_gfn; 574 unsigned long gaddr, vmaddr; 575 struct gmap *gmap = kvm->arch.gmap; 576 DECLARE_BITMAP(bitmap, _PAGE_ENTRIES); 577 578 /* Loop over all guest segments */ 579 cur_gfn = memslot->base_gfn; 580 last_gfn = memslot->base_gfn + memslot->npages; 581 for (; cur_gfn <= last_gfn; cur_gfn += _PAGE_ENTRIES) { 582 gaddr = gfn_to_gpa(cur_gfn); 583 vmaddr = gfn_to_hva_memslot(memslot, cur_gfn); 584 if (kvm_is_error_hva(vmaddr)) 585 continue; 586 587 bitmap_zero(bitmap, _PAGE_ENTRIES); 588 gmap_sync_dirty_log_pmd(gmap, bitmap, gaddr, vmaddr); 589 for (i = 0; i < _PAGE_ENTRIES; i++) { 590 if (test_bit(i, bitmap)) 591 mark_page_dirty(kvm, cur_gfn + i); 592 } 593 594 if (fatal_signal_pending(current)) 595 return; 596 cond_resched(); 597 } 598 } 599 600 /* Section: vm related */ 601 static void sca_del_vcpu(struct kvm_vcpu *vcpu); 602 603 /* 604 * Get (and clear) the dirty memory log for a memory slot. 605 */ 606 int kvm_vm_ioctl_get_dirty_log(struct kvm *kvm, 607 struct kvm_dirty_log *log) 608 { 609 int r; 610 unsigned long n; 611 struct kvm_memslots *slots; 612 struct kvm_memory_slot *memslot; 613 int is_dirty = 0; 614 615 if (kvm_is_ucontrol(kvm)) 616 return -EINVAL; 617 618 mutex_lock(&kvm->slots_lock); 619 620 r = -EINVAL; 621 if (log->slot >= KVM_USER_MEM_SLOTS) 622 goto out; 623 624 slots = kvm_memslots(kvm); 625 memslot = id_to_memslot(slots, log->slot); 626 r = -ENOENT; 627 if (!memslot->dirty_bitmap) 628 goto out; 629 630 kvm_s390_sync_dirty_log(kvm, memslot); 631 r = kvm_get_dirty_log(kvm, log, &is_dirty); 632 if (r) 633 goto out; 634 635 /* Clear the dirty log */ 636 if (is_dirty) { 637 n = kvm_dirty_bitmap_bytes(memslot); 638 memset(memslot->dirty_bitmap, 0, n); 639 } 640 r = 0; 641 out: 642 mutex_unlock(&kvm->slots_lock); 643 return r; 644 } 645 646 static void icpt_operexc_on_all_vcpus(struct kvm *kvm) 647 { 648 unsigned int i; 649 struct kvm_vcpu *vcpu; 650 651 kvm_for_each_vcpu(i, vcpu, kvm) { 652 kvm_s390_sync_request(KVM_REQ_ICPT_OPEREXC, vcpu); 653 } 654 } 655 656 int kvm_vm_ioctl_enable_cap(struct kvm *kvm, struct kvm_enable_cap *cap) 657 { 658 int r; 659 660 if (cap->flags) 661 return -EINVAL; 662 663 switch (cap->cap) { 664 case KVM_CAP_S390_IRQCHIP: 665 VM_EVENT(kvm, 3, "%s", "ENABLE: CAP_S390_IRQCHIP"); 666 kvm->arch.use_irqchip = 1; 667 r = 0; 668 break; 669 case KVM_CAP_S390_USER_SIGP: 670 VM_EVENT(kvm, 3, "%s", "ENABLE: CAP_S390_USER_SIGP"); 671 kvm->arch.user_sigp = 1; 672 r = 0; 673 break; 674 case KVM_CAP_S390_VECTOR_REGISTERS: 675 mutex_lock(&kvm->lock); 676 if (kvm->created_vcpus) { 677 r = -EBUSY; 678 } else if (MACHINE_HAS_VX) { 679 set_kvm_facility(kvm->arch.model.fac_mask, 129); 680 set_kvm_facility(kvm->arch.model.fac_list, 129); 681 if (test_facility(134)) { 682 set_kvm_facility(kvm->arch.model.fac_mask, 134); 683 set_kvm_facility(kvm->arch.model.fac_list, 134); 684 } 685 if (test_facility(135)) { 686 set_kvm_facility(kvm->arch.model.fac_mask, 135); 687 set_kvm_facility(kvm->arch.model.fac_list, 135); 688 } 689 if (test_facility(148)) { 690 set_kvm_facility(kvm->arch.model.fac_mask, 148); 691 set_kvm_facility(kvm->arch.model.fac_list, 148); 692 } 693 if (test_facility(152)) { 694 set_kvm_facility(kvm->arch.model.fac_mask, 152); 695 set_kvm_facility(kvm->arch.model.fac_list, 152); 696 } 697 r = 0; 698 } else 699 r = -EINVAL; 700 mutex_unlock(&kvm->lock); 701 VM_EVENT(kvm, 3, "ENABLE: CAP_S390_VECTOR_REGISTERS %s", 702 r ? "(not available)" : "(success)"); 703 break; 704 case KVM_CAP_S390_RI: 705 r = -EINVAL; 706 mutex_lock(&kvm->lock); 707 if (kvm->created_vcpus) { 708 r = -EBUSY; 709 } else if (test_facility(64)) { 710 set_kvm_facility(kvm->arch.model.fac_mask, 64); 711 set_kvm_facility(kvm->arch.model.fac_list, 64); 712 r = 0; 713 } 714 mutex_unlock(&kvm->lock); 715 VM_EVENT(kvm, 3, "ENABLE: CAP_S390_RI %s", 716 r ? "(not available)" : "(success)"); 717 break; 718 case KVM_CAP_S390_AIS: 719 mutex_lock(&kvm->lock); 720 if (kvm->created_vcpus) { 721 r = -EBUSY; 722 } else { 723 set_kvm_facility(kvm->arch.model.fac_mask, 72); 724 set_kvm_facility(kvm->arch.model.fac_list, 72); 725 r = 0; 726 } 727 mutex_unlock(&kvm->lock); 728 VM_EVENT(kvm, 3, "ENABLE: AIS %s", 729 r ? "(not available)" : "(success)"); 730 break; 731 case KVM_CAP_S390_GS: 732 r = -EINVAL; 733 mutex_lock(&kvm->lock); 734 if (kvm->created_vcpus) { 735 r = -EBUSY; 736 } else if (test_facility(133)) { 737 set_kvm_facility(kvm->arch.model.fac_mask, 133); 738 set_kvm_facility(kvm->arch.model.fac_list, 133); 739 r = 0; 740 } 741 mutex_unlock(&kvm->lock); 742 VM_EVENT(kvm, 3, "ENABLE: CAP_S390_GS %s", 743 r ? "(not available)" : "(success)"); 744 break; 745 case KVM_CAP_S390_HPAGE_1M: 746 mutex_lock(&kvm->lock); 747 if (kvm->created_vcpus) 748 r = -EBUSY; 749 else if (!hpage || kvm->arch.use_cmma || kvm_is_ucontrol(kvm)) 750 r = -EINVAL; 751 else { 752 r = 0; 753 down_write(&kvm->mm->mmap_sem); 754 kvm->mm->context.allow_gmap_hpage_1m = 1; 755 up_write(&kvm->mm->mmap_sem); 756 /* 757 * We might have to create fake 4k page 758 * tables. To avoid that the hardware works on 759 * stale PGSTEs, we emulate these instructions. 760 */ 761 kvm->arch.use_skf = 0; 762 kvm->arch.use_pfmfi = 0; 763 } 764 mutex_unlock(&kvm->lock); 765 VM_EVENT(kvm, 3, "ENABLE: CAP_S390_HPAGE %s", 766 r ? "(not available)" : "(success)"); 767 break; 768 case KVM_CAP_S390_USER_STSI: 769 VM_EVENT(kvm, 3, "%s", "ENABLE: CAP_S390_USER_STSI"); 770 kvm->arch.user_stsi = 1; 771 r = 0; 772 break; 773 case KVM_CAP_S390_USER_INSTR0: 774 VM_EVENT(kvm, 3, "%s", "ENABLE: CAP_S390_USER_INSTR0"); 775 kvm->arch.user_instr0 = 1; 776 icpt_operexc_on_all_vcpus(kvm); 777 r = 0; 778 break; 779 default: 780 r = -EINVAL; 781 break; 782 } 783 return r; 784 } 785 786 static int kvm_s390_get_mem_control(struct kvm *kvm, struct kvm_device_attr *attr) 787 { 788 int ret; 789 790 switch (attr->attr) { 791 case KVM_S390_VM_MEM_LIMIT_SIZE: 792 ret = 0; 793 VM_EVENT(kvm, 3, "QUERY: max guest memory: %lu bytes", 794 kvm->arch.mem_limit); 795 if (put_user(kvm->arch.mem_limit, (u64 __user *)attr->addr)) 796 ret = -EFAULT; 797 break; 798 default: 799 ret = -ENXIO; 800 break; 801 } 802 return ret; 803 } 804 805 static int kvm_s390_set_mem_control(struct kvm *kvm, struct kvm_device_attr *attr) 806 { 807 int ret; 808 unsigned int idx; 809 switch (attr->attr) { 810 case KVM_S390_VM_MEM_ENABLE_CMMA: 811 ret = -ENXIO; 812 if (!sclp.has_cmma) 813 break; 814 815 VM_EVENT(kvm, 3, "%s", "ENABLE: CMMA support"); 816 mutex_lock(&kvm->lock); 817 if (kvm->created_vcpus) 818 ret = -EBUSY; 819 else if (kvm->mm->context.allow_gmap_hpage_1m) 820 ret = -EINVAL; 821 else { 822 kvm->arch.use_cmma = 1; 823 /* Not compatible with cmma. */ 824 kvm->arch.use_pfmfi = 0; 825 ret = 0; 826 } 827 mutex_unlock(&kvm->lock); 828 break; 829 case KVM_S390_VM_MEM_CLR_CMMA: 830 ret = -ENXIO; 831 if (!sclp.has_cmma) 832 break; 833 ret = -EINVAL; 834 if (!kvm->arch.use_cmma) 835 break; 836 837 VM_EVENT(kvm, 3, "%s", "RESET: CMMA states"); 838 mutex_lock(&kvm->lock); 839 idx = srcu_read_lock(&kvm->srcu); 840 s390_reset_cmma(kvm->arch.gmap->mm); 841 srcu_read_unlock(&kvm->srcu, idx); 842 mutex_unlock(&kvm->lock); 843 ret = 0; 844 break; 845 case KVM_S390_VM_MEM_LIMIT_SIZE: { 846 unsigned long new_limit; 847 848 if (kvm_is_ucontrol(kvm)) 849 return -EINVAL; 850 851 if (get_user(new_limit, (u64 __user *)attr->addr)) 852 return -EFAULT; 853 854 if (kvm->arch.mem_limit != KVM_S390_NO_MEM_LIMIT && 855 new_limit > kvm->arch.mem_limit) 856 return -E2BIG; 857 858 if (!new_limit) 859 return -EINVAL; 860 861 /* gmap_create takes last usable address */ 862 if (new_limit != KVM_S390_NO_MEM_LIMIT) 863 new_limit -= 1; 864 865 ret = -EBUSY; 866 mutex_lock(&kvm->lock); 867 if (!kvm->created_vcpus) { 868 /* gmap_create will round the limit up */ 869 struct gmap *new = gmap_create(current->mm, new_limit); 870 871 if (!new) { 872 ret = -ENOMEM; 873 } else { 874 gmap_remove(kvm->arch.gmap); 875 new->private = kvm; 876 kvm->arch.gmap = new; 877 ret = 0; 878 } 879 } 880 mutex_unlock(&kvm->lock); 881 VM_EVENT(kvm, 3, "SET: max guest address: %lu", new_limit); 882 VM_EVENT(kvm, 3, "New guest asce: 0x%pK", 883 (void *) kvm->arch.gmap->asce); 884 break; 885 } 886 default: 887 ret = -ENXIO; 888 break; 889 } 890 return ret; 891 } 892 893 static void kvm_s390_vcpu_crypto_setup(struct kvm_vcpu *vcpu); 894 895 void kvm_s390_vcpu_crypto_reset_all(struct kvm *kvm) 896 { 897 struct kvm_vcpu *vcpu; 898 int i; 899 900 kvm_s390_vcpu_block_all(kvm); 901 902 kvm_for_each_vcpu(i, vcpu, kvm) { 903 kvm_s390_vcpu_crypto_setup(vcpu); 904 /* recreate the shadow crycb by leaving the VSIE handler */ 905 kvm_s390_sync_request(KVM_REQ_VSIE_RESTART, vcpu); 906 } 907 908 kvm_s390_vcpu_unblock_all(kvm); 909 } 910 911 static int kvm_s390_vm_set_crypto(struct kvm *kvm, struct kvm_device_attr *attr) 912 { 913 mutex_lock(&kvm->lock); 914 switch (attr->attr) { 915 case KVM_S390_VM_CRYPTO_ENABLE_AES_KW: 916 if (!test_kvm_facility(kvm, 76)) { 917 mutex_unlock(&kvm->lock); 918 return -EINVAL; 919 } 920 get_random_bytes( 921 kvm->arch.crypto.crycb->aes_wrapping_key_mask, 922 sizeof(kvm->arch.crypto.crycb->aes_wrapping_key_mask)); 923 kvm->arch.crypto.aes_kw = 1; 924 VM_EVENT(kvm, 3, "%s", "ENABLE: AES keywrapping support"); 925 break; 926 case KVM_S390_VM_CRYPTO_ENABLE_DEA_KW: 927 if (!test_kvm_facility(kvm, 76)) { 928 mutex_unlock(&kvm->lock); 929 return -EINVAL; 930 } 931 get_random_bytes( 932 kvm->arch.crypto.crycb->dea_wrapping_key_mask, 933 sizeof(kvm->arch.crypto.crycb->dea_wrapping_key_mask)); 934 kvm->arch.crypto.dea_kw = 1; 935 VM_EVENT(kvm, 3, "%s", "ENABLE: DEA keywrapping support"); 936 break; 937 case KVM_S390_VM_CRYPTO_DISABLE_AES_KW: 938 if (!test_kvm_facility(kvm, 76)) { 939 mutex_unlock(&kvm->lock); 940 return -EINVAL; 941 } 942 kvm->arch.crypto.aes_kw = 0; 943 memset(kvm->arch.crypto.crycb->aes_wrapping_key_mask, 0, 944 sizeof(kvm->arch.crypto.crycb->aes_wrapping_key_mask)); 945 VM_EVENT(kvm, 3, "%s", "DISABLE: AES keywrapping support"); 946 break; 947 case KVM_S390_VM_CRYPTO_DISABLE_DEA_KW: 948 if (!test_kvm_facility(kvm, 76)) { 949 mutex_unlock(&kvm->lock); 950 return -EINVAL; 951 } 952 kvm->arch.crypto.dea_kw = 0; 953 memset(kvm->arch.crypto.crycb->dea_wrapping_key_mask, 0, 954 sizeof(kvm->arch.crypto.crycb->dea_wrapping_key_mask)); 955 VM_EVENT(kvm, 3, "%s", "DISABLE: DEA keywrapping support"); 956 break; 957 case KVM_S390_VM_CRYPTO_ENABLE_APIE: 958 if (!ap_instructions_available()) { 959 mutex_unlock(&kvm->lock); 960 return -EOPNOTSUPP; 961 } 962 kvm->arch.crypto.apie = 1; 963 break; 964 case KVM_S390_VM_CRYPTO_DISABLE_APIE: 965 if (!ap_instructions_available()) { 966 mutex_unlock(&kvm->lock); 967 return -EOPNOTSUPP; 968 } 969 kvm->arch.crypto.apie = 0; 970 break; 971 default: 972 mutex_unlock(&kvm->lock); 973 return -ENXIO; 974 } 975 976 kvm_s390_vcpu_crypto_reset_all(kvm); 977 mutex_unlock(&kvm->lock); 978 return 0; 979 } 980 981 static void kvm_s390_sync_request_broadcast(struct kvm *kvm, int req) 982 { 983 int cx; 984 struct kvm_vcpu *vcpu; 985 986 kvm_for_each_vcpu(cx, vcpu, kvm) 987 kvm_s390_sync_request(req, vcpu); 988 } 989 990 /* 991 * Must be called with kvm->srcu held to avoid races on memslots, and with 992 * kvm->slots_lock to avoid races with ourselves and kvm_s390_vm_stop_migration. 993 */ 994 static int kvm_s390_vm_start_migration(struct kvm *kvm) 995 { 996 struct kvm_memory_slot *ms; 997 struct kvm_memslots *slots; 998 unsigned long ram_pages = 0; 999 int slotnr; 1000 1001 /* migration mode already enabled */ 1002 if (kvm->arch.migration_mode) 1003 return 0; 1004 slots = kvm_memslots(kvm); 1005 if (!slots || !slots->used_slots) 1006 return -EINVAL; 1007 1008 if (!kvm->arch.use_cmma) { 1009 kvm->arch.migration_mode = 1; 1010 return 0; 1011 } 1012 /* mark all the pages in active slots as dirty */ 1013 for (slotnr = 0; slotnr < slots->used_slots; slotnr++) { 1014 ms = slots->memslots + slotnr; 1015 /* 1016 * The second half of the bitmap is only used on x86, 1017 * and would be wasted otherwise, so we put it to good 1018 * use here to keep track of the state of the storage 1019 * attributes. 1020 */ 1021 memset(kvm_second_dirty_bitmap(ms), 0xff, kvm_dirty_bitmap_bytes(ms)); 1022 ram_pages += ms->npages; 1023 } 1024 atomic64_set(&kvm->arch.cmma_dirty_pages, ram_pages); 1025 kvm->arch.migration_mode = 1; 1026 kvm_s390_sync_request_broadcast(kvm, KVM_REQ_START_MIGRATION); 1027 return 0; 1028 } 1029 1030 /* 1031 * Must be called with kvm->slots_lock to avoid races with ourselves and 1032 * kvm_s390_vm_start_migration. 1033 */ 1034 static int kvm_s390_vm_stop_migration(struct kvm *kvm) 1035 { 1036 /* migration mode already disabled */ 1037 if (!kvm->arch.migration_mode) 1038 return 0; 1039 kvm->arch.migration_mode = 0; 1040 if (kvm->arch.use_cmma) 1041 kvm_s390_sync_request_broadcast(kvm, KVM_REQ_STOP_MIGRATION); 1042 return 0; 1043 } 1044 1045 static int kvm_s390_vm_set_migration(struct kvm *kvm, 1046 struct kvm_device_attr *attr) 1047 { 1048 int res = -ENXIO; 1049 1050 mutex_lock(&kvm->slots_lock); 1051 switch (attr->attr) { 1052 case KVM_S390_VM_MIGRATION_START: 1053 res = kvm_s390_vm_start_migration(kvm); 1054 break; 1055 case KVM_S390_VM_MIGRATION_STOP: 1056 res = kvm_s390_vm_stop_migration(kvm); 1057 break; 1058 default: 1059 break; 1060 } 1061 mutex_unlock(&kvm->slots_lock); 1062 1063 return res; 1064 } 1065 1066 static int kvm_s390_vm_get_migration(struct kvm *kvm, 1067 struct kvm_device_attr *attr) 1068 { 1069 u64 mig = kvm->arch.migration_mode; 1070 1071 if (attr->attr != KVM_S390_VM_MIGRATION_STATUS) 1072 return -ENXIO; 1073 1074 if (copy_to_user((void __user *)attr->addr, &mig, sizeof(mig))) 1075 return -EFAULT; 1076 return 0; 1077 } 1078 1079 static int kvm_s390_set_tod_ext(struct kvm *kvm, struct kvm_device_attr *attr) 1080 { 1081 struct kvm_s390_vm_tod_clock gtod; 1082 1083 if (copy_from_user(>od, (void __user *)attr->addr, sizeof(gtod))) 1084 return -EFAULT; 1085 1086 if (!test_kvm_facility(kvm, 139) && gtod.epoch_idx) 1087 return -EINVAL; 1088 kvm_s390_set_tod_clock(kvm, >od); 1089 1090 VM_EVENT(kvm, 3, "SET: TOD extension: 0x%x, TOD base: 0x%llx", 1091 gtod.epoch_idx, gtod.tod); 1092 1093 return 0; 1094 } 1095 1096 static int kvm_s390_set_tod_high(struct kvm *kvm, struct kvm_device_attr *attr) 1097 { 1098 u8 gtod_high; 1099 1100 if (copy_from_user(>od_high, (void __user *)attr->addr, 1101 sizeof(gtod_high))) 1102 return -EFAULT; 1103 1104 if (gtod_high != 0) 1105 return -EINVAL; 1106 VM_EVENT(kvm, 3, "SET: TOD extension: 0x%x", gtod_high); 1107 1108 return 0; 1109 } 1110 1111 static int kvm_s390_set_tod_low(struct kvm *kvm, struct kvm_device_attr *attr) 1112 { 1113 struct kvm_s390_vm_tod_clock gtod = { 0 }; 1114 1115 if (copy_from_user(>od.tod, (void __user *)attr->addr, 1116 sizeof(gtod.tod))) 1117 return -EFAULT; 1118 1119 kvm_s390_set_tod_clock(kvm, >od); 1120 VM_EVENT(kvm, 3, "SET: TOD base: 0x%llx", gtod.tod); 1121 return 0; 1122 } 1123 1124 static int kvm_s390_set_tod(struct kvm *kvm, struct kvm_device_attr *attr) 1125 { 1126 int ret; 1127 1128 if (attr->flags) 1129 return -EINVAL; 1130 1131 switch (attr->attr) { 1132 case KVM_S390_VM_TOD_EXT: 1133 ret = kvm_s390_set_tod_ext(kvm, attr); 1134 break; 1135 case KVM_S390_VM_TOD_HIGH: 1136 ret = kvm_s390_set_tod_high(kvm, attr); 1137 break; 1138 case KVM_S390_VM_TOD_LOW: 1139 ret = kvm_s390_set_tod_low(kvm, attr); 1140 break; 1141 default: 1142 ret = -ENXIO; 1143 break; 1144 } 1145 return ret; 1146 } 1147 1148 static void kvm_s390_get_tod_clock(struct kvm *kvm, 1149 struct kvm_s390_vm_tod_clock *gtod) 1150 { 1151 struct kvm_s390_tod_clock_ext htod; 1152 1153 preempt_disable(); 1154 1155 get_tod_clock_ext((char *)&htod); 1156 1157 gtod->tod = htod.tod + kvm->arch.epoch; 1158 gtod->epoch_idx = 0; 1159 if (test_kvm_facility(kvm, 139)) { 1160 gtod->epoch_idx = htod.epoch_idx + kvm->arch.epdx; 1161 if (gtod->tod < htod.tod) 1162 gtod->epoch_idx += 1; 1163 } 1164 1165 preempt_enable(); 1166 } 1167 1168 static int kvm_s390_get_tod_ext(struct kvm *kvm, struct kvm_device_attr *attr) 1169 { 1170 struct kvm_s390_vm_tod_clock gtod; 1171 1172 memset(>od, 0, sizeof(gtod)); 1173 kvm_s390_get_tod_clock(kvm, >od); 1174 if (copy_to_user((void __user *)attr->addr, >od, sizeof(gtod))) 1175 return -EFAULT; 1176 1177 VM_EVENT(kvm, 3, "QUERY: TOD extension: 0x%x, TOD base: 0x%llx", 1178 gtod.epoch_idx, gtod.tod); 1179 return 0; 1180 } 1181 1182 static int kvm_s390_get_tod_high(struct kvm *kvm, struct kvm_device_attr *attr) 1183 { 1184 u8 gtod_high = 0; 1185 1186 if (copy_to_user((void __user *)attr->addr, >od_high, 1187 sizeof(gtod_high))) 1188 return -EFAULT; 1189 VM_EVENT(kvm, 3, "QUERY: TOD extension: 0x%x", gtod_high); 1190 1191 return 0; 1192 } 1193 1194 static int kvm_s390_get_tod_low(struct kvm *kvm, struct kvm_device_attr *attr) 1195 { 1196 u64 gtod; 1197 1198 gtod = kvm_s390_get_tod_clock_fast(kvm); 1199 if (copy_to_user((void __user *)attr->addr, >od, sizeof(gtod))) 1200 return -EFAULT; 1201 VM_EVENT(kvm, 3, "QUERY: TOD base: 0x%llx", gtod); 1202 1203 return 0; 1204 } 1205 1206 static int kvm_s390_get_tod(struct kvm *kvm, struct kvm_device_attr *attr) 1207 { 1208 int ret; 1209 1210 if (attr->flags) 1211 return -EINVAL; 1212 1213 switch (attr->attr) { 1214 case KVM_S390_VM_TOD_EXT: 1215 ret = kvm_s390_get_tod_ext(kvm, attr); 1216 break; 1217 case KVM_S390_VM_TOD_HIGH: 1218 ret = kvm_s390_get_tod_high(kvm, attr); 1219 break; 1220 case KVM_S390_VM_TOD_LOW: 1221 ret = kvm_s390_get_tod_low(kvm, attr); 1222 break; 1223 default: 1224 ret = -ENXIO; 1225 break; 1226 } 1227 return ret; 1228 } 1229 1230 static int kvm_s390_set_processor(struct kvm *kvm, struct kvm_device_attr *attr) 1231 { 1232 struct kvm_s390_vm_cpu_processor *proc; 1233 u16 lowest_ibc, unblocked_ibc; 1234 int ret = 0; 1235 1236 mutex_lock(&kvm->lock); 1237 if (kvm->created_vcpus) { 1238 ret = -EBUSY; 1239 goto out; 1240 } 1241 proc = kzalloc(sizeof(*proc), GFP_KERNEL); 1242 if (!proc) { 1243 ret = -ENOMEM; 1244 goto out; 1245 } 1246 if (!copy_from_user(proc, (void __user *)attr->addr, 1247 sizeof(*proc))) { 1248 kvm->arch.model.cpuid = proc->cpuid; 1249 lowest_ibc = sclp.ibc >> 16 & 0xfff; 1250 unblocked_ibc = sclp.ibc & 0xfff; 1251 if (lowest_ibc && proc->ibc) { 1252 if (proc->ibc > unblocked_ibc) 1253 kvm->arch.model.ibc = unblocked_ibc; 1254 else if (proc->ibc < lowest_ibc) 1255 kvm->arch.model.ibc = lowest_ibc; 1256 else 1257 kvm->arch.model.ibc = proc->ibc; 1258 } 1259 memcpy(kvm->arch.model.fac_list, proc->fac_list, 1260 S390_ARCH_FAC_LIST_SIZE_BYTE); 1261 VM_EVENT(kvm, 3, "SET: guest ibc: 0x%4.4x, guest cpuid: 0x%16.16llx", 1262 kvm->arch.model.ibc, 1263 kvm->arch.model.cpuid); 1264 VM_EVENT(kvm, 3, "SET: guest faclist: 0x%16.16llx.%16.16llx.%16.16llx", 1265 kvm->arch.model.fac_list[0], 1266 kvm->arch.model.fac_list[1], 1267 kvm->arch.model.fac_list[2]); 1268 } else 1269 ret = -EFAULT; 1270 kfree(proc); 1271 out: 1272 mutex_unlock(&kvm->lock); 1273 return ret; 1274 } 1275 1276 static int kvm_s390_set_processor_feat(struct kvm *kvm, 1277 struct kvm_device_attr *attr) 1278 { 1279 struct kvm_s390_vm_cpu_feat data; 1280 1281 if (copy_from_user(&data, (void __user *)attr->addr, sizeof(data))) 1282 return -EFAULT; 1283 if (!bitmap_subset((unsigned long *) data.feat, 1284 kvm_s390_available_cpu_feat, 1285 KVM_S390_VM_CPU_FEAT_NR_BITS)) 1286 return -EINVAL; 1287 1288 mutex_lock(&kvm->lock); 1289 if (kvm->created_vcpus) { 1290 mutex_unlock(&kvm->lock); 1291 return -EBUSY; 1292 } 1293 bitmap_copy(kvm->arch.cpu_feat, (unsigned long *) data.feat, 1294 KVM_S390_VM_CPU_FEAT_NR_BITS); 1295 mutex_unlock(&kvm->lock); 1296 VM_EVENT(kvm, 3, "SET: guest feat: 0x%16.16llx.0x%16.16llx.0x%16.16llx", 1297 data.feat[0], 1298 data.feat[1], 1299 data.feat[2]); 1300 return 0; 1301 } 1302 1303 static int kvm_s390_set_processor_subfunc(struct kvm *kvm, 1304 struct kvm_device_attr *attr) 1305 { 1306 mutex_lock(&kvm->lock); 1307 if (kvm->created_vcpus) { 1308 mutex_unlock(&kvm->lock); 1309 return -EBUSY; 1310 } 1311 1312 if (copy_from_user(&kvm->arch.model.subfuncs, (void __user *)attr->addr, 1313 sizeof(struct kvm_s390_vm_cpu_subfunc))) { 1314 mutex_unlock(&kvm->lock); 1315 return -EFAULT; 1316 } 1317 mutex_unlock(&kvm->lock); 1318 1319 VM_EVENT(kvm, 3, "SET: guest PLO subfunc 0x%16.16lx.%16.16lx.%16.16lx.%16.16lx", 1320 ((unsigned long *) &kvm->arch.model.subfuncs.plo)[0], 1321 ((unsigned long *) &kvm->arch.model.subfuncs.plo)[1], 1322 ((unsigned long *) &kvm->arch.model.subfuncs.plo)[2], 1323 ((unsigned long *) &kvm->arch.model.subfuncs.plo)[3]); 1324 VM_EVENT(kvm, 3, "SET: guest PTFF subfunc 0x%16.16lx.%16.16lx", 1325 ((unsigned long *) &kvm->arch.model.subfuncs.ptff)[0], 1326 ((unsigned long *) &kvm->arch.model.subfuncs.ptff)[1]); 1327 VM_EVENT(kvm, 3, "SET: guest KMAC subfunc 0x%16.16lx.%16.16lx", 1328 ((unsigned long *) &kvm->arch.model.subfuncs.kmac)[0], 1329 ((unsigned long *) &kvm->arch.model.subfuncs.kmac)[1]); 1330 VM_EVENT(kvm, 3, "SET: guest KMC subfunc 0x%16.16lx.%16.16lx", 1331 ((unsigned long *) &kvm->arch.model.subfuncs.kmc)[0], 1332 ((unsigned long *) &kvm->arch.model.subfuncs.kmc)[1]); 1333 VM_EVENT(kvm, 3, "SET: guest KM subfunc 0x%16.16lx.%16.16lx", 1334 ((unsigned long *) &kvm->arch.model.subfuncs.km)[0], 1335 ((unsigned long *) &kvm->arch.model.subfuncs.km)[1]); 1336 VM_EVENT(kvm, 3, "SET: guest KIMD subfunc 0x%16.16lx.%16.16lx", 1337 ((unsigned long *) &kvm->arch.model.subfuncs.kimd)[0], 1338 ((unsigned long *) &kvm->arch.model.subfuncs.kimd)[1]); 1339 VM_EVENT(kvm, 3, "SET: guest KLMD subfunc 0x%16.16lx.%16.16lx", 1340 ((unsigned long *) &kvm->arch.model.subfuncs.klmd)[0], 1341 ((unsigned long *) &kvm->arch.model.subfuncs.klmd)[1]); 1342 VM_EVENT(kvm, 3, "SET: guest PCKMO subfunc 0x%16.16lx.%16.16lx", 1343 ((unsigned long *) &kvm->arch.model.subfuncs.pckmo)[0], 1344 ((unsigned long *) &kvm->arch.model.subfuncs.pckmo)[1]); 1345 VM_EVENT(kvm, 3, "SET: guest KMCTR subfunc 0x%16.16lx.%16.16lx", 1346 ((unsigned long *) &kvm->arch.model.subfuncs.kmctr)[0], 1347 ((unsigned long *) &kvm->arch.model.subfuncs.kmctr)[1]); 1348 VM_EVENT(kvm, 3, "SET: guest KMF subfunc 0x%16.16lx.%16.16lx", 1349 ((unsigned long *) &kvm->arch.model.subfuncs.kmf)[0], 1350 ((unsigned long *) &kvm->arch.model.subfuncs.kmf)[1]); 1351 VM_EVENT(kvm, 3, "SET: guest KMO subfunc 0x%16.16lx.%16.16lx", 1352 ((unsigned long *) &kvm->arch.model.subfuncs.kmo)[0], 1353 ((unsigned long *) &kvm->arch.model.subfuncs.kmo)[1]); 1354 VM_EVENT(kvm, 3, "SET: guest PCC subfunc 0x%16.16lx.%16.16lx", 1355 ((unsigned long *) &kvm->arch.model.subfuncs.pcc)[0], 1356 ((unsigned long *) &kvm->arch.model.subfuncs.pcc)[1]); 1357 VM_EVENT(kvm, 3, "SET: guest PPNO subfunc 0x%16.16lx.%16.16lx", 1358 ((unsigned long *) &kvm->arch.model.subfuncs.ppno)[0], 1359 ((unsigned long *) &kvm->arch.model.subfuncs.ppno)[1]); 1360 VM_EVENT(kvm, 3, "SET: guest KMA subfunc 0x%16.16lx.%16.16lx", 1361 ((unsigned long *) &kvm->arch.model.subfuncs.kma)[0], 1362 ((unsigned long *) &kvm->arch.model.subfuncs.kma)[1]); 1363 VM_EVENT(kvm, 3, "SET: guest KDSA subfunc 0x%16.16lx.%16.16lx", 1364 ((unsigned long *) &kvm->arch.model.subfuncs.kdsa)[0], 1365 ((unsigned long *) &kvm->arch.model.subfuncs.kdsa)[1]); 1366 VM_EVENT(kvm, 3, "SET: guest SORTL subfunc 0x%16.16lx.%16.16lx.%16.16lx.%16.16lx", 1367 ((unsigned long *) &kvm->arch.model.subfuncs.sortl)[0], 1368 ((unsigned long *) &kvm->arch.model.subfuncs.sortl)[1], 1369 ((unsigned long *) &kvm->arch.model.subfuncs.sortl)[2], 1370 ((unsigned long *) &kvm->arch.model.subfuncs.sortl)[3]); 1371 VM_EVENT(kvm, 3, "SET: guest DFLTCC subfunc 0x%16.16lx.%16.16lx.%16.16lx.%16.16lx", 1372 ((unsigned long *) &kvm->arch.model.subfuncs.dfltcc)[0], 1373 ((unsigned long *) &kvm->arch.model.subfuncs.dfltcc)[1], 1374 ((unsigned long *) &kvm->arch.model.subfuncs.dfltcc)[2], 1375 ((unsigned long *) &kvm->arch.model.subfuncs.dfltcc)[3]); 1376 1377 return 0; 1378 } 1379 1380 static int kvm_s390_set_cpu_model(struct kvm *kvm, struct kvm_device_attr *attr) 1381 { 1382 int ret = -ENXIO; 1383 1384 switch (attr->attr) { 1385 case KVM_S390_VM_CPU_PROCESSOR: 1386 ret = kvm_s390_set_processor(kvm, attr); 1387 break; 1388 case KVM_S390_VM_CPU_PROCESSOR_FEAT: 1389 ret = kvm_s390_set_processor_feat(kvm, attr); 1390 break; 1391 case KVM_S390_VM_CPU_PROCESSOR_SUBFUNC: 1392 ret = kvm_s390_set_processor_subfunc(kvm, attr); 1393 break; 1394 } 1395 return ret; 1396 } 1397 1398 static int kvm_s390_get_processor(struct kvm *kvm, struct kvm_device_attr *attr) 1399 { 1400 struct kvm_s390_vm_cpu_processor *proc; 1401 int ret = 0; 1402 1403 proc = kzalloc(sizeof(*proc), GFP_KERNEL); 1404 if (!proc) { 1405 ret = -ENOMEM; 1406 goto out; 1407 } 1408 proc->cpuid = kvm->arch.model.cpuid; 1409 proc->ibc = kvm->arch.model.ibc; 1410 memcpy(&proc->fac_list, kvm->arch.model.fac_list, 1411 S390_ARCH_FAC_LIST_SIZE_BYTE); 1412 VM_EVENT(kvm, 3, "GET: guest ibc: 0x%4.4x, guest cpuid: 0x%16.16llx", 1413 kvm->arch.model.ibc, 1414 kvm->arch.model.cpuid); 1415 VM_EVENT(kvm, 3, "GET: guest faclist: 0x%16.16llx.%16.16llx.%16.16llx", 1416 kvm->arch.model.fac_list[0], 1417 kvm->arch.model.fac_list[1], 1418 kvm->arch.model.fac_list[2]); 1419 if (copy_to_user((void __user *)attr->addr, proc, sizeof(*proc))) 1420 ret = -EFAULT; 1421 kfree(proc); 1422 out: 1423 return ret; 1424 } 1425 1426 static int kvm_s390_get_machine(struct kvm *kvm, struct kvm_device_attr *attr) 1427 { 1428 struct kvm_s390_vm_cpu_machine *mach; 1429 int ret = 0; 1430 1431 mach = kzalloc(sizeof(*mach), GFP_KERNEL); 1432 if (!mach) { 1433 ret = -ENOMEM; 1434 goto out; 1435 } 1436 get_cpu_id((struct cpuid *) &mach->cpuid); 1437 mach->ibc = sclp.ibc; 1438 memcpy(&mach->fac_mask, kvm->arch.model.fac_mask, 1439 S390_ARCH_FAC_LIST_SIZE_BYTE); 1440 memcpy((unsigned long *)&mach->fac_list, S390_lowcore.stfle_fac_list, 1441 sizeof(S390_lowcore.stfle_fac_list)); 1442 VM_EVENT(kvm, 3, "GET: host ibc: 0x%4.4x, host cpuid: 0x%16.16llx", 1443 kvm->arch.model.ibc, 1444 kvm->arch.model.cpuid); 1445 VM_EVENT(kvm, 3, "GET: host facmask: 0x%16.16llx.%16.16llx.%16.16llx", 1446 mach->fac_mask[0], 1447 mach->fac_mask[1], 1448 mach->fac_mask[2]); 1449 VM_EVENT(kvm, 3, "GET: host faclist: 0x%16.16llx.%16.16llx.%16.16llx", 1450 mach->fac_list[0], 1451 mach->fac_list[1], 1452 mach->fac_list[2]); 1453 if (copy_to_user((void __user *)attr->addr, mach, sizeof(*mach))) 1454 ret = -EFAULT; 1455 kfree(mach); 1456 out: 1457 return ret; 1458 } 1459 1460 static int kvm_s390_get_processor_feat(struct kvm *kvm, 1461 struct kvm_device_attr *attr) 1462 { 1463 struct kvm_s390_vm_cpu_feat data; 1464 1465 bitmap_copy((unsigned long *) data.feat, kvm->arch.cpu_feat, 1466 KVM_S390_VM_CPU_FEAT_NR_BITS); 1467 if (copy_to_user((void __user *)attr->addr, &data, sizeof(data))) 1468 return -EFAULT; 1469 VM_EVENT(kvm, 3, "GET: guest feat: 0x%16.16llx.0x%16.16llx.0x%16.16llx", 1470 data.feat[0], 1471 data.feat[1], 1472 data.feat[2]); 1473 return 0; 1474 } 1475 1476 static int kvm_s390_get_machine_feat(struct kvm *kvm, 1477 struct kvm_device_attr *attr) 1478 { 1479 struct kvm_s390_vm_cpu_feat data; 1480 1481 bitmap_copy((unsigned long *) data.feat, 1482 kvm_s390_available_cpu_feat, 1483 KVM_S390_VM_CPU_FEAT_NR_BITS); 1484 if (copy_to_user((void __user *)attr->addr, &data, sizeof(data))) 1485 return -EFAULT; 1486 VM_EVENT(kvm, 3, "GET: host feat: 0x%16.16llx.0x%16.16llx.0x%16.16llx", 1487 data.feat[0], 1488 data.feat[1], 1489 data.feat[2]); 1490 return 0; 1491 } 1492 1493 static int kvm_s390_get_processor_subfunc(struct kvm *kvm, 1494 struct kvm_device_attr *attr) 1495 { 1496 if (copy_to_user((void __user *)attr->addr, &kvm->arch.model.subfuncs, 1497 sizeof(struct kvm_s390_vm_cpu_subfunc))) 1498 return -EFAULT; 1499 1500 VM_EVENT(kvm, 3, "GET: guest PLO subfunc 0x%16.16lx.%16.16lx.%16.16lx.%16.16lx", 1501 ((unsigned long *) &kvm->arch.model.subfuncs.plo)[0], 1502 ((unsigned long *) &kvm->arch.model.subfuncs.plo)[1], 1503 ((unsigned long *) &kvm->arch.model.subfuncs.plo)[2], 1504 ((unsigned long *) &kvm->arch.model.subfuncs.plo)[3]); 1505 VM_EVENT(kvm, 3, "GET: guest PTFF subfunc 0x%16.16lx.%16.16lx", 1506 ((unsigned long *) &kvm->arch.model.subfuncs.ptff)[0], 1507 ((unsigned long *) &kvm->arch.model.subfuncs.ptff)[1]); 1508 VM_EVENT(kvm, 3, "GET: guest KMAC subfunc 0x%16.16lx.%16.16lx", 1509 ((unsigned long *) &kvm->arch.model.subfuncs.kmac)[0], 1510 ((unsigned long *) &kvm->arch.model.subfuncs.kmac)[1]); 1511 VM_EVENT(kvm, 3, "GET: guest KMC subfunc 0x%16.16lx.%16.16lx", 1512 ((unsigned long *) &kvm->arch.model.subfuncs.kmc)[0], 1513 ((unsigned long *) &kvm->arch.model.subfuncs.kmc)[1]); 1514 VM_EVENT(kvm, 3, "GET: guest KM subfunc 0x%16.16lx.%16.16lx", 1515 ((unsigned long *) &kvm->arch.model.subfuncs.km)[0], 1516 ((unsigned long *) &kvm->arch.model.subfuncs.km)[1]); 1517 VM_EVENT(kvm, 3, "GET: guest KIMD subfunc 0x%16.16lx.%16.16lx", 1518 ((unsigned long *) &kvm->arch.model.subfuncs.kimd)[0], 1519 ((unsigned long *) &kvm->arch.model.subfuncs.kimd)[1]); 1520 VM_EVENT(kvm, 3, "GET: guest KLMD subfunc 0x%16.16lx.%16.16lx", 1521 ((unsigned long *) &kvm->arch.model.subfuncs.klmd)[0], 1522 ((unsigned long *) &kvm->arch.model.subfuncs.klmd)[1]); 1523 VM_EVENT(kvm, 3, "GET: guest PCKMO subfunc 0x%16.16lx.%16.16lx", 1524 ((unsigned long *) &kvm->arch.model.subfuncs.pckmo)[0], 1525 ((unsigned long *) &kvm->arch.model.subfuncs.pckmo)[1]); 1526 VM_EVENT(kvm, 3, "GET: guest KMCTR subfunc 0x%16.16lx.%16.16lx", 1527 ((unsigned long *) &kvm->arch.model.subfuncs.kmctr)[0], 1528 ((unsigned long *) &kvm->arch.model.subfuncs.kmctr)[1]); 1529 VM_EVENT(kvm, 3, "GET: guest KMF subfunc 0x%16.16lx.%16.16lx", 1530 ((unsigned long *) &kvm->arch.model.subfuncs.kmf)[0], 1531 ((unsigned long *) &kvm->arch.model.subfuncs.kmf)[1]); 1532 VM_EVENT(kvm, 3, "GET: guest KMO subfunc 0x%16.16lx.%16.16lx", 1533 ((unsigned long *) &kvm->arch.model.subfuncs.kmo)[0], 1534 ((unsigned long *) &kvm->arch.model.subfuncs.kmo)[1]); 1535 VM_EVENT(kvm, 3, "GET: guest PCC subfunc 0x%16.16lx.%16.16lx", 1536 ((unsigned long *) &kvm->arch.model.subfuncs.pcc)[0], 1537 ((unsigned long *) &kvm->arch.model.subfuncs.pcc)[1]); 1538 VM_EVENT(kvm, 3, "GET: guest PPNO subfunc 0x%16.16lx.%16.16lx", 1539 ((unsigned long *) &kvm->arch.model.subfuncs.ppno)[0], 1540 ((unsigned long *) &kvm->arch.model.subfuncs.ppno)[1]); 1541 VM_EVENT(kvm, 3, "GET: guest KMA subfunc 0x%16.16lx.%16.16lx", 1542 ((unsigned long *) &kvm->arch.model.subfuncs.kma)[0], 1543 ((unsigned long *) &kvm->arch.model.subfuncs.kma)[1]); 1544 VM_EVENT(kvm, 3, "GET: guest KDSA subfunc 0x%16.16lx.%16.16lx", 1545 ((unsigned long *) &kvm->arch.model.subfuncs.kdsa)[0], 1546 ((unsigned long *) &kvm->arch.model.subfuncs.kdsa)[1]); 1547 VM_EVENT(kvm, 3, "GET: guest SORTL subfunc 0x%16.16lx.%16.16lx.%16.16lx.%16.16lx", 1548 ((unsigned long *) &kvm->arch.model.subfuncs.sortl)[0], 1549 ((unsigned long *) &kvm->arch.model.subfuncs.sortl)[1], 1550 ((unsigned long *) &kvm->arch.model.subfuncs.sortl)[2], 1551 ((unsigned long *) &kvm->arch.model.subfuncs.sortl)[3]); 1552 VM_EVENT(kvm, 3, "GET: guest DFLTCC subfunc 0x%16.16lx.%16.16lx.%16.16lx.%16.16lx", 1553 ((unsigned long *) &kvm->arch.model.subfuncs.dfltcc)[0], 1554 ((unsigned long *) &kvm->arch.model.subfuncs.dfltcc)[1], 1555 ((unsigned long *) &kvm->arch.model.subfuncs.dfltcc)[2], 1556 ((unsigned long *) &kvm->arch.model.subfuncs.dfltcc)[3]); 1557 1558 return 0; 1559 } 1560 1561 static int kvm_s390_get_machine_subfunc(struct kvm *kvm, 1562 struct kvm_device_attr *attr) 1563 { 1564 if (copy_to_user((void __user *)attr->addr, &kvm_s390_available_subfunc, 1565 sizeof(struct kvm_s390_vm_cpu_subfunc))) 1566 return -EFAULT; 1567 1568 VM_EVENT(kvm, 3, "GET: host PLO subfunc 0x%16.16lx.%16.16lx.%16.16lx.%16.16lx", 1569 ((unsigned long *) &kvm_s390_available_subfunc.plo)[0], 1570 ((unsigned long *) &kvm_s390_available_subfunc.plo)[1], 1571 ((unsigned long *) &kvm_s390_available_subfunc.plo)[2], 1572 ((unsigned long *) &kvm_s390_available_subfunc.plo)[3]); 1573 VM_EVENT(kvm, 3, "GET: host PTFF subfunc 0x%16.16lx.%16.16lx", 1574 ((unsigned long *) &kvm_s390_available_subfunc.ptff)[0], 1575 ((unsigned long *) &kvm_s390_available_subfunc.ptff)[1]); 1576 VM_EVENT(kvm, 3, "GET: host KMAC subfunc 0x%16.16lx.%16.16lx", 1577 ((unsigned long *) &kvm_s390_available_subfunc.kmac)[0], 1578 ((unsigned long *) &kvm_s390_available_subfunc.kmac)[1]); 1579 VM_EVENT(kvm, 3, "GET: host KMC subfunc 0x%16.16lx.%16.16lx", 1580 ((unsigned long *) &kvm_s390_available_subfunc.kmc)[0], 1581 ((unsigned long *) &kvm_s390_available_subfunc.kmc)[1]); 1582 VM_EVENT(kvm, 3, "GET: host KM subfunc 0x%16.16lx.%16.16lx", 1583 ((unsigned long *) &kvm_s390_available_subfunc.km)[0], 1584 ((unsigned long *) &kvm_s390_available_subfunc.km)[1]); 1585 VM_EVENT(kvm, 3, "GET: host KIMD subfunc 0x%16.16lx.%16.16lx", 1586 ((unsigned long *) &kvm_s390_available_subfunc.kimd)[0], 1587 ((unsigned long *) &kvm_s390_available_subfunc.kimd)[1]); 1588 VM_EVENT(kvm, 3, "GET: host KLMD subfunc 0x%16.16lx.%16.16lx", 1589 ((unsigned long *) &kvm_s390_available_subfunc.klmd)[0], 1590 ((unsigned long *) &kvm_s390_available_subfunc.klmd)[1]); 1591 VM_EVENT(kvm, 3, "GET: host PCKMO subfunc 0x%16.16lx.%16.16lx", 1592 ((unsigned long *) &kvm_s390_available_subfunc.pckmo)[0], 1593 ((unsigned long *) &kvm_s390_available_subfunc.pckmo)[1]); 1594 VM_EVENT(kvm, 3, "GET: host KMCTR subfunc 0x%16.16lx.%16.16lx", 1595 ((unsigned long *) &kvm_s390_available_subfunc.kmctr)[0], 1596 ((unsigned long *) &kvm_s390_available_subfunc.kmctr)[1]); 1597 VM_EVENT(kvm, 3, "GET: host KMF subfunc 0x%16.16lx.%16.16lx", 1598 ((unsigned long *) &kvm_s390_available_subfunc.kmf)[0], 1599 ((unsigned long *) &kvm_s390_available_subfunc.kmf)[1]); 1600 VM_EVENT(kvm, 3, "GET: host KMO subfunc 0x%16.16lx.%16.16lx", 1601 ((unsigned long *) &kvm_s390_available_subfunc.kmo)[0], 1602 ((unsigned long *) &kvm_s390_available_subfunc.kmo)[1]); 1603 VM_EVENT(kvm, 3, "GET: host PCC subfunc 0x%16.16lx.%16.16lx", 1604 ((unsigned long *) &kvm_s390_available_subfunc.pcc)[0], 1605 ((unsigned long *) &kvm_s390_available_subfunc.pcc)[1]); 1606 VM_EVENT(kvm, 3, "GET: host PPNO subfunc 0x%16.16lx.%16.16lx", 1607 ((unsigned long *) &kvm_s390_available_subfunc.ppno)[0], 1608 ((unsigned long *) &kvm_s390_available_subfunc.ppno)[1]); 1609 VM_EVENT(kvm, 3, "GET: host KMA subfunc 0x%16.16lx.%16.16lx", 1610 ((unsigned long *) &kvm_s390_available_subfunc.kma)[0], 1611 ((unsigned long *) &kvm_s390_available_subfunc.kma)[1]); 1612 VM_EVENT(kvm, 3, "GET: host KDSA subfunc 0x%16.16lx.%16.16lx", 1613 ((unsigned long *) &kvm_s390_available_subfunc.kdsa)[0], 1614 ((unsigned long *) &kvm_s390_available_subfunc.kdsa)[1]); 1615 VM_EVENT(kvm, 3, "GET: host SORTL subfunc 0x%16.16lx.%16.16lx.%16.16lx.%16.16lx", 1616 ((unsigned long *) &kvm_s390_available_subfunc.sortl)[0], 1617 ((unsigned long *) &kvm_s390_available_subfunc.sortl)[1], 1618 ((unsigned long *) &kvm_s390_available_subfunc.sortl)[2], 1619 ((unsigned long *) &kvm_s390_available_subfunc.sortl)[3]); 1620 VM_EVENT(kvm, 3, "GET: host DFLTCC subfunc 0x%16.16lx.%16.16lx.%16.16lx.%16.16lx", 1621 ((unsigned long *) &kvm_s390_available_subfunc.dfltcc)[0], 1622 ((unsigned long *) &kvm_s390_available_subfunc.dfltcc)[1], 1623 ((unsigned long *) &kvm_s390_available_subfunc.dfltcc)[2], 1624 ((unsigned long *) &kvm_s390_available_subfunc.dfltcc)[3]); 1625 1626 return 0; 1627 } 1628 1629 static int kvm_s390_get_cpu_model(struct kvm *kvm, struct kvm_device_attr *attr) 1630 { 1631 int ret = -ENXIO; 1632 1633 switch (attr->attr) { 1634 case KVM_S390_VM_CPU_PROCESSOR: 1635 ret = kvm_s390_get_processor(kvm, attr); 1636 break; 1637 case KVM_S390_VM_CPU_MACHINE: 1638 ret = kvm_s390_get_machine(kvm, attr); 1639 break; 1640 case KVM_S390_VM_CPU_PROCESSOR_FEAT: 1641 ret = kvm_s390_get_processor_feat(kvm, attr); 1642 break; 1643 case KVM_S390_VM_CPU_MACHINE_FEAT: 1644 ret = kvm_s390_get_machine_feat(kvm, attr); 1645 break; 1646 case KVM_S390_VM_CPU_PROCESSOR_SUBFUNC: 1647 ret = kvm_s390_get_processor_subfunc(kvm, attr); 1648 break; 1649 case KVM_S390_VM_CPU_MACHINE_SUBFUNC: 1650 ret = kvm_s390_get_machine_subfunc(kvm, attr); 1651 break; 1652 } 1653 return ret; 1654 } 1655 1656 static int kvm_s390_vm_set_attr(struct kvm *kvm, struct kvm_device_attr *attr) 1657 { 1658 int ret; 1659 1660 switch (attr->group) { 1661 case KVM_S390_VM_MEM_CTRL: 1662 ret = kvm_s390_set_mem_control(kvm, attr); 1663 break; 1664 case KVM_S390_VM_TOD: 1665 ret = kvm_s390_set_tod(kvm, attr); 1666 break; 1667 case KVM_S390_VM_CPU_MODEL: 1668 ret = kvm_s390_set_cpu_model(kvm, attr); 1669 break; 1670 case KVM_S390_VM_CRYPTO: 1671 ret = kvm_s390_vm_set_crypto(kvm, attr); 1672 break; 1673 case KVM_S390_VM_MIGRATION: 1674 ret = kvm_s390_vm_set_migration(kvm, attr); 1675 break; 1676 default: 1677 ret = -ENXIO; 1678 break; 1679 } 1680 1681 return ret; 1682 } 1683 1684 static int kvm_s390_vm_get_attr(struct kvm *kvm, struct kvm_device_attr *attr) 1685 { 1686 int ret; 1687 1688 switch (attr->group) { 1689 case KVM_S390_VM_MEM_CTRL: 1690 ret = kvm_s390_get_mem_control(kvm, attr); 1691 break; 1692 case KVM_S390_VM_TOD: 1693 ret = kvm_s390_get_tod(kvm, attr); 1694 break; 1695 case KVM_S390_VM_CPU_MODEL: 1696 ret = kvm_s390_get_cpu_model(kvm, attr); 1697 break; 1698 case KVM_S390_VM_MIGRATION: 1699 ret = kvm_s390_vm_get_migration(kvm, attr); 1700 break; 1701 default: 1702 ret = -ENXIO; 1703 break; 1704 } 1705 1706 return ret; 1707 } 1708 1709 static int kvm_s390_vm_has_attr(struct kvm *kvm, struct kvm_device_attr *attr) 1710 { 1711 int ret; 1712 1713 switch (attr->group) { 1714 case KVM_S390_VM_MEM_CTRL: 1715 switch (attr->attr) { 1716 case KVM_S390_VM_MEM_ENABLE_CMMA: 1717 case KVM_S390_VM_MEM_CLR_CMMA: 1718 ret = sclp.has_cmma ? 0 : -ENXIO; 1719 break; 1720 case KVM_S390_VM_MEM_LIMIT_SIZE: 1721 ret = 0; 1722 break; 1723 default: 1724 ret = -ENXIO; 1725 break; 1726 } 1727 break; 1728 case KVM_S390_VM_TOD: 1729 switch (attr->attr) { 1730 case KVM_S390_VM_TOD_LOW: 1731 case KVM_S390_VM_TOD_HIGH: 1732 ret = 0; 1733 break; 1734 default: 1735 ret = -ENXIO; 1736 break; 1737 } 1738 break; 1739 case KVM_S390_VM_CPU_MODEL: 1740 switch (attr->attr) { 1741 case KVM_S390_VM_CPU_PROCESSOR: 1742 case KVM_S390_VM_CPU_MACHINE: 1743 case KVM_S390_VM_CPU_PROCESSOR_FEAT: 1744 case KVM_S390_VM_CPU_MACHINE_FEAT: 1745 case KVM_S390_VM_CPU_MACHINE_SUBFUNC: 1746 case KVM_S390_VM_CPU_PROCESSOR_SUBFUNC: 1747 ret = 0; 1748 break; 1749 default: 1750 ret = -ENXIO; 1751 break; 1752 } 1753 break; 1754 case KVM_S390_VM_CRYPTO: 1755 switch (attr->attr) { 1756 case KVM_S390_VM_CRYPTO_ENABLE_AES_KW: 1757 case KVM_S390_VM_CRYPTO_ENABLE_DEA_KW: 1758 case KVM_S390_VM_CRYPTO_DISABLE_AES_KW: 1759 case KVM_S390_VM_CRYPTO_DISABLE_DEA_KW: 1760 ret = 0; 1761 break; 1762 case KVM_S390_VM_CRYPTO_ENABLE_APIE: 1763 case KVM_S390_VM_CRYPTO_DISABLE_APIE: 1764 ret = ap_instructions_available() ? 0 : -ENXIO; 1765 break; 1766 default: 1767 ret = -ENXIO; 1768 break; 1769 } 1770 break; 1771 case KVM_S390_VM_MIGRATION: 1772 ret = 0; 1773 break; 1774 default: 1775 ret = -ENXIO; 1776 break; 1777 } 1778 1779 return ret; 1780 } 1781 1782 static long kvm_s390_get_skeys(struct kvm *kvm, struct kvm_s390_skeys *args) 1783 { 1784 uint8_t *keys; 1785 uint64_t hva; 1786 int srcu_idx, i, r = 0; 1787 1788 if (args->flags != 0) 1789 return -EINVAL; 1790 1791 /* Is this guest using storage keys? */ 1792 if (!mm_uses_skeys(current->mm)) 1793 return KVM_S390_GET_SKEYS_NONE; 1794 1795 /* Enforce sane limit on memory allocation */ 1796 if (args->count < 1 || args->count > KVM_S390_SKEYS_MAX) 1797 return -EINVAL; 1798 1799 keys = kvmalloc_array(args->count, sizeof(uint8_t), GFP_KERNEL); 1800 if (!keys) 1801 return -ENOMEM; 1802 1803 down_read(¤t->mm->mmap_sem); 1804 srcu_idx = srcu_read_lock(&kvm->srcu); 1805 for (i = 0; i < args->count; i++) { 1806 hva = gfn_to_hva(kvm, args->start_gfn + i); 1807 if (kvm_is_error_hva(hva)) { 1808 r = -EFAULT; 1809 break; 1810 } 1811 1812 r = get_guest_storage_key(current->mm, hva, &keys[i]); 1813 if (r) 1814 break; 1815 } 1816 srcu_read_unlock(&kvm->srcu, srcu_idx); 1817 up_read(¤t->mm->mmap_sem); 1818 1819 if (!r) { 1820 r = copy_to_user((uint8_t __user *)args->skeydata_addr, keys, 1821 sizeof(uint8_t) * args->count); 1822 if (r) 1823 r = -EFAULT; 1824 } 1825 1826 kvfree(keys); 1827 return r; 1828 } 1829 1830 static long kvm_s390_set_skeys(struct kvm *kvm, struct kvm_s390_skeys *args) 1831 { 1832 uint8_t *keys; 1833 uint64_t hva; 1834 int srcu_idx, i, r = 0; 1835 bool unlocked; 1836 1837 if (args->flags != 0) 1838 return -EINVAL; 1839 1840 /* Enforce sane limit on memory allocation */ 1841 if (args->count < 1 || args->count > KVM_S390_SKEYS_MAX) 1842 return -EINVAL; 1843 1844 keys = kvmalloc_array(args->count, sizeof(uint8_t), GFP_KERNEL); 1845 if (!keys) 1846 return -ENOMEM; 1847 1848 r = copy_from_user(keys, (uint8_t __user *)args->skeydata_addr, 1849 sizeof(uint8_t) * args->count); 1850 if (r) { 1851 r = -EFAULT; 1852 goto out; 1853 } 1854 1855 /* Enable storage key handling for the guest */ 1856 r = s390_enable_skey(); 1857 if (r) 1858 goto out; 1859 1860 i = 0; 1861 down_read(¤t->mm->mmap_sem); 1862 srcu_idx = srcu_read_lock(&kvm->srcu); 1863 while (i < args->count) { 1864 unlocked = false; 1865 hva = gfn_to_hva(kvm, args->start_gfn + i); 1866 if (kvm_is_error_hva(hva)) { 1867 r = -EFAULT; 1868 break; 1869 } 1870 1871 /* Lowest order bit is reserved */ 1872 if (keys[i] & 0x01) { 1873 r = -EINVAL; 1874 break; 1875 } 1876 1877 r = set_guest_storage_key(current->mm, hva, keys[i], 0); 1878 if (r) { 1879 r = fixup_user_fault(current, current->mm, hva, 1880 FAULT_FLAG_WRITE, &unlocked); 1881 if (r) 1882 break; 1883 } 1884 if (!r) 1885 i++; 1886 } 1887 srcu_read_unlock(&kvm->srcu, srcu_idx); 1888 up_read(¤t->mm->mmap_sem); 1889 out: 1890 kvfree(keys); 1891 return r; 1892 } 1893 1894 /* 1895 * Base address and length must be sent at the start of each block, therefore 1896 * it's cheaper to send some clean data, as long as it's less than the size of 1897 * two longs. 1898 */ 1899 #define KVM_S390_MAX_BIT_DISTANCE (2 * sizeof(void *)) 1900 /* for consistency */ 1901 #define KVM_S390_CMMA_SIZE_MAX ((u32)KVM_S390_SKEYS_MAX) 1902 1903 /* 1904 * Similar to gfn_to_memslot, but returns the index of a memslot also when the 1905 * address falls in a hole. In that case the index of one of the memslots 1906 * bordering the hole is returned. 1907 */ 1908 static int gfn_to_memslot_approx(struct kvm_memslots *slots, gfn_t gfn) 1909 { 1910 int start = 0, end = slots->used_slots; 1911 int slot = atomic_read(&slots->lru_slot); 1912 struct kvm_memory_slot *memslots = slots->memslots; 1913 1914 if (gfn >= memslots[slot].base_gfn && 1915 gfn < memslots[slot].base_gfn + memslots[slot].npages) 1916 return slot; 1917 1918 while (start < end) { 1919 slot = start + (end - start) / 2; 1920 1921 if (gfn >= memslots[slot].base_gfn) 1922 end = slot; 1923 else 1924 start = slot + 1; 1925 } 1926 1927 if (gfn >= memslots[start].base_gfn && 1928 gfn < memslots[start].base_gfn + memslots[start].npages) { 1929 atomic_set(&slots->lru_slot, start); 1930 } 1931 1932 return start; 1933 } 1934 1935 static int kvm_s390_peek_cmma(struct kvm *kvm, struct kvm_s390_cmma_log *args, 1936 u8 *res, unsigned long bufsize) 1937 { 1938 unsigned long pgstev, hva, cur_gfn = args->start_gfn; 1939 1940 args->count = 0; 1941 while (args->count < bufsize) { 1942 hva = gfn_to_hva(kvm, cur_gfn); 1943 /* 1944 * We return an error if the first value was invalid, but we 1945 * return successfully if at least one value was copied. 1946 */ 1947 if (kvm_is_error_hva(hva)) 1948 return args->count ? 0 : -EFAULT; 1949 if (get_pgste(kvm->mm, hva, &pgstev) < 0) 1950 pgstev = 0; 1951 res[args->count++] = (pgstev >> 24) & 0x43; 1952 cur_gfn++; 1953 } 1954 1955 return 0; 1956 } 1957 1958 static unsigned long kvm_s390_next_dirty_cmma(struct kvm_memslots *slots, 1959 unsigned long cur_gfn) 1960 { 1961 int slotidx = gfn_to_memslot_approx(slots, cur_gfn); 1962 struct kvm_memory_slot *ms = slots->memslots + slotidx; 1963 unsigned long ofs = cur_gfn - ms->base_gfn; 1964 1965 if (ms->base_gfn + ms->npages <= cur_gfn) { 1966 slotidx--; 1967 /* If we are above the highest slot, wrap around */ 1968 if (slotidx < 0) 1969 slotidx = slots->used_slots - 1; 1970 1971 ms = slots->memslots + slotidx; 1972 ofs = 0; 1973 } 1974 ofs = find_next_bit(kvm_second_dirty_bitmap(ms), ms->npages, ofs); 1975 while ((slotidx > 0) && (ofs >= ms->npages)) { 1976 slotidx--; 1977 ms = slots->memslots + slotidx; 1978 ofs = find_next_bit(kvm_second_dirty_bitmap(ms), ms->npages, 0); 1979 } 1980 return ms->base_gfn + ofs; 1981 } 1982 1983 static int kvm_s390_get_cmma(struct kvm *kvm, struct kvm_s390_cmma_log *args, 1984 u8 *res, unsigned long bufsize) 1985 { 1986 unsigned long mem_end, cur_gfn, next_gfn, hva, pgstev; 1987 struct kvm_memslots *slots = kvm_memslots(kvm); 1988 struct kvm_memory_slot *ms; 1989 1990 cur_gfn = kvm_s390_next_dirty_cmma(slots, args->start_gfn); 1991 ms = gfn_to_memslot(kvm, cur_gfn); 1992 args->count = 0; 1993 args->start_gfn = cur_gfn; 1994 if (!ms) 1995 return 0; 1996 next_gfn = kvm_s390_next_dirty_cmma(slots, cur_gfn + 1); 1997 mem_end = slots->memslots[0].base_gfn + slots->memslots[0].npages; 1998 1999 while (args->count < bufsize) { 2000 hva = gfn_to_hva(kvm, cur_gfn); 2001 if (kvm_is_error_hva(hva)) 2002 return 0; 2003 /* Decrement only if we actually flipped the bit to 0 */ 2004 if (test_and_clear_bit(cur_gfn - ms->base_gfn, kvm_second_dirty_bitmap(ms))) 2005 atomic64_dec(&kvm->arch.cmma_dirty_pages); 2006 if (get_pgste(kvm->mm, hva, &pgstev) < 0) 2007 pgstev = 0; 2008 /* Save the value */ 2009 res[args->count++] = (pgstev >> 24) & 0x43; 2010 /* If the next bit is too far away, stop. */ 2011 if (next_gfn > cur_gfn + KVM_S390_MAX_BIT_DISTANCE) 2012 return 0; 2013 /* If we reached the previous "next", find the next one */ 2014 if (cur_gfn == next_gfn) 2015 next_gfn = kvm_s390_next_dirty_cmma(slots, cur_gfn + 1); 2016 /* Reached the end of memory or of the buffer, stop */ 2017 if ((next_gfn >= mem_end) || 2018 (next_gfn - args->start_gfn >= bufsize)) 2019 return 0; 2020 cur_gfn++; 2021 /* Reached the end of the current memslot, take the next one. */ 2022 if (cur_gfn - ms->base_gfn >= ms->npages) { 2023 ms = gfn_to_memslot(kvm, cur_gfn); 2024 if (!ms) 2025 return 0; 2026 } 2027 } 2028 return 0; 2029 } 2030 2031 /* 2032 * This function searches for the next page with dirty CMMA attributes, and 2033 * saves the attributes in the buffer up to either the end of the buffer or 2034 * until a block of at least KVM_S390_MAX_BIT_DISTANCE clean bits is found; 2035 * no trailing clean bytes are saved. 2036 * In case no dirty bits were found, or if CMMA was not enabled or used, the 2037 * output buffer will indicate 0 as length. 2038 */ 2039 static int kvm_s390_get_cmma_bits(struct kvm *kvm, 2040 struct kvm_s390_cmma_log *args) 2041 { 2042 unsigned long bufsize; 2043 int srcu_idx, peek, ret; 2044 u8 *values; 2045 2046 if (!kvm->arch.use_cmma) 2047 return -ENXIO; 2048 /* Invalid/unsupported flags were specified */ 2049 if (args->flags & ~KVM_S390_CMMA_PEEK) 2050 return -EINVAL; 2051 /* Migration mode query, and we are not doing a migration */ 2052 peek = !!(args->flags & KVM_S390_CMMA_PEEK); 2053 if (!peek && !kvm->arch.migration_mode) 2054 return -EINVAL; 2055 /* CMMA is disabled or was not used, or the buffer has length zero */ 2056 bufsize = min(args->count, KVM_S390_CMMA_SIZE_MAX); 2057 if (!bufsize || !kvm->mm->context.uses_cmm) { 2058 memset(args, 0, sizeof(*args)); 2059 return 0; 2060 } 2061 /* We are not peeking, and there are no dirty pages */ 2062 if (!peek && !atomic64_read(&kvm->arch.cmma_dirty_pages)) { 2063 memset(args, 0, sizeof(*args)); 2064 return 0; 2065 } 2066 2067 values = vmalloc(bufsize); 2068 if (!values) 2069 return -ENOMEM; 2070 2071 down_read(&kvm->mm->mmap_sem); 2072 srcu_idx = srcu_read_lock(&kvm->srcu); 2073 if (peek) 2074 ret = kvm_s390_peek_cmma(kvm, args, values, bufsize); 2075 else 2076 ret = kvm_s390_get_cmma(kvm, args, values, bufsize); 2077 srcu_read_unlock(&kvm->srcu, srcu_idx); 2078 up_read(&kvm->mm->mmap_sem); 2079 2080 if (kvm->arch.migration_mode) 2081 args->remaining = atomic64_read(&kvm->arch.cmma_dirty_pages); 2082 else 2083 args->remaining = 0; 2084 2085 if (copy_to_user((void __user *)args->values, values, args->count)) 2086 ret = -EFAULT; 2087 2088 vfree(values); 2089 return ret; 2090 } 2091 2092 /* 2093 * This function sets the CMMA attributes for the given pages. If the input 2094 * buffer has zero length, no action is taken, otherwise the attributes are 2095 * set and the mm->context.uses_cmm flag is set. 2096 */ 2097 static int kvm_s390_set_cmma_bits(struct kvm *kvm, 2098 const struct kvm_s390_cmma_log *args) 2099 { 2100 unsigned long hva, mask, pgstev, i; 2101 uint8_t *bits; 2102 int srcu_idx, r = 0; 2103 2104 mask = args->mask; 2105 2106 if (!kvm->arch.use_cmma) 2107 return -ENXIO; 2108 /* invalid/unsupported flags */ 2109 if (args->flags != 0) 2110 return -EINVAL; 2111 /* Enforce sane limit on memory allocation */ 2112 if (args->count > KVM_S390_CMMA_SIZE_MAX) 2113 return -EINVAL; 2114 /* Nothing to do */ 2115 if (args->count == 0) 2116 return 0; 2117 2118 bits = vmalloc(array_size(sizeof(*bits), args->count)); 2119 if (!bits) 2120 return -ENOMEM; 2121 2122 r = copy_from_user(bits, (void __user *)args->values, args->count); 2123 if (r) { 2124 r = -EFAULT; 2125 goto out; 2126 } 2127 2128 down_read(&kvm->mm->mmap_sem); 2129 srcu_idx = srcu_read_lock(&kvm->srcu); 2130 for (i = 0; i < args->count; i++) { 2131 hva = gfn_to_hva(kvm, args->start_gfn + i); 2132 if (kvm_is_error_hva(hva)) { 2133 r = -EFAULT; 2134 break; 2135 } 2136 2137 pgstev = bits[i]; 2138 pgstev = pgstev << 24; 2139 mask &= _PGSTE_GPS_USAGE_MASK | _PGSTE_GPS_NODAT; 2140 set_pgste_bits(kvm->mm, hva, mask, pgstev); 2141 } 2142 srcu_read_unlock(&kvm->srcu, srcu_idx); 2143 up_read(&kvm->mm->mmap_sem); 2144 2145 if (!kvm->mm->context.uses_cmm) { 2146 down_write(&kvm->mm->mmap_sem); 2147 kvm->mm->context.uses_cmm = 1; 2148 up_write(&kvm->mm->mmap_sem); 2149 } 2150 out: 2151 vfree(bits); 2152 return r; 2153 } 2154 2155 long kvm_arch_vm_ioctl(struct file *filp, 2156 unsigned int ioctl, unsigned long arg) 2157 { 2158 struct kvm *kvm = filp->private_data; 2159 void __user *argp = (void __user *)arg; 2160 struct kvm_device_attr attr; 2161 int r; 2162 2163 switch (ioctl) { 2164 case KVM_S390_INTERRUPT: { 2165 struct kvm_s390_interrupt s390int; 2166 2167 r = -EFAULT; 2168 if (copy_from_user(&s390int, argp, sizeof(s390int))) 2169 break; 2170 r = kvm_s390_inject_vm(kvm, &s390int); 2171 break; 2172 } 2173 case KVM_CREATE_IRQCHIP: { 2174 struct kvm_irq_routing_entry routing; 2175 2176 r = -EINVAL; 2177 if (kvm->arch.use_irqchip) { 2178 /* Set up dummy routing. */ 2179 memset(&routing, 0, sizeof(routing)); 2180 r = kvm_set_irq_routing(kvm, &routing, 0, 0); 2181 } 2182 break; 2183 } 2184 case KVM_SET_DEVICE_ATTR: { 2185 r = -EFAULT; 2186 if (copy_from_user(&attr, (void __user *)arg, sizeof(attr))) 2187 break; 2188 r = kvm_s390_vm_set_attr(kvm, &attr); 2189 break; 2190 } 2191 case KVM_GET_DEVICE_ATTR: { 2192 r = -EFAULT; 2193 if (copy_from_user(&attr, (void __user *)arg, sizeof(attr))) 2194 break; 2195 r = kvm_s390_vm_get_attr(kvm, &attr); 2196 break; 2197 } 2198 case KVM_HAS_DEVICE_ATTR: { 2199 r = -EFAULT; 2200 if (copy_from_user(&attr, (void __user *)arg, sizeof(attr))) 2201 break; 2202 r = kvm_s390_vm_has_attr(kvm, &attr); 2203 break; 2204 } 2205 case KVM_S390_GET_SKEYS: { 2206 struct kvm_s390_skeys args; 2207 2208 r = -EFAULT; 2209 if (copy_from_user(&args, argp, 2210 sizeof(struct kvm_s390_skeys))) 2211 break; 2212 r = kvm_s390_get_skeys(kvm, &args); 2213 break; 2214 } 2215 case KVM_S390_SET_SKEYS: { 2216 struct kvm_s390_skeys args; 2217 2218 r = -EFAULT; 2219 if (copy_from_user(&args, argp, 2220 sizeof(struct kvm_s390_skeys))) 2221 break; 2222 r = kvm_s390_set_skeys(kvm, &args); 2223 break; 2224 } 2225 case KVM_S390_GET_CMMA_BITS: { 2226 struct kvm_s390_cmma_log args; 2227 2228 r = -EFAULT; 2229 if (copy_from_user(&args, argp, sizeof(args))) 2230 break; 2231 mutex_lock(&kvm->slots_lock); 2232 r = kvm_s390_get_cmma_bits(kvm, &args); 2233 mutex_unlock(&kvm->slots_lock); 2234 if (!r) { 2235 r = copy_to_user(argp, &args, sizeof(args)); 2236 if (r) 2237 r = -EFAULT; 2238 } 2239 break; 2240 } 2241 case KVM_S390_SET_CMMA_BITS: { 2242 struct kvm_s390_cmma_log args; 2243 2244 r = -EFAULT; 2245 if (copy_from_user(&args, argp, sizeof(args))) 2246 break; 2247 mutex_lock(&kvm->slots_lock); 2248 r = kvm_s390_set_cmma_bits(kvm, &args); 2249 mutex_unlock(&kvm->slots_lock); 2250 break; 2251 } 2252 default: 2253 r = -ENOTTY; 2254 } 2255 2256 return r; 2257 } 2258 2259 static int kvm_s390_apxa_installed(void) 2260 { 2261 struct ap_config_info info; 2262 2263 if (ap_instructions_available()) { 2264 if (ap_qci(&info) == 0) 2265 return info.apxa; 2266 } 2267 2268 return 0; 2269 } 2270 2271 /* 2272 * The format of the crypto control block (CRYCB) is specified in the 3 low 2273 * order bits of the CRYCB designation (CRYCBD) field as follows: 2274 * Format 0: Neither the message security assist extension 3 (MSAX3) nor the 2275 * AP extended addressing (APXA) facility are installed. 2276 * Format 1: The APXA facility is not installed but the MSAX3 facility is. 2277 * Format 2: Both the APXA and MSAX3 facilities are installed 2278 */ 2279 static void kvm_s390_set_crycb_format(struct kvm *kvm) 2280 { 2281 kvm->arch.crypto.crycbd = (__u32)(unsigned long) kvm->arch.crypto.crycb; 2282 2283 /* Clear the CRYCB format bits - i.e., set format 0 by default */ 2284 kvm->arch.crypto.crycbd &= ~(CRYCB_FORMAT_MASK); 2285 2286 /* Check whether MSAX3 is installed */ 2287 if (!test_kvm_facility(kvm, 76)) 2288 return; 2289 2290 if (kvm_s390_apxa_installed()) 2291 kvm->arch.crypto.crycbd |= CRYCB_FORMAT2; 2292 else 2293 kvm->arch.crypto.crycbd |= CRYCB_FORMAT1; 2294 } 2295 2296 void kvm_arch_crypto_set_masks(struct kvm *kvm, unsigned long *apm, 2297 unsigned long *aqm, unsigned long *adm) 2298 { 2299 struct kvm_s390_crypto_cb *crycb = kvm->arch.crypto.crycb; 2300 2301 mutex_lock(&kvm->lock); 2302 kvm_s390_vcpu_block_all(kvm); 2303 2304 switch (kvm->arch.crypto.crycbd & CRYCB_FORMAT_MASK) { 2305 case CRYCB_FORMAT2: /* APCB1 use 256 bits */ 2306 memcpy(crycb->apcb1.apm, apm, 32); 2307 VM_EVENT(kvm, 3, "SET CRYCB: apm %016lx %016lx %016lx %016lx", 2308 apm[0], apm[1], apm[2], apm[3]); 2309 memcpy(crycb->apcb1.aqm, aqm, 32); 2310 VM_EVENT(kvm, 3, "SET CRYCB: aqm %016lx %016lx %016lx %016lx", 2311 aqm[0], aqm[1], aqm[2], aqm[3]); 2312 memcpy(crycb->apcb1.adm, adm, 32); 2313 VM_EVENT(kvm, 3, "SET CRYCB: adm %016lx %016lx %016lx %016lx", 2314 adm[0], adm[1], adm[2], adm[3]); 2315 break; 2316 case CRYCB_FORMAT1: 2317 case CRYCB_FORMAT0: /* Fall through both use APCB0 */ 2318 memcpy(crycb->apcb0.apm, apm, 8); 2319 memcpy(crycb->apcb0.aqm, aqm, 2); 2320 memcpy(crycb->apcb0.adm, adm, 2); 2321 VM_EVENT(kvm, 3, "SET CRYCB: apm %016lx aqm %04x adm %04x", 2322 apm[0], *((unsigned short *)aqm), 2323 *((unsigned short *)adm)); 2324 break; 2325 default: /* Can not happen */ 2326 break; 2327 } 2328 2329 /* recreate the shadow crycb for each vcpu */ 2330 kvm_s390_sync_request_broadcast(kvm, KVM_REQ_VSIE_RESTART); 2331 kvm_s390_vcpu_unblock_all(kvm); 2332 mutex_unlock(&kvm->lock); 2333 } 2334 EXPORT_SYMBOL_GPL(kvm_arch_crypto_set_masks); 2335 2336 void kvm_arch_crypto_clear_masks(struct kvm *kvm) 2337 { 2338 mutex_lock(&kvm->lock); 2339 kvm_s390_vcpu_block_all(kvm); 2340 2341 memset(&kvm->arch.crypto.crycb->apcb0, 0, 2342 sizeof(kvm->arch.crypto.crycb->apcb0)); 2343 memset(&kvm->arch.crypto.crycb->apcb1, 0, 2344 sizeof(kvm->arch.crypto.crycb->apcb1)); 2345 2346 VM_EVENT(kvm, 3, "%s", "CLR CRYCB:"); 2347 /* recreate the shadow crycb for each vcpu */ 2348 kvm_s390_sync_request_broadcast(kvm, KVM_REQ_VSIE_RESTART); 2349 kvm_s390_vcpu_unblock_all(kvm); 2350 mutex_unlock(&kvm->lock); 2351 } 2352 EXPORT_SYMBOL_GPL(kvm_arch_crypto_clear_masks); 2353 2354 static u64 kvm_s390_get_initial_cpuid(void) 2355 { 2356 struct cpuid cpuid; 2357 2358 get_cpu_id(&cpuid); 2359 cpuid.version = 0xff; 2360 return *((u64 *) &cpuid); 2361 } 2362 2363 static void kvm_s390_crypto_init(struct kvm *kvm) 2364 { 2365 kvm->arch.crypto.crycb = &kvm->arch.sie_page2->crycb; 2366 kvm_s390_set_crycb_format(kvm); 2367 2368 if (!test_kvm_facility(kvm, 76)) 2369 return; 2370 2371 /* Enable AES/DEA protected key functions by default */ 2372 kvm->arch.crypto.aes_kw = 1; 2373 kvm->arch.crypto.dea_kw = 1; 2374 get_random_bytes(kvm->arch.crypto.crycb->aes_wrapping_key_mask, 2375 sizeof(kvm->arch.crypto.crycb->aes_wrapping_key_mask)); 2376 get_random_bytes(kvm->arch.crypto.crycb->dea_wrapping_key_mask, 2377 sizeof(kvm->arch.crypto.crycb->dea_wrapping_key_mask)); 2378 } 2379 2380 static void sca_dispose(struct kvm *kvm) 2381 { 2382 if (kvm->arch.use_esca) 2383 free_pages_exact(kvm->arch.sca, sizeof(struct esca_block)); 2384 else 2385 free_page((unsigned long)(kvm->arch.sca)); 2386 kvm->arch.sca = NULL; 2387 } 2388 2389 int kvm_arch_init_vm(struct kvm *kvm, unsigned long type) 2390 { 2391 gfp_t alloc_flags = GFP_KERNEL; 2392 int i, rc; 2393 char debug_name[16]; 2394 static unsigned long sca_offset; 2395 2396 rc = -EINVAL; 2397 #ifdef CONFIG_KVM_S390_UCONTROL 2398 if (type & ~KVM_VM_S390_UCONTROL) 2399 goto out_err; 2400 if ((type & KVM_VM_S390_UCONTROL) && (!capable(CAP_SYS_ADMIN))) 2401 goto out_err; 2402 #else 2403 if (type) 2404 goto out_err; 2405 #endif 2406 2407 rc = s390_enable_sie(); 2408 if (rc) 2409 goto out_err; 2410 2411 rc = -ENOMEM; 2412 2413 if (!sclp.has_64bscao) 2414 alloc_flags |= GFP_DMA; 2415 rwlock_init(&kvm->arch.sca_lock); 2416 /* start with basic SCA */ 2417 kvm->arch.sca = (struct bsca_block *) get_zeroed_page(alloc_flags); 2418 if (!kvm->arch.sca) 2419 goto out_err; 2420 spin_lock(&kvm_lock); 2421 sca_offset += 16; 2422 if (sca_offset + sizeof(struct bsca_block) > PAGE_SIZE) 2423 sca_offset = 0; 2424 kvm->arch.sca = (struct bsca_block *) 2425 ((char *) kvm->arch.sca + sca_offset); 2426 spin_unlock(&kvm_lock); 2427 2428 sprintf(debug_name, "kvm-%u", current->pid); 2429 2430 kvm->arch.dbf = debug_register(debug_name, 32, 1, 7 * sizeof(long)); 2431 if (!kvm->arch.dbf) 2432 goto out_err; 2433 2434 BUILD_BUG_ON(sizeof(struct sie_page2) != 4096); 2435 kvm->arch.sie_page2 = 2436 (struct sie_page2 *) get_zeroed_page(GFP_KERNEL | GFP_DMA); 2437 if (!kvm->arch.sie_page2) 2438 goto out_err; 2439 2440 kvm->arch.sie_page2->kvm = kvm; 2441 kvm->arch.model.fac_list = kvm->arch.sie_page2->fac_list; 2442 2443 for (i = 0; i < kvm_s390_fac_size(); i++) { 2444 kvm->arch.model.fac_mask[i] = S390_lowcore.stfle_fac_list[i] & 2445 (kvm_s390_fac_base[i] | 2446 kvm_s390_fac_ext[i]); 2447 kvm->arch.model.fac_list[i] = S390_lowcore.stfle_fac_list[i] & 2448 kvm_s390_fac_base[i]; 2449 } 2450 kvm->arch.model.subfuncs = kvm_s390_available_subfunc; 2451 2452 /* we are always in czam mode - even on pre z14 machines */ 2453 set_kvm_facility(kvm->arch.model.fac_mask, 138); 2454 set_kvm_facility(kvm->arch.model.fac_list, 138); 2455 /* we emulate STHYI in kvm */ 2456 set_kvm_facility(kvm->arch.model.fac_mask, 74); 2457 set_kvm_facility(kvm->arch.model.fac_list, 74); 2458 if (MACHINE_HAS_TLB_GUEST) { 2459 set_kvm_facility(kvm->arch.model.fac_mask, 147); 2460 set_kvm_facility(kvm->arch.model.fac_list, 147); 2461 } 2462 2463 kvm->arch.model.cpuid = kvm_s390_get_initial_cpuid(); 2464 kvm->arch.model.ibc = sclp.ibc & 0x0fff; 2465 2466 kvm_s390_crypto_init(kvm); 2467 2468 mutex_init(&kvm->arch.float_int.ais_lock); 2469 spin_lock_init(&kvm->arch.float_int.lock); 2470 for (i = 0; i < FIRQ_LIST_COUNT; i++) 2471 INIT_LIST_HEAD(&kvm->arch.float_int.lists[i]); 2472 init_waitqueue_head(&kvm->arch.ipte_wq); 2473 mutex_init(&kvm->arch.ipte_mutex); 2474 2475 debug_register_view(kvm->arch.dbf, &debug_sprintf_view); 2476 VM_EVENT(kvm, 3, "vm created with type %lu", type); 2477 2478 if (type & KVM_VM_S390_UCONTROL) { 2479 kvm->arch.gmap = NULL; 2480 kvm->arch.mem_limit = KVM_S390_NO_MEM_LIMIT; 2481 } else { 2482 if (sclp.hamax == U64_MAX) 2483 kvm->arch.mem_limit = TASK_SIZE_MAX; 2484 else 2485 kvm->arch.mem_limit = min_t(unsigned long, TASK_SIZE_MAX, 2486 sclp.hamax + 1); 2487 kvm->arch.gmap = gmap_create(current->mm, kvm->arch.mem_limit - 1); 2488 if (!kvm->arch.gmap) 2489 goto out_err; 2490 kvm->arch.gmap->private = kvm; 2491 kvm->arch.gmap->pfault_enabled = 0; 2492 } 2493 2494 kvm->arch.use_pfmfi = sclp.has_pfmfi; 2495 kvm->arch.use_skf = sclp.has_skey; 2496 spin_lock_init(&kvm->arch.start_stop_lock); 2497 kvm_s390_vsie_init(kvm); 2498 kvm_s390_gisa_init(kvm); 2499 KVM_EVENT(3, "vm 0x%pK created by pid %u", kvm, current->pid); 2500 2501 return 0; 2502 out_err: 2503 free_page((unsigned long)kvm->arch.sie_page2); 2504 debug_unregister(kvm->arch.dbf); 2505 sca_dispose(kvm); 2506 KVM_EVENT(3, "creation of vm failed: %d", rc); 2507 return rc; 2508 } 2509 2510 bool kvm_arch_has_vcpu_debugfs(void) 2511 { 2512 return false; 2513 } 2514 2515 int kvm_arch_create_vcpu_debugfs(struct kvm_vcpu *vcpu) 2516 { 2517 return 0; 2518 } 2519 2520 void kvm_arch_vcpu_destroy(struct kvm_vcpu *vcpu) 2521 { 2522 VCPU_EVENT(vcpu, 3, "%s", "free cpu"); 2523 trace_kvm_s390_destroy_vcpu(vcpu->vcpu_id); 2524 kvm_s390_clear_local_irqs(vcpu); 2525 kvm_clear_async_pf_completion_queue(vcpu); 2526 if (!kvm_is_ucontrol(vcpu->kvm)) 2527 sca_del_vcpu(vcpu); 2528 2529 if (kvm_is_ucontrol(vcpu->kvm)) 2530 gmap_remove(vcpu->arch.gmap); 2531 2532 if (vcpu->kvm->arch.use_cmma) 2533 kvm_s390_vcpu_unsetup_cmma(vcpu); 2534 free_page((unsigned long)(vcpu->arch.sie_block)); 2535 2536 kvm_vcpu_uninit(vcpu); 2537 kmem_cache_free(kvm_vcpu_cache, vcpu); 2538 } 2539 2540 static void kvm_free_vcpus(struct kvm *kvm) 2541 { 2542 unsigned int i; 2543 struct kvm_vcpu *vcpu; 2544 2545 kvm_for_each_vcpu(i, vcpu, kvm) 2546 kvm_arch_vcpu_destroy(vcpu); 2547 2548 mutex_lock(&kvm->lock); 2549 for (i = 0; i < atomic_read(&kvm->online_vcpus); i++) 2550 kvm->vcpus[i] = NULL; 2551 2552 atomic_set(&kvm->online_vcpus, 0); 2553 mutex_unlock(&kvm->lock); 2554 } 2555 2556 void kvm_arch_destroy_vm(struct kvm *kvm) 2557 { 2558 kvm_free_vcpus(kvm); 2559 sca_dispose(kvm); 2560 debug_unregister(kvm->arch.dbf); 2561 kvm_s390_gisa_destroy(kvm); 2562 free_page((unsigned long)kvm->arch.sie_page2); 2563 if (!kvm_is_ucontrol(kvm)) 2564 gmap_remove(kvm->arch.gmap); 2565 kvm_s390_destroy_adapters(kvm); 2566 kvm_s390_clear_float_irqs(kvm); 2567 kvm_s390_vsie_destroy(kvm); 2568 KVM_EVENT(3, "vm 0x%pK destroyed", kvm); 2569 } 2570 2571 /* Section: vcpu related */ 2572 static int __kvm_ucontrol_vcpu_init(struct kvm_vcpu *vcpu) 2573 { 2574 vcpu->arch.gmap = gmap_create(current->mm, -1UL); 2575 if (!vcpu->arch.gmap) 2576 return -ENOMEM; 2577 vcpu->arch.gmap->private = vcpu->kvm; 2578 2579 return 0; 2580 } 2581 2582 static void sca_del_vcpu(struct kvm_vcpu *vcpu) 2583 { 2584 if (!kvm_s390_use_sca_entries()) 2585 return; 2586 read_lock(&vcpu->kvm->arch.sca_lock); 2587 if (vcpu->kvm->arch.use_esca) { 2588 struct esca_block *sca = vcpu->kvm->arch.sca; 2589 2590 clear_bit_inv(vcpu->vcpu_id, (unsigned long *) sca->mcn); 2591 sca->cpu[vcpu->vcpu_id].sda = 0; 2592 } else { 2593 struct bsca_block *sca = vcpu->kvm->arch.sca; 2594 2595 clear_bit_inv(vcpu->vcpu_id, (unsigned long *) &sca->mcn); 2596 sca->cpu[vcpu->vcpu_id].sda = 0; 2597 } 2598 read_unlock(&vcpu->kvm->arch.sca_lock); 2599 } 2600 2601 static void sca_add_vcpu(struct kvm_vcpu *vcpu) 2602 { 2603 if (!kvm_s390_use_sca_entries()) { 2604 struct bsca_block *sca = vcpu->kvm->arch.sca; 2605 2606 /* we still need the basic sca for the ipte control */ 2607 vcpu->arch.sie_block->scaoh = (__u32)(((__u64)sca) >> 32); 2608 vcpu->arch.sie_block->scaol = (__u32)(__u64)sca; 2609 return; 2610 } 2611 read_lock(&vcpu->kvm->arch.sca_lock); 2612 if (vcpu->kvm->arch.use_esca) { 2613 struct esca_block *sca = vcpu->kvm->arch.sca; 2614 2615 sca->cpu[vcpu->vcpu_id].sda = (__u64) vcpu->arch.sie_block; 2616 vcpu->arch.sie_block->scaoh = (__u32)(((__u64)sca) >> 32); 2617 vcpu->arch.sie_block->scaol = (__u32)(__u64)sca & ~0x3fU; 2618 vcpu->arch.sie_block->ecb2 |= ECB2_ESCA; 2619 set_bit_inv(vcpu->vcpu_id, (unsigned long *) sca->mcn); 2620 } else { 2621 struct bsca_block *sca = vcpu->kvm->arch.sca; 2622 2623 sca->cpu[vcpu->vcpu_id].sda = (__u64) vcpu->arch.sie_block; 2624 vcpu->arch.sie_block->scaoh = (__u32)(((__u64)sca) >> 32); 2625 vcpu->arch.sie_block->scaol = (__u32)(__u64)sca; 2626 set_bit_inv(vcpu->vcpu_id, (unsigned long *) &sca->mcn); 2627 } 2628 read_unlock(&vcpu->kvm->arch.sca_lock); 2629 } 2630 2631 /* Basic SCA to Extended SCA data copy routines */ 2632 static inline void sca_copy_entry(struct esca_entry *d, struct bsca_entry *s) 2633 { 2634 d->sda = s->sda; 2635 d->sigp_ctrl.c = s->sigp_ctrl.c; 2636 d->sigp_ctrl.scn = s->sigp_ctrl.scn; 2637 } 2638 2639 static void sca_copy_b_to_e(struct esca_block *d, struct bsca_block *s) 2640 { 2641 int i; 2642 2643 d->ipte_control = s->ipte_control; 2644 d->mcn[0] = s->mcn; 2645 for (i = 0; i < KVM_S390_BSCA_CPU_SLOTS; i++) 2646 sca_copy_entry(&d->cpu[i], &s->cpu[i]); 2647 } 2648 2649 static int sca_switch_to_extended(struct kvm *kvm) 2650 { 2651 struct bsca_block *old_sca = kvm->arch.sca; 2652 struct esca_block *new_sca; 2653 struct kvm_vcpu *vcpu; 2654 unsigned int vcpu_idx; 2655 u32 scaol, scaoh; 2656 2657 new_sca = alloc_pages_exact(sizeof(*new_sca), GFP_KERNEL|__GFP_ZERO); 2658 if (!new_sca) 2659 return -ENOMEM; 2660 2661 scaoh = (u32)((u64)(new_sca) >> 32); 2662 scaol = (u32)(u64)(new_sca) & ~0x3fU; 2663 2664 kvm_s390_vcpu_block_all(kvm); 2665 write_lock(&kvm->arch.sca_lock); 2666 2667 sca_copy_b_to_e(new_sca, old_sca); 2668 2669 kvm_for_each_vcpu(vcpu_idx, vcpu, kvm) { 2670 vcpu->arch.sie_block->scaoh = scaoh; 2671 vcpu->arch.sie_block->scaol = scaol; 2672 vcpu->arch.sie_block->ecb2 |= ECB2_ESCA; 2673 } 2674 kvm->arch.sca = new_sca; 2675 kvm->arch.use_esca = 1; 2676 2677 write_unlock(&kvm->arch.sca_lock); 2678 kvm_s390_vcpu_unblock_all(kvm); 2679 2680 free_page((unsigned long)old_sca); 2681 2682 VM_EVENT(kvm, 2, "Switched to ESCA (0x%pK -> 0x%pK)", 2683 old_sca, kvm->arch.sca); 2684 return 0; 2685 } 2686 2687 static int sca_can_add_vcpu(struct kvm *kvm, unsigned int id) 2688 { 2689 int rc; 2690 2691 if (!kvm_s390_use_sca_entries()) { 2692 if (id < KVM_MAX_VCPUS) 2693 return true; 2694 return false; 2695 } 2696 if (id < KVM_S390_BSCA_CPU_SLOTS) 2697 return true; 2698 if (!sclp.has_esca || !sclp.has_64bscao) 2699 return false; 2700 2701 mutex_lock(&kvm->lock); 2702 rc = kvm->arch.use_esca ? 0 : sca_switch_to_extended(kvm); 2703 mutex_unlock(&kvm->lock); 2704 2705 return rc == 0 && id < KVM_S390_ESCA_CPU_SLOTS; 2706 } 2707 2708 int kvm_arch_vcpu_init(struct kvm_vcpu *vcpu) 2709 { 2710 vcpu->arch.pfault_token = KVM_S390_PFAULT_TOKEN_INVALID; 2711 kvm_clear_async_pf_completion_queue(vcpu); 2712 vcpu->run->kvm_valid_regs = KVM_SYNC_PREFIX | 2713 KVM_SYNC_GPRS | 2714 KVM_SYNC_ACRS | 2715 KVM_SYNC_CRS | 2716 KVM_SYNC_ARCH0 | 2717 KVM_SYNC_PFAULT; 2718 kvm_s390_set_prefix(vcpu, 0); 2719 if (test_kvm_facility(vcpu->kvm, 64)) 2720 vcpu->run->kvm_valid_regs |= KVM_SYNC_RICCB; 2721 if (test_kvm_facility(vcpu->kvm, 82)) 2722 vcpu->run->kvm_valid_regs |= KVM_SYNC_BPBC; 2723 if (test_kvm_facility(vcpu->kvm, 133)) 2724 vcpu->run->kvm_valid_regs |= KVM_SYNC_GSCB; 2725 if (test_kvm_facility(vcpu->kvm, 156)) 2726 vcpu->run->kvm_valid_regs |= KVM_SYNC_ETOKEN; 2727 /* fprs can be synchronized via vrs, even if the guest has no vx. With 2728 * MACHINE_HAS_VX, (load|store)_fpu_regs() will work with vrs format. 2729 */ 2730 if (MACHINE_HAS_VX) 2731 vcpu->run->kvm_valid_regs |= KVM_SYNC_VRS; 2732 else 2733 vcpu->run->kvm_valid_regs |= KVM_SYNC_FPRS; 2734 2735 if (kvm_is_ucontrol(vcpu->kvm)) 2736 return __kvm_ucontrol_vcpu_init(vcpu); 2737 2738 return 0; 2739 } 2740 2741 /* needs disabled preemption to protect from TOD sync and vcpu_load/put */ 2742 static void __start_cpu_timer_accounting(struct kvm_vcpu *vcpu) 2743 { 2744 WARN_ON_ONCE(vcpu->arch.cputm_start != 0); 2745 raw_write_seqcount_begin(&vcpu->arch.cputm_seqcount); 2746 vcpu->arch.cputm_start = get_tod_clock_fast(); 2747 raw_write_seqcount_end(&vcpu->arch.cputm_seqcount); 2748 } 2749 2750 /* needs disabled preemption to protect from TOD sync and vcpu_load/put */ 2751 static void __stop_cpu_timer_accounting(struct kvm_vcpu *vcpu) 2752 { 2753 WARN_ON_ONCE(vcpu->arch.cputm_start == 0); 2754 raw_write_seqcount_begin(&vcpu->arch.cputm_seqcount); 2755 vcpu->arch.sie_block->cputm -= get_tod_clock_fast() - vcpu->arch.cputm_start; 2756 vcpu->arch.cputm_start = 0; 2757 raw_write_seqcount_end(&vcpu->arch.cputm_seqcount); 2758 } 2759 2760 /* needs disabled preemption to protect from TOD sync and vcpu_load/put */ 2761 static void __enable_cpu_timer_accounting(struct kvm_vcpu *vcpu) 2762 { 2763 WARN_ON_ONCE(vcpu->arch.cputm_enabled); 2764 vcpu->arch.cputm_enabled = true; 2765 __start_cpu_timer_accounting(vcpu); 2766 } 2767 2768 /* needs disabled preemption to protect from TOD sync and vcpu_load/put */ 2769 static void __disable_cpu_timer_accounting(struct kvm_vcpu *vcpu) 2770 { 2771 WARN_ON_ONCE(!vcpu->arch.cputm_enabled); 2772 __stop_cpu_timer_accounting(vcpu); 2773 vcpu->arch.cputm_enabled = false; 2774 } 2775 2776 static void enable_cpu_timer_accounting(struct kvm_vcpu *vcpu) 2777 { 2778 preempt_disable(); /* protect from TOD sync and vcpu_load/put */ 2779 __enable_cpu_timer_accounting(vcpu); 2780 preempt_enable(); 2781 } 2782 2783 static void disable_cpu_timer_accounting(struct kvm_vcpu *vcpu) 2784 { 2785 preempt_disable(); /* protect from TOD sync and vcpu_load/put */ 2786 __disable_cpu_timer_accounting(vcpu); 2787 preempt_enable(); 2788 } 2789 2790 /* set the cpu timer - may only be called from the VCPU thread itself */ 2791 void kvm_s390_set_cpu_timer(struct kvm_vcpu *vcpu, __u64 cputm) 2792 { 2793 preempt_disable(); /* protect from TOD sync and vcpu_load/put */ 2794 raw_write_seqcount_begin(&vcpu->arch.cputm_seqcount); 2795 if (vcpu->arch.cputm_enabled) 2796 vcpu->arch.cputm_start = get_tod_clock_fast(); 2797 vcpu->arch.sie_block->cputm = cputm; 2798 raw_write_seqcount_end(&vcpu->arch.cputm_seqcount); 2799 preempt_enable(); 2800 } 2801 2802 /* update and get the cpu timer - can also be called from other VCPU threads */ 2803 __u64 kvm_s390_get_cpu_timer(struct kvm_vcpu *vcpu) 2804 { 2805 unsigned int seq; 2806 __u64 value; 2807 2808 if (unlikely(!vcpu->arch.cputm_enabled)) 2809 return vcpu->arch.sie_block->cputm; 2810 2811 preempt_disable(); /* protect from TOD sync and vcpu_load/put */ 2812 do { 2813 seq = raw_read_seqcount(&vcpu->arch.cputm_seqcount); 2814 /* 2815 * If the writer would ever execute a read in the critical 2816 * section, e.g. in irq context, we have a deadlock. 2817 */ 2818 WARN_ON_ONCE((seq & 1) && smp_processor_id() == vcpu->cpu); 2819 value = vcpu->arch.sie_block->cputm; 2820 /* if cputm_start is 0, accounting is being started/stopped */ 2821 if (likely(vcpu->arch.cputm_start)) 2822 value -= get_tod_clock_fast() - vcpu->arch.cputm_start; 2823 } while (read_seqcount_retry(&vcpu->arch.cputm_seqcount, seq & ~1)); 2824 preempt_enable(); 2825 return value; 2826 } 2827 2828 void kvm_arch_vcpu_load(struct kvm_vcpu *vcpu, int cpu) 2829 { 2830 2831 gmap_enable(vcpu->arch.enabled_gmap); 2832 kvm_s390_set_cpuflags(vcpu, CPUSTAT_RUNNING); 2833 if (vcpu->arch.cputm_enabled && !is_vcpu_idle(vcpu)) 2834 __start_cpu_timer_accounting(vcpu); 2835 vcpu->cpu = cpu; 2836 } 2837 2838 void kvm_arch_vcpu_put(struct kvm_vcpu *vcpu) 2839 { 2840 vcpu->cpu = -1; 2841 if (vcpu->arch.cputm_enabled && !is_vcpu_idle(vcpu)) 2842 __stop_cpu_timer_accounting(vcpu); 2843 kvm_s390_clear_cpuflags(vcpu, CPUSTAT_RUNNING); 2844 vcpu->arch.enabled_gmap = gmap_get_enabled(); 2845 gmap_disable(vcpu->arch.enabled_gmap); 2846 2847 } 2848 2849 static void kvm_s390_vcpu_initial_reset(struct kvm_vcpu *vcpu) 2850 { 2851 /* this equals initial cpu reset in pop, but we don't switch to ESA */ 2852 vcpu->arch.sie_block->gpsw.mask = 0UL; 2853 vcpu->arch.sie_block->gpsw.addr = 0UL; 2854 kvm_s390_set_prefix(vcpu, 0); 2855 kvm_s390_set_cpu_timer(vcpu, 0); 2856 vcpu->arch.sie_block->ckc = 0UL; 2857 vcpu->arch.sie_block->todpr = 0; 2858 memset(vcpu->arch.sie_block->gcr, 0, 16 * sizeof(__u64)); 2859 vcpu->arch.sie_block->gcr[0] = CR0_UNUSED_56 | 2860 CR0_INTERRUPT_KEY_SUBMASK | 2861 CR0_MEASUREMENT_ALERT_SUBMASK; 2862 vcpu->arch.sie_block->gcr[14] = CR14_UNUSED_32 | 2863 CR14_UNUSED_33 | 2864 CR14_EXTERNAL_DAMAGE_SUBMASK; 2865 /* make sure the new fpc will be lazily loaded */ 2866 save_fpu_regs(); 2867 current->thread.fpu.fpc = 0; 2868 vcpu->arch.sie_block->gbea = 1; 2869 vcpu->arch.sie_block->pp = 0; 2870 vcpu->arch.sie_block->fpf &= ~FPF_BPBC; 2871 vcpu->arch.pfault_token = KVM_S390_PFAULT_TOKEN_INVALID; 2872 kvm_clear_async_pf_completion_queue(vcpu); 2873 if (!kvm_s390_user_cpu_state_ctrl(vcpu->kvm)) 2874 kvm_s390_vcpu_stop(vcpu); 2875 kvm_s390_clear_local_irqs(vcpu); 2876 } 2877 2878 void kvm_arch_vcpu_postcreate(struct kvm_vcpu *vcpu) 2879 { 2880 mutex_lock(&vcpu->kvm->lock); 2881 preempt_disable(); 2882 vcpu->arch.sie_block->epoch = vcpu->kvm->arch.epoch; 2883 vcpu->arch.sie_block->epdx = vcpu->kvm->arch.epdx; 2884 preempt_enable(); 2885 mutex_unlock(&vcpu->kvm->lock); 2886 if (!kvm_is_ucontrol(vcpu->kvm)) { 2887 vcpu->arch.gmap = vcpu->kvm->arch.gmap; 2888 sca_add_vcpu(vcpu); 2889 } 2890 if (test_kvm_facility(vcpu->kvm, 74) || vcpu->kvm->arch.user_instr0) 2891 vcpu->arch.sie_block->ictl |= ICTL_OPEREXC; 2892 /* make vcpu_load load the right gmap on the first trigger */ 2893 vcpu->arch.enabled_gmap = vcpu->arch.gmap; 2894 } 2895 2896 static bool kvm_has_pckmo_subfunc(struct kvm *kvm, unsigned long nr) 2897 { 2898 if (test_bit_inv(nr, (unsigned long *)&kvm->arch.model.subfuncs.pckmo) && 2899 test_bit_inv(nr, (unsigned long *)&kvm_s390_available_subfunc.pckmo)) 2900 return true; 2901 return false; 2902 } 2903 2904 static bool kvm_has_pckmo_ecc(struct kvm *kvm) 2905 { 2906 /* At least one ECC subfunction must be present */ 2907 return kvm_has_pckmo_subfunc(kvm, 32) || 2908 kvm_has_pckmo_subfunc(kvm, 33) || 2909 kvm_has_pckmo_subfunc(kvm, 34) || 2910 kvm_has_pckmo_subfunc(kvm, 40) || 2911 kvm_has_pckmo_subfunc(kvm, 41); 2912 2913 } 2914 2915 static void kvm_s390_vcpu_crypto_setup(struct kvm_vcpu *vcpu) 2916 { 2917 /* 2918 * If the AP instructions are not being interpreted and the MSAX3 2919 * facility is not configured for the guest, there is nothing to set up. 2920 */ 2921 if (!vcpu->kvm->arch.crypto.apie && !test_kvm_facility(vcpu->kvm, 76)) 2922 return; 2923 2924 vcpu->arch.sie_block->crycbd = vcpu->kvm->arch.crypto.crycbd; 2925 vcpu->arch.sie_block->ecb3 &= ~(ECB3_AES | ECB3_DEA); 2926 vcpu->arch.sie_block->eca &= ~ECA_APIE; 2927 vcpu->arch.sie_block->ecd &= ~ECD_ECC; 2928 2929 if (vcpu->kvm->arch.crypto.apie) 2930 vcpu->arch.sie_block->eca |= ECA_APIE; 2931 2932 /* Set up protected key support */ 2933 if (vcpu->kvm->arch.crypto.aes_kw) { 2934 vcpu->arch.sie_block->ecb3 |= ECB3_AES; 2935 /* ecc is also wrapped with AES key */ 2936 if (kvm_has_pckmo_ecc(vcpu->kvm)) 2937 vcpu->arch.sie_block->ecd |= ECD_ECC; 2938 } 2939 2940 if (vcpu->kvm->arch.crypto.dea_kw) 2941 vcpu->arch.sie_block->ecb3 |= ECB3_DEA; 2942 } 2943 2944 void kvm_s390_vcpu_unsetup_cmma(struct kvm_vcpu *vcpu) 2945 { 2946 free_page(vcpu->arch.sie_block->cbrlo); 2947 vcpu->arch.sie_block->cbrlo = 0; 2948 } 2949 2950 int kvm_s390_vcpu_setup_cmma(struct kvm_vcpu *vcpu) 2951 { 2952 vcpu->arch.sie_block->cbrlo = get_zeroed_page(GFP_KERNEL); 2953 if (!vcpu->arch.sie_block->cbrlo) 2954 return -ENOMEM; 2955 return 0; 2956 } 2957 2958 static void kvm_s390_vcpu_setup_model(struct kvm_vcpu *vcpu) 2959 { 2960 struct kvm_s390_cpu_model *model = &vcpu->kvm->arch.model; 2961 2962 vcpu->arch.sie_block->ibc = model->ibc; 2963 if (test_kvm_facility(vcpu->kvm, 7)) 2964 vcpu->arch.sie_block->fac = (u32)(u64) model->fac_list; 2965 } 2966 2967 int kvm_arch_vcpu_setup(struct kvm_vcpu *vcpu) 2968 { 2969 int rc = 0; 2970 2971 atomic_set(&vcpu->arch.sie_block->cpuflags, CPUSTAT_ZARCH | 2972 CPUSTAT_SM | 2973 CPUSTAT_STOPPED); 2974 2975 if (test_kvm_facility(vcpu->kvm, 78)) 2976 kvm_s390_set_cpuflags(vcpu, CPUSTAT_GED2); 2977 else if (test_kvm_facility(vcpu->kvm, 8)) 2978 kvm_s390_set_cpuflags(vcpu, CPUSTAT_GED); 2979 2980 kvm_s390_vcpu_setup_model(vcpu); 2981 2982 /* pgste_set_pte has special handling for !MACHINE_HAS_ESOP */ 2983 if (MACHINE_HAS_ESOP) 2984 vcpu->arch.sie_block->ecb |= ECB_HOSTPROTINT; 2985 if (test_kvm_facility(vcpu->kvm, 9)) 2986 vcpu->arch.sie_block->ecb |= ECB_SRSI; 2987 if (test_kvm_facility(vcpu->kvm, 73)) 2988 vcpu->arch.sie_block->ecb |= ECB_TE; 2989 2990 if (test_kvm_facility(vcpu->kvm, 8) && vcpu->kvm->arch.use_pfmfi) 2991 vcpu->arch.sie_block->ecb2 |= ECB2_PFMFI; 2992 if (test_kvm_facility(vcpu->kvm, 130)) 2993 vcpu->arch.sie_block->ecb2 |= ECB2_IEP; 2994 vcpu->arch.sie_block->eca = ECA_MVPGI | ECA_PROTEXCI; 2995 if (sclp.has_cei) 2996 vcpu->arch.sie_block->eca |= ECA_CEI; 2997 if (sclp.has_ib) 2998 vcpu->arch.sie_block->eca |= ECA_IB; 2999 if (sclp.has_siif) 3000 vcpu->arch.sie_block->eca |= ECA_SII; 3001 if (sclp.has_sigpif) 3002 vcpu->arch.sie_block->eca |= ECA_SIGPI; 3003 if (test_kvm_facility(vcpu->kvm, 129)) { 3004 vcpu->arch.sie_block->eca |= ECA_VX; 3005 vcpu->arch.sie_block->ecd |= ECD_HOSTREGMGMT; 3006 } 3007 if (test_kvm_facility(vcpu->kvm, 139)) 3008 vcpu->arch.sie_block->ecd |= ECD_MEF; 3009 if (test_kvm_facility(vcpu->kvm, 156)) 3010 vcpu->arch.sie_block->ecd |= ECD_ETOKENF; 3011 if (vcpu->arch.sie_block->gd) { 3012 vcpu->arch.sie_block->eca |= ECA_AIV; 3013 VCPU_EVENT(vcpu, 3, "AIV gisa format-%u enabled for cpu %03u", 3014 vcpu->arch.sie_block->gd & 0x3, vcpu->vcpu_id); 3015 } 3016 vcpu->arch.sie_block->sdnxo = ((unsigned long) &vcpu->run->s.regs.sdnx) 3017 | SDNXC; 3018 vcpu->arch.sie_block->riccbd = (unsigned long) &vcpu->run->s.regs.riccb; 3019 3020 if (sclp.has_kss) 3021 kvm_s390_set_cpuflags(vcpu, CPUSTAT_KSS); 3022 else 3023 vcpu->arch.sie_block->ictl |= ICTL_ISKE | ICTL_SSKE | ICTL_RRBE; 3024 3025 if (vcpu->kvm->arch.use_cmma) { 3026 rc = kvm_s390_vcpu_setup_cmma(vcpu); 3027 if (rc) 3028 return rc; 3029 } 3030 hrtimer_init(&vcpu->arch.ckc_timer, CLOCK_MONOTONIC, HRTIMER_MODE_REL); 3031 vcpu->arch.ckc_timer.function = kvm_s390_idle_wakeup; 3032 3033 vcpu->arch.sie_block->hpid = HPID_KVM; 3034 3035 kvm_s390_vcpu_crypto_setup(vcpu); 3036 3037 return rc; 3038 } 3039 3040 struct kvm_vcpu *kvm_arch_vcpu_create(struct kvm *kvm, 3041 unsigned int id) 3042 { 3043 struct kvm_vcpu *vcpu; 3044 struct sie_page *sie_page; 3045 int rc = -EINVAL; 3046 3047 if (!kvm_is_ucontrol(kvm) && !sca_can_add_vcpu(kvm, id)) 3048 goto out; 3049 3050 rc = -ENOMEM; 3051 3052 vcpu = kmem_cache_zalloc(kvm_vcpu_cache, GFP_KERNEL); 3053 if (!vcpu) 3054 goto out; 3055 3056 BUILD_BUG_ON(sizeof(struct sie_page) != 4096); 3057 sie_page = (struct sie_page *) get_zeroed_page(GFP_KERNEL); 3058 if (!sie_page) 3059 goto out_free_cpu; 3060 3061 vcpu->arch.sie_block = &sie_page->sie_block; 3062 vcpu->arch.sie_block->itdba = (unsigned long) &sie_page->itdb; 3063 3064 /* the real guest size will always be smaller than msl */ 3065 vcpu->arch.sie_block->mso = 0; 3066 vcpu->arch.sie_block->msl = sclp.hamax; 3067 3068 vcpu->arch.sie_block->icpua = id; 3069 spin_lock_init(&vcpu->arch.local_int.lock); 3070 vcpu->arch.sie_block->gd = (u32)(u64)kvm->arch.gisa_int.origin; 3071 if (vcpu->arch.sie_block->gd && sclp.has_gisaf) 3072 vcpu->arch.sie_block->gd |= GISA_FORMAT1; 3073 seqcount_init(&vcpu->arch.cputm_seqcount); 3074 3075 rc = kvm_vcpu_init(vcpu, kvm, id); 3076 if (rc) 3077 goto out_free_sie_block; 3078 VM_EVENT(kvm, 3, "create cpu %d at 0x%pK, sie block at 0x%pK", id, vcpu, 3079 vcpu->arch.sie_block); 3080 trace_kvm_s390_create_vcpu(id, vcpu, vcpu->arch.sie_block); 3081 3082 return vcpu; 3083 out_free_sie_block: 3084 free_page((unsigned long)(vcpu->arch.sie_block)); 3085 out_free_cpu: 3086 kmem_cache_free(kvm_vcpu_cache, vcpu); 3087 out: 3088 return ERR_PTR(rc); 3089 } 3090 3091 int kvm_arch_vcpu_runnable(struct kvm_vcpu *vcpu) 3092 { 3093 return kvm_s390_vcpu_has_irq(vcpu, 0); 3094 } 3095 3096 bool kvm_arch_vcpu_in_kernel(struct kvm_vcpu *vcpu) 3097 { 3098 return !(vcpu->arch.sie_block->gpsw.mask & PSW_MASK_PSTATE); 3099 } 3100 3101 void kvm_s390_vcpu_block(struct kvm_vcpu *vcpu) 3102 { 3103 atomic_or(PROG_BLOCK_SIE, &vcpu->arch.sie_block->prog20); 3104 exit_sie(vcpu); 3105 } 3106 3107 void kvm_s390_vcpu_unblock(struct kvm_vcpu *vcpu) 3108 { 3109 atomic_andnot(PROG_BLOCK_SIE, &vcpu->arch.sie_block->prog20); 3110 } 3111 3112 static void kvm_s390_vcpu_request(struct kvm_vcpu *vcpu) 3113 { 3114 atomic_or(PROG_REQUEST, &vcpu->arch.sie_block->prog20); 3115 exit_sie(vcpu); 3116 } 3117 3118 bool kvm_s390_vcpu_sie_inhibited(struct kvm_vcpu *vcpu) 3119 { 3120 return atomic_read(&vcpu->arch.sie_block->prog20) & 3121 (PROG_BLOCK_SIE | PROG_REQUEST); 3122 } 3123 3124 static void kvm_s390_vcpu_request_handled(struct kvm_vcpu *vcpu) 3125 { 3126 atomic_andnot(PROG_REQUEST, &vcpu->arch.sie_block->prog20); 3127 } 3128 3129 /* 3130 * Kick a guest cpu out of (v)SIE and wait until (v)SIE is not running. 3131 * If the CPU is not running (e.g. waiting as idle) the function will 3132 * return immediately. */ 3133 void exit_sie(struct kvm_vcpu *vcpu) 3134 { 3135 kvm_s390_set_cpuflags(vcpu, CPUSTAT_STOP_INT); 3136 kvm_s390_vsie_kick(vcpu); 3137 while (vcpu->arch.sie_block->prog0c & PROG_IN_SIE) 3138 cpu_relax(); 3139 } 3140 3141 /* Kick a guest cpu out of SIE to process a request synchronously */ 3142 void kvm_s390_sync_request(int req, struct kvm_vcpu *vcpu) 3143 { 3144 kvm_make_request(req, vcpu); 3145 kvm_s390_vcpu_request(vcpu); 3146 } 3147 3148 static void kvm_gmap_notifier(struct gmap *gmap, unsigned long start, 3149 unsigned long end) 3150 { 3151 struct kvm *kvm = gmap->private; 3152 struct kvm_vcpu *vcpu; 3153 unsigned long prefix; 3154 int i; 3155 3156 if (gmap_is_shadow(gmap)) 3157 return; 3158 if (start >= 1UL << 31) 3159 /* We are only interested in prefix pages */ 3160 return; 3161 kvm_for_each_vcpu(i, vcpu, kvm) { 3162 /* match against both prefix pages */ 3163 prefix = kvm_s390_get_prefix(vcpu); 3164 if (prefix <= end && start <= prefix + 2*PAGE_SIZE - 1) { 3165 VCPU_EVENT(vcpu, 2, "gmap notifier for %lx-%lx", 3166 start, end); 3167 kvm_s390_sync_request(KVM_REQ_MMU_RELOAD, vcpu); 3168 } 3169 } 3170 } 3171 3172 bool kvm_arch_no_poll(struct kvm_vcpu *vcpu) 3173 { 3174 /* do not poll with more than halt_poll_max_steal percent of steal time */ 3175 if (S390_lowcore.avg_steal_timer * 100 / (TICK_USEC << 12) >= 3176 halt_poll_max_steal) { 3177 vcpu->stat.halt_no_poll_steal++; 3178 return true; 3179 } 3180 return false; 3181 } 3182 3183 int kvm_arch_vcpu_should_kick(struct kvm_vcpu *vcpu) 3184 { 3185 /* kvm common code refers to this, but never calls it */ 3186 BUG(); 3187 return 0; 3188 } 3189 3190 static int kvm_arch_vcpu_ioctl_get_one_reg(struct kvm_vcpu *vcpu, 3191 struct kvm_one_reg *reg) 3192 { 3193 int r = -EINVAL; 3194 3195 switch (reg->id) { 3196 case KVM_REG_S390_TODPR: 3197 r = put_user(vcpu->arch.sie_block->todpr, 3198 (u32 __user *)reg->addr); 3199 break; 3200 case KVM_REG_S390_EPOCHDIFF: 3201 r = put_user(vcpu->arch.sie_block->epoch, 3202 (u64 __user *)reg->addr); 3203 break; 3204 case KVM_REG_S390_CPU_TIMER: 3205 r = put_user(kvm_s390_get_cpu_timer(vcpu), 3206 (u64 __user *)reg->addr); 3207 break; 3208 case KVM_REG_S390_CLOCK_COMP: 3209 r = put_user(vcpu->arch.sie_block->ckc, 3210 (u64 __user *)reg->addr); 3211 break; 3212 case KVM_REG_S390_PFTOKEN: 3213 r = put_user(vcpu->arch.pfault_token, 3214 (u64 __user *)reg->addr); 3215 break; 3216 case KVM_REG_S390_PFCOMPARE: 3217 r = put_user(vcpu->arch.pfault_compare, 3218 (u64 __user *)reg->addr); 3219 break; 3220 case KVM_REG_S390_PFSELECT: 3221 r = put_user(vcpu->arch.pfault_select, 3222 (u64 __user *)reg->addr); 3223 break; 3224 case KVM_REG_S390_PP: 3225 r = put_user(vcpu->arch.sie_block->pp, 3226 (u64 __user *)reg->addr); 3227 break; 3228 case KVM_REG_S390_GBEA: 3229 r = put_user(vcpu->arch.sie_block->gbea, 3230 (u64 __user *)reg->addr); 3231 break; 3232 default: 3233 break; 3234 } 3235 3236 return r; 3237 } 3238 3239 static int kvm_arch_vcpu_ioctl_set_one_reg(struct kvm_vcpu *vcpu, 3240 struct kvm_one_reg *reg) 3241 { 3242 int r = -EINVAL; 3243 __u64 val; 3244 3245 switch (reg->id) { 3246 case KVM_REG_S390_TODPR: 3247 r = get_user(vcpu->arch.sie_block->todpr, 3248 (u32 __user *)reg->addr); 3249 break; 3250 case KVM_REG_S390_EPOCHDIFF: 3251 r = get_user(vcpu->arch.sie_block->epoch, 3252 (u64 __user *)reg->addr); 3253 break; 3254 case KVM_REG_S390_CPU_TIMER: 3255 r = get_user(val, (u64 __user *)reg->addr); 3256 if (!r) 3257 kvm_s390_set_cpu_timer(vcpu, val); 3258 break; 3259 case KVM_REG_S390_CLOCK_COMP: 3260 r = get_user(vcpu->arch.sie_block->ckc, 3261 (u64 __user *)reg->addr); 3262 break; 3263 case KVM_REG_S390_PFTOKEN: 3264 r = get_user(vcpu->arch.pfault_token, 3265 (u64 __user *)reg->addr); 3266 if (vcpu->arch.pfault_token == KVM_S390_PFAULT_TOKEN_INVALID) 3267 kvm_clear_async_pf_completion_queue(vcpu); 3268 break; 3269 case KVM_REG_S390_PFCOMPARE: 3270 r = get_user(vcpu->arch.pfault_compare, 3271 (u64 __user *)reg->addr); 3272 break; 3273 case KVM_REG_S390_PFSELECT: 3274 r = get_user(vcpu->arch.pfault_select, 3275 (u64 __user *)reg->addr); 3276 break; 3277 case KVM_REG_S390_PP: 3278 r = get_user(vcpu->arch.sie_block->pp, 3279 (u64 __user *)reg->addr); 3280 break; 3281 case KVM_REG_S390_GBEA: 3282 r = get_user(vcpu->arch.sie_block->gbea, 3283 (u64 __user *)reg->addr); 3284 break; 3285 default: 3286 break; 3287 } 3288 3289 return r; 3290 } 3291 3292 static int kvm_arch_vcpu_ioctl_initial_reset(struct kvm_vcpu *vcpu) 3293 { 3294 kvm_s390_vcpu_initial_reset(vcpu); 3295 return 0; 3296 } 3297 3298 int kvm_arch_vcpu_ioctl_set_regs(struct kvm_vcpu *vcpu, struct kvm_regs *regs) 3299 { 3300 vcpu_load(vcpu); 3301 memcpy(&vcpu->run->s.regs.gprs, ®s->gprs, sizeof(regs->gprs)); 3302 vcpu_put(vcpu); 3303 return 0; 3304 } 3305 3306 int kvm_arch_vcpu_ioctl_get_regs(struct kvm_vcpu *vcpu, struct kvm_regs *regs) 3307 { 3308 vcpu_load(vcpu); 3309 memcpy(®s->gprs, &vcpu->run->s.regs.gprs, sizeof(regs->gprs)); 3310 vcpu_put(vcpu); 3311 return 0; 3312 } 3313 3314 int kvm_arch_vcpu_ioctl_set_sregs(struct kvm_vcpu *vcpu, 3315 struct kvm_sregs *sregs) 3316 { 3317 vcpu_load(vcpu); 3318 3319 memcpy(&vcpu->run->s.regs.acrs, &sregs->acrs, sizeof(sregs->acrs)); 3320 memcpy(&vcpu->arch.sie_block->gcr, &sregs->crs, sizeof(sregs->crs)); 3321 3322 vcpu_put(vcpu); 3323 return 0; 3324 } 3325 3326 int kvm_arch_vcpu_ioctl_get_sregs(struct kvm_vcpu *vcpu, 3327 struct kvm_sregs *sregs) 3328 { 3329 vcpu_load(vcpu); 3330 3331 memcpy(&sregs->acrs, &vcpu->run->s.regs.acrs, sizeof(sregs->acrs)); 3332 memcpy(&sregs->crs, &vcpu->arch.sie_block->gcr, sizeof(sregs->crs)); 3333 3334 vcpu_put(vcpu); 3335 return 0; 3336 } 3337 3338 int kvm_arch_vcpu_ioctl_set_fpu(struct kvm_vcpu *vcpu, struct kvm_fpu *fpu) 3339 { 3340 int ret = 0; 3341 3342 vcpu_load(vcpu); 3343 3344 if (test_fp_ctl(fpu->fpc)) { 3345 ret = -EINVAL; 3346 goto out; 3347 } 3348 vcpu->run->s.regs.fpc = fpu->fpc; 3349 if (MACHINE_HAS_VX) 3350 convert_fp_to_vx((__vector128 *) vcpu->run->s.regs.vrs, 3351 (freg_t *) fpu->fprs); 3352 else 3353 memcpy(vcpu->run->s.regs.fprs, &fpu->fprs, sizeof(fpu->fprs)); 3354 3355 out: 3356 vcpu_put(vcpu); 3357 return ret; 3358 } 3359 3360 int kvm_arch_vcpu_ioctl_get_fpu(struct kvm_vcpu *vcpu, struct kvm_fpu *fpu) 3361 { 3362 vcpu_load(vcpu); 3363 3364 /* make sure we have the latest values */ 3365 save_fpu_regs(); 3366 if (MACHINE_HAS_VX) 3367 convert_vx_to_fp((freg_t *) fpu->fprs, 3368 (__vector128 *) vcpu->run->s.regs.vrs); 3369 else 3370 memcpy(fpu->fprs, vcpu->run->s.regs.fprs, sizeof(fpu->fprs)); 3371 fpu->fpc = vcpu->run->s.regs.fpc; 3372 3373 vcpu_put(vcpu); 3374 return 0; 3375 } 3376 3377 static int kvm_arch_vcpu_ioctl_set_initial_psw(struct kvm_vcpu *vcpu, psw_t psw) 3378 { 3379 int rc = 0; 3380 3381 if (!is_vcpu_stopped(vcpu)) 3382 rc = -EBUSY; 3383 else { 3384 vcpu->run->psw_mask = psw.mask; 3385 vcpu->run->psw_addr = psw.addr; 3386 } 3387 return rc; 3388 } 3389 3390 int kvm_arch_vcpu_ioctl_translate(struct kvm_vcpu *vcpu, 3391 struct kvm_translation *tr) 3392 { 3393 return -EINVAL; /* not implemented yet */ 3394 } 3395 3396 #define VALID_GUESTDBG_FLAGS (KVM_GUESTDBG_SINGLESTEP | \ 3397 KVM_GUESTDBG_USE_HW_BP | \ 3398 KVM_GUESTDBG_ENABLE) 3399 3400 int kvm_arch_vcpu_ioctl_set_guest_debug(struct kvm_vcpu *vcpu, 3401 struct kvm_guest_debug *dbg) 3402 { 3403 int rc = 0; 3404 3405 vcpu_load(vcpu); 3406 3407 vcpu->guest_debug = 0; 3408 kvm_s390_clear_bp_data(vcpu); 3409 3410 if (dbg->control & ~VALID_GUESTDBG_FLAGS) { 3411 rc = -EINVAL; 3412 goto out; 3413 } 3414 if (!sclp.has_gpere) { 3415 rc = -EINVAL; 3416 goto out; 3417 } 3418 3419 if (dbg->control & KVM_GUESTDBG_ENABLE) { 3420 vcpu->guest_debug = dbg->control; 3421 /* enforce guest PER */ 3422 kvm_s390_set_cpuflags(vcpu, CPUSTAT_P); 3423 3424 if (dbg->control & KVM_GUESTDBG_USE_HW_BP) 3425 rc = kvm_s390_import_bp_data(vcpu, dbg); 3426 } else { 3427 kvm_s390_clear_cpuflags(vcpu, CPUSTAT_P); 3428 vcpu->arch.guestdbg.last_bp = 0; 3429 } 3430 3431 if (rc) { 3432 vcpu->guest_debug = 0; 3433 kvm_s390_clear_bp_data(vcpu); 3434 kvm_s390_clear_cpuflags(vcpu, CPUSTAT_P); 3435 } 3436 3437 out: 3438 vcpu_put(vcpu); 3439 return rc; 3440 } 3441 3442 int kvm_arch_vcpu_ioctl_get_mpstate(struct kvm_vcpu *vcpu, 3443 struct kvm_mp_state *mp_state) 3444 { 3445 int ret; 3446 3447 vcpu_load(vcpu); 3448 3449 /* CHECK_STOP and LOAD are not supported yet */ 3450 ret = is_vcpu_stopped(vcpu) ? KVM_MP_STATE_STOPPED : 3451 KVM_MP_STATE_OPERATING; 3452 3453 vcpu_put(vcpu); 3454 return ret; 3455 } 3456 3457 int kvm_arch_vcpu_ioctl_set_mpstate(struct kvm_vcpu *vcpu, 3458 struct kvm_mp_state *mp_state) 3459 { 3460 int rc = 0; 3461 3462 vcpu_load(vcpu); 3463 3464 /* user space knows about this interface - let it control the state */ 3465 vcpu->kvm->arch.user_cpu_state_ctrl = 1; 3466 3467 switch (mp_state->mp_state) { 3468 case KVM_MP_STATE_STOPPED: 3469 kvm_s390_vcpu_stop(vcpu); 3470 break; 3471 case KVM_MP_STATE_OPERATING: 3472 kvm_s390_vcpu_start(vcpu); 3473 break; 3474 case KVM_MP_STATE_LOAD: 3475 case KVM_MP_STATE_CHECK_STOP: 3476 /* fall through - CHECK_STOP and LOAD are not supported yet */ 3477 default: 3478 rc = -ENXIO; 3479 } 3480 3481 vcpu_put(vcpu); 3482 return rc; 3483 } 3484 3485 static bool ibs_enabled(struct kvm_vcpu *vcpu) 3486 { 3487 return kvm_s390_test_cpuflags(vcpu, CPUSTAT_IBS); 3488 } 3489 3490 static int kvm_s390_handle_requests(struct kvm_vcpu *vcpu) 3491 { 3492 retry: 3493 kvm_s390_vcpu_request_handled(vcpu); 3494 if (!kvm_request_pending(vcpu)) 3495 return 0; 3496 /* 3497 * We use MMU_RELOAD just to re-arm the ipte notifier for the 3498 * guest prefix page. gmap_mprotect_notify will wait on the ptl lock. 3499 * This ensures that the ipte instruction for this request has 3500 * already finished. We might race against a second unmapper that 3501 * wants to set the blocking bit. Lets just retry the request loop. 3502 */ 3503 if (kvm_check_request(KVM_REQ_MMU_RELOAD, vcpu)) { 3504 int rc; 3505 rc = gmap_mprotect_notify(vcpu->arch.gmap, 3506 kvm_s390_get_prefix(vcpu), 3507 PAGE_SIZE * 2, PROT_WRITE); 3508 if (rc) { 3509 kvm_make_request(KVM_REQ_MMU_RELOAD, vcpu); 3510 return rc; 3511 } 3512 goto retry; 3513 } 3514 3515 if (kvm_check_request(KVM_REQ_TLB_FLUSH, vcpu)) { 3516 vcpu->arch.sie_block->ihcpu = 0xffff; 3517 goto retry; 3518 } 3519 3520 if (kvm_check_request(KVM_REQ_ENABLE_IBS, vcpu)) { 3521 if (!ibs_enabled(vcpu)) { 3522 trace_kvm_s390_enable_disable_ibs(vcpu->vcpu_id, 1); 3523 kvm_s390_set_cpuflags(vcpu, CPUSTAT_IBS); 3524 } 3525 goto retry; 3526 } 3527 3528 if (kvm_check_request(KVM_REQ_DISABLE_IBS, vcpu)) { 3529 if (ibs_enabled(vcpu)) { 3530 trace_kvm_s390_enable_disable_ibs(vcpu->vcpu_id, 0); 3531 kvm_s390_clear_cpuflags(vcpu, CPUSTAT_IBS); 3532 } 3533 goto retry; 3534 } 3535 3536 if (kvm_check_request(KVM_REQ_ICPT_OPEREXC, vcpu)) { 3537 vcpu->arch.sie_block->ictl |= ICTL_OPEREXC; 3538 goto retry; 3539 } 3540 3541 if (kvm_check_request(KVM_REQ_START_MIGRATION, vcpu)) { 3542 /* 3543 * Disable CMM virtualization; we will emulate the ESSA 3544 * instruction manually, in order to provide additional 3545 * functionalities needed for live migration. 3546 */ 3547 vcpu->arch.sie_block->ecb2 &= ~ECB2_CMMA; 3548 goto retry; 3549 } 3550 3551 if (kvm_check_request(KVM_REQ_STOP_MIGRATION, vcpu)) { 3552 /* 3553 * Re-enable CMM virtualization if CMMA is available and 3554 * CMM has been used. 3555 */ 3556 if ((vcpu->kvm->arch.use_cmma) && 3557 (vcpu->kvm->mm->context.uses_cmm)) 3558 vcpu->arch.sie_block->ecb2 |= ECB2_CMMA; 3559 goto retry; 3560 } 3561 3562 /* nothing to do, just clear the request */ 3563 kvm_clear_request(KVM_REQ_UNHALT, vcpu); 3564 /* we left the vsie handler, nothing to do, just clear the request */ 3565 kvm_clear_request(KVM_REQ_VSIE_RESTART, vcpu); 3566 3567 return 0; 3568 } 3569 3570 void kvm_s390_set_tod_clock(struct kvm *kvm, 3571 const struct kvm_s390_vm_tod_clock *gtod) 3572 { 3573 struct kvm_vcpu *vcpu; 3574 struct kvm_s390_tod_clock_ext htod; 3575 int i; 3576 3577 mutex_lock(&kvm->lock); 3578 preempt_disable(); 3579 3580 get_tod_clock_ext((char *)&htod); 3581 3582 kvm->arch.epoch = gtod->tod - htod.tod; 3583 kvm->arch.epdx = 0; 3584 if (test_kvm_facility(kvm, 139)) { 3585 kvm->arch.epdx = gtod->epoch_idx - htod.epoch_idx; 3586 if (kvm->arch.epoch > gtod->tod) 3587 kvm->arch.epdx -= 1; 3588 } 3589 3590 kvm_s390_vcpu_block_all(kvm); 3591 kvm_for_each_vcpu(i, vcpu, kvm) { 3592 vcpu->arch.sie_block->epoch = kvm->arch.epoch; 3593 vcpu->arch.sie_block->epdx = kvm->arch.epdx; 3594 } 3595 3596 kvm_s390_vcpu_unblock_all(kvm); 3597 preempt_enable(); 3598 mutex_unlock(&kvm->lock); 3599 } 3600 3601 /** 3602 * kvm_arch_fault_in_page - fault-in guest page if necessary 3603 * @vcpu: The corresponding virtual cpu 3604 * @gpa: Guest physical address 3605 * @writable: Whether the page should be writable or not 3606 * 3607 * Make sure that a guest page has been faulted-in on the host. 3608 * 3609 * Return: Zero on success, negative error code otherwise. 3610 */ 3611 long kvm_arch_fault_in_page(struct kvm_vcpu *vcpu, gpa_t gpa, int writable) 3612 { 3613 return gmap_fault(vcpu->arch.gmap, gpa, 3614 writable ? FAULT_FLAG_WRITE : 0); 3615 } 3616 3617 static void __kvm_inject_pfault_token(struct kvm_vcpu *vcpu, bool start_token, 3618 unsigned long token) 3619 { 3620 struct kvm_s390_interrupt inti; 3621 struct kvm_s390_irq irq; 3622 3623 if (start_token) { 3624 irq.u.ext.ext_params2 = token; 3625 irq.type = KVM_S390_INT_PFAULT_INIT; 3626 WARN_ON_ONCE(kvm_s390_inject_vcpu(vcpu, &irq)); 3627 } else { 3628 inti.type = KVM_S390_INT_PFAULT_DONE; 3629 inti.parm64 = token; 3630 WARN_ON_ONCE(kvm_s390_inject_vm(vcpu->kvm, &inti)); 3631 } 3632 } 3633 3634 void kvm_arch_async_page_not_present(struct kvm_vcpu *vcpu, 3635 struct kvm_async_pf *work) 3636 { 3637 trace_kvm_s390_pfault_init(vcpu, work->arch.pfault_token); 3638 __kvm_inject_pfault_token(vcpu, true, work->arch.pfault_token); 3639 } 3640 3641 void kvm_arch_async_page_present(struct kvm_vcpu *vcpu, 3642 struct kvm_async_pf *work) 3643 { 3644 trace_kvm_s390_pfault_done(vcpu, work->arch.pfault_token); 3645 __kvm_inject_pfault_token(vcpu, false, work->arch.pfault_token); 3646 } 3647 3648 void kvm_arch_async_page_ready(struct kvm_vcpu *vcpu, 3649 struct kvm_async_pf *work) 3650 { 3651 /* s390 will always inject the page directly */ 3652 } 3653 3654 bool kvm_arch_can_inject_async_page_present(struct kvm_vcpu *vcpu) 3655 { 3656 /* 3657 * s390 will always inject the page directly, 3658 * but we still want check_async_completion to cleanup 3659 */ 3660 return true; 3661 } 3662 3663 static int kvm_arch_setup_async_pf(struct kvm_vcpu *vcpu) 3664 { 3665 hva_t hva; 3666 struct kvm_arch_async_pf arch; 3667 int rc; 3668 3669 if (vcpu->arch.pfault_token == KVM_S390_PFAULT_TOKEN_INVALID) 3670 return 0; 3671 if ((vcpu->arch.sie_block->gpsw.mask & vcpu->arch.pfault_select) != 3672 vcpu->arch.pfault_compare) 3673 return 0; 3674 if (psw_extint_disabled(vcpu)) 3675 return 0; 3676 if (kvm_s390_vcpu_has_irq(vcpu, 0)) 3677 return 0; 3678 if (!(vcpu->arch.sie_block->gcr[0] & CR0_SERVICE_SIGNAL_SUBMASK)) 3679 return 0; 3680 if (!vcpu->arch.gmap->pfault_enabled) 3681 return 0; 3682 3683 hva = gfn_to_hva(vcpu->kvm, gpa_to_gfn(current->thread.gmap_addr)); 3684 hva += current->thread.gmap_addr & ~PAGE_MASK; 3685 if (read_guest_real(vcpu, vcpu->arch.pfault_token, &arch.pfault_token, 8)) 3686 return 0; 3687 3688 rc = kvm_setup_async_pf(vcpu, current->thread.gmap_addr, hva, &arch); 3689 return rc; 3690 } 3691 3692 static int vcpu_pre_run(struct kvm_vcpu *vcpu) 3693 { 3694 int rc, cpuflags; 3695 3696 /* 3697 * On s390 notifications for arriving pages will be delivered directly 3698 * to the guest but the house keeping for completed pfaults is 3699 * handled outside the worker. 3700 */ 3701 kvm_check_async_pf_completion(vcpu); 3702 3703 vcpu->arch.sie_block->gg14 = vcpu->run->s.regs.gprs[14]; 3704 vcpu->arch.sie_block->gg15 = vcpu->run->s.regs.gprs[15]; 3705 3706 if (need_resched()) 3707 schedule(); 3708 3709 if (test_cpu_flag(CIF_MCCK_PENDING)) 3710 s390_handle_mcck(); 3711 3712 if (!kvm_is_ucontrol(vcpu->kvm)) { 3713 rc = kvm_s390_deliver_pending_interrupts(vcpu); 3714 if (rc) 3715 return rc; 3716 } 3717 3718 rc = kvm_s390_handle_requests(vcpu); 3719 if (rc) 3720 return rc; 3721 3722 if (guestdbg_enabled(vcpu)) { 3723 kvm_s390_backup_guest_per_regs(vcpu); 3724 kvm_s390_patch_guest_per_regs(vcpu); 3725 } 3726 3727 clear_bit(vcpu->vcpu_id, vcpu->kvm->arch.gisa_int.kicked_mask); 3728 3729 vcpu->arch.sie_block->icptcode = 0; 3730 cpuflags = atomic_read(&vcpu->arch.sie_block->cpuflags); 3731 VCPU_EVENT(vcpu, 6, "entering sie flags %x", cpuflags); 3732 trace_kvm_s390_sie_enter(vcpu, cpuflags); 3733 3734 return 0; 3735 } 3736 3737 static int vcpu_post_run_fault_in_sie(struct kvm_vcpu *vcpu) 3738 { 3739 struct kvm_s390_pgm_info pgm_info = { 3740 .code = PGM_ADDRESSING, 3741 }; 3742 u8 opcode, ilen; 3743 int rc; 3744 3745 VCPU_EVENT(vcpu, 3, "%s", "fault in sie instruction"); 3746 trace_kvm_s390_sie_fault(vcpu); 3747 3748 /* 3749 * We want to inject an addressing exception, which is defined as a 3750 * suppressing or terminating exception. However, since we came here 3751 * by a DAT access exception, the PSW still points to the faulting 3752 * instruction since DAT exceptions are nullifying. So we've got 3753 * to look up the current opcode to get the length of the instruction 3754 * to be able to forward the PSW. 3755 */ 3756 rc = read_guest_instr(vcpu, vcpu->arch.sie_block->gpsw.addr, &opcode, 1); 3757 ilen = insn_length(opcode); 3758 if (rc < 0) { 3759 return rc; 3760 } else if (rc) { 3761 /* Instruction-Fetching Exceptions - we can't detect the ilen. 3762 * Forward by arbitrary ilc, injection will take care of 3763 * nullification if necessary. 3764 */ 3765 pgm_info = vcpu->arch.pgm; 3766 ilen = 4; 3767 } 3768 pgm_info.flags = ilen | KVM_S390_PGM_FLAGS_ILC_VALID; 3769 kvm_s390_forward_psw(vcpu, ilen); 3770 return kvm_s390_inject_prog_irq(vcpu, &pgm_info); 3771 } 3772 3773 static int vcpu_post_run(struct kvm_vcpu *vcpu, int exit_reason) 3774 { 3775 struct mcck_volatile_info *mcck_info; 3776 struct sie_page *sie_page; 3777 3778 VCPU_EVENT(vcpu, 6, "exit sie icptcode %d", 3779 vcpu->arch.sie_block->icptcode); 3780 trace_kvm_s390_sie_exit(vcpu, vcpu->arch.sie_block->icptcode); 3781 3782 if (guestdbg_enabled(vcpu)) 3783 kvm_s390_restore_guest_per_regs(vcpu); 3784 3785 vcpu->run->s.regs.gprs[14] = vcpu->arch.sie_block->gg14; 3786 vcpu->run->s.regs.gprs[15] = vcpu->arch.sie_block->gg15; 3787 3788 if (exit_reason == -EINTR) { 3789 VCPU_EVENT(vcpu, 3, "%s", "machine check"); 3790 sie_page = container_of(vcpu->arch.sie_block, 3791 struct sie_page, sie_block); 3792 mcck_info = &sie_page->mcck_info; 3793 kvm_s390_reinject_machine_check(vcpu, mcck_info); 3794 return 0; 3795 } 3796 3797 if (vcpu->arch.sie_block->icptcode > 0) { 3798 int rc = kvm_handle_sie_intercept(vcpu); 3799 3800 if (rc != -EOPNOTSUPP) 3801 return rc; 3802 vcpu->run->exit_reason = KVM_EXIT_S390_SIEIC; 3803 vcpu->run->s390_sieic.icptcode = vcpu->arch.sie_block->icptcode; 3804 vcpu->run->s390_sieic.ipa = vcpu->arch.sie_block->ipa; 3805 vcpu->run->s390_sieic.ipb = vcpu->arch.sie_block->ipb; 3806 return -EREMOTE; 3807 } else if (exit_reason != -EFAULT) { 3808 vcpu->stat.exit_null++; 3809 return 0; 3810 } else if (kvm_is_ucontrol(vcpu->kvm)) { 3811 vcpu->run->exit_reason = KVM_EXIT_S390_UCONTROL; 3812 vcpu->run->s390_ucontrol.trans_exc_code = 3813 current->thread.gmap_addr; 3814 vcpu->run->s390_ucontrol.pgm_code = 0x10; 3815 return -EREMOTE; 3816 } else if (current->thread.gmap_pfault) { 3817 trace_kvm_s390_major_guest_pfault(vcpu); 3818 current->thread.gmap_pfault = 0; 3819 if (kvm_arch_setup_async_pf(vcpu)) 3820 return 0; 3821 return kvm_arch_fault_in_page(vcpu, current->thread.gmap_addr, 1); 3822 } 3823 return vcpu_post_run_fault_in_sie(vcpu); 3824 } 3825 3826 static int __vcpu_run(struct kvm_vcpu *vcpu) 3827 { 3828 int rc, exit_reason; 3829 3830 /* 3831 * We try to hold kvm->srcu during most of vcpu_run (except when run- 3832 * ning the guest), so that memslots (and other stuff) are protected 3833 */ 3834 vcpu->srcu_idx = srcu_read_lock(&vcpu->kvm->srcu); 3835 3836 do { 3837 rc = vcpu_pre_run(vcpu); 3838 if (rc) 3839 break; 3840 3841 srcu_read_unlock(&vcpu->kvm->srcu, vcpu->srcu_idx); 3842 /* 3843 * As PF_VCPU will be used in fault handler, between 3844 * guest_enter and guest_exit should be no uaccess. 3845 */ 3846 local_irq_disable(); 3847 guest_enter_irqoff(); 3848 __disable_cpu_timer_accounting(vcpu); 3849 local_irq_enable(); 3850 exit_reason = sie64a(vcpu->arch.sie_block, 3851 vcpu->run->s.regs.gprs); 3852 local_irq_disable(); 3853 __enable_cpu_timer_accounting(vcpu); 3854 guest_exit_irqoff(); 3855 local_irq_enable(); 3856 vcpu->srcu_idx = srcu_read_lock(&vcpu->kvm->srcu); 3857 3858 rc = vcpu_post_run(vcpu, exit_reason); 3859 } while (!signal_pending(current) && !guestdbg_exit_pending(vcpu) && !rc); 3860 3861 srcu_read_unlock(&vcpu->kvm->srcu, vcpu->srcu_idx); 3862 return rc; 3863 } 3864 3865 static void sync_regs(struct kvm_vcpu *vcpu, struct kvm_run *kvm_run) 3866 { 3867 struct runtime_instr_cb *riccb; 3868 struct gs_cb *gscb; 3869 3870 riccb = (struct runtime_instr_cb *) &kvm_run->s.regs.riccb; 3871 gscb = (struct gs_cb *) &kvm_run->s.regs.gscb; 3872 vcpu->arch.sie_block->gpsw.mask = kvm_run->psw_mask; 3873 vcpu->arch.sie_block->gpsw.addr = kvm_run->psw_addr; 3874 if (kvm_run->kvm_dirty_regs & KVM_SYNC_PREFIX) 3875 kvm_s390_set_prefix(vcpu, kvm_run->s.regs.prefix); 3876 if (kvm_run->kvm_dirty_regs & KVM_SYNC_CRS) { 3877 memcpy(&vcpu->arch.sie_block->gcr, &kvm_run->s.regs.crs, 128); 3878 /* some control register changes require a tlb flush */ 3879 kvm_make_request(KVM_REQ_TLB_FLUSH, vcpu); 3880 } 3881 if (kvm_run->kvm_dirty_regs & KVM_SYNC_ARCH0) { 3882 kvm_s390_set_cpu_timer(vcpu, kvm_run->s.regs.cputm); 3883 vcpu->arch.sie_block->ckc = kvm_run->s.regs.ckc; 3884 vcpu->arch.sie_block->todpr = kvm_run->s.regs.todpr; 3885 vcpu->arch.sie_block->pp = kvm_run->s.regs.pp; 3886 vcpu->arch.sie_block->gbea = kvm_run->s.regs.gbea; 3887 } 3888 if (kvm_run->kvm_dirty_regs & KVM_SYNC_PFAULT) { 3889 vcpu->arch.pfault_token = kvm_run->s.regs.pft; 3890 vcpu->arch.pfault_select = kvm_run->s.regs.pfs; 3891 vcpu->arch.pfault_compare = kvm_run->s.regs.pfc; 3892 if (vcpu->arch.pfault_token == KVM_S390_PFAULT_TOKEN_INVALID) 3893 kvm_clear_async_pf_completion_queue(vcpu); 3894 } 3895 /* 3896 * If userspace sets the riccb (e.g. after migration) to a valid state, 3897 * we should enable RI here instead of doing the lazy enablement. 3898 */ 3899 if ((kvm_run->kvm_dirty_regs & KVM_SYNC_RICCB) && 3900 test_kvm_facility(vcpu->kvm, 64) && 3901 riccb->v && 3902 !(vcpu->arch.sie_block->ecb3 & ECB3_RI)) { 3903 VCPU_EVENT(vcpu, 3, "%s", "ENABLE: RI (sync_regs)"); 3904 vcpu->arch.sie_block->ecb3 |= ECB3_RI; 3905 } 3906 /* 3907 * If userspace sets the gscb (e.g. after migration) to non-zero, 3908 * we should enable GS here instead of doing the lazy enablement. 3909 */ 3910 if ((kvm_run->kvm_dirty_regs & KVM_SYNC_GSCB) && 3911 test_kvm_facility(vcpu->kvm, 133) && 3912 gscb->gssm && 3913 !vcpu->arch.gs_enabled) { 3914 VCPU_EVENT(vcpu, 3, "%s", "ENABLE: GS (sync_regs)"); 3915 vcpu->arch.sie_block->ecb |= ECB_GS; 3916 vcpu->arch.sie_block->ecd |= ECD_HOSTREGMGMT; 3917 vcpu->arch.gs_enabled = 1; 3918 } 3919 if ((kvm_run->kvm_dirty_regs & KVM_SYNC_BPBC) && 3920 test_kvm_facility(vcpu->kvm, 82)) { 3921 vcpu->arch.sie_block->fpf &= ~FPF_BPBC; 3922 vcpu->arch.sie_block->fpf |= kvm_run->s.regs.bpbc ? FPF_BPBC : 0; 3923 } 3924 save_access_regs(vcpu->arch.host_acrs); 3925 restore_access_regs(vcpu->run->s.regs.acrs); 3926 /* save host (userspace) fprs/vrs */ 3927 save_fpu_regs(); 3928 vcpu->arch.host_fpregs.fpc = current->thread.fpu.fpc; 3929 vcpu->arch.host_fpregs.regs = current->thread.fpu.regs; 3930 if (MACHINE_HAS_VX) 3931 current->thread.fpu.regs = vcpu->run->s.regs.vrs; 3932 else 3933 current->thread.fpu.regs = vcpu->run->s.regs.fprs; 3934 current->thread.fpu.fpc = vcpu->run->s.regs.fpc; 3935 if (test_fp_ctl(current->thread.fpu.fpc)) 3936 /* User space provided an invalid FPC, let's clear it */ 3937 current->thread.fpu.fpc = 0; 3938 if (MACHINE_HAS_GS) { 3939 preempt_disable(); 3940 __ctl_set_bit(2, 4); 3941 if (current->thread.gs_cb) { 3942 vcpu->arch.host_gscb = current->thread.gs_cb; 3943 save_gs_cb(vcpu->arch.host_gscb); 3944 } 3945 if (vcpu->arch.gs_enabled) { 3946 current->thread.gs_cb = (struct gs_cb *) 3947 &vcpu->run->s.regs.gscb; 3948 restore_gs_cb(current->thread.gs_cb); 3949 } 3950 preempt_enable(); 3951 } 3952 /* SIE will load etoken directly from SDNX and therefore kvm_run */ 3953 3954 kvm_run->kvm_dirty_regs = 0; 3955 } 3956 3957 static void store_regs(struct kvm_vcpu *vcpu, struct kvm_run *kvm_run) 3958 { 3959 kvm_run->psw_mask = vcpu->arch.sie_block->gpsw.mask; 3960 kvm_run->psw_addr = vcpu->arch.sie_block->gpsw.addr; 3961 kvm_run->s.regs.prefix = kvm_s390_get_prefix(vcpu); 3962 memcpy(&kvm_run->s.regs.crs, &vcpu->arch.sie_block->gcr, 128); 3963 kvm_run->s.regs.cputm = kvm_s390_get_cpu_timer(vcpu); 3964 kvm_run->s.regs.ckc = vcpu->arch.sie_block->ckc; 3965 kvm_run->s.regs.todpr = vcpu->arch.sie_block->todpr; 3966 kvm_run->s.regs.pp = vcpu->arch.sie_block->pp; 3967 kvm_run->s.regs.gbea = vcpu->arch.sie_block->gbea; 3968 kvm_run->s.regs.pft = vcpu->arch.pfault_token; 3969 kvm_run->s.regs.pfs = vcpu->arch.pfault_select; 3970 kvm_run->s.regs.pfc = vcpu->arch.pfault_compare; 3971 kvm_run->s.regs.bpbc = (vcpu->arch.sie_block->fpf & FPF_BPBC) == FPF_BPBC; 3972 save_access_regs(vcpu->run->s.regs.acrs); 3973 restore_access_regs(vcpu->arch.host_acrs); 3974 /* Save guest register state */ 3975 save_fpu_regs(); 3976 vcpu->run->s.regs.fpc = current->thread.fpu.fpc; 3977 /* Restore will be done lazily at return */ 3978 current->thread.fpu.fpc = vcpu->arch.host_fpregs.fpc; 3979 current->thread.fpu.regs = vcpu->arch.host_fpregs.regs; 3980 if (MACHINE_HAS_GS) { 3981 __ctl_set_bit(2, 4); 3982 if (vcpu->arch.gs_enabled) 3983 save_gs_cb(current->thread.gs_cb); 3984 preempt_disable(); 3985 current->thread.gs_cb = vcpu->arch.host_gscb; 3986 restore_gs_cb(vcpu->arch.host_gscb); 3987 preempt_enable(); 3988 if (!vcpu->arch.host_gscb) 3989 __ctl_clear_bit(2, 4); 3990 vcpu->arch.host_gscb = NULL; 3991 } 3992 /* SIE will save etoken directly into SDNX and therefore kvm_run */ 3993 } 3994 3995 int kvm_arch_vcpu_ioctl_run(struct kvm_vcpu *vcpu, struct kvm_run *kvm_run) 3996 { 3997 int rc; 3998 3999 if (kvm_run->immediate_exit) 4000 return -EINTR; 4001 4002 vcpu_load(vcpu); 4003 4004 if (guestdbg_exit_pending(vcpu)) { 4005 kvm_s390_prepare_debug_exit(vcpu); 4006 rc = 0; 4007 goto out; 4008 } 4009 4010 kvm_sigset_activate(vcpu); 4011 4012 if (!kvm_s390_user_cpu_state_ctrl(vcpu->kvm)) { 4013 kvm_s390_vcpu_start(vcpu); 4014 } else if (is_vcpu_stopped(vcpu)) { 4015 pr_err_ratelimited("can't run stopped vcpu %d\n", 4016 vcpu->vcpu_id); 4017 rc = -EINVAL; 4018 goto out; 4019 } 4020 4021 sync_regs(vcpu, kvm_run); 4022 enable_cpu_timer_accounting(vcpu); 4023 4024 might_fault(); 4025 rc = __vcpu_run(vcpu); 4026 4027 if (signal_pending(current) && !rc) { 4028 kvm_run->exit_reason = KVM_EXIT_INTR; 4029 rc = -EINTR; 4030 } 4031 4032 if (guestdbg_exit_pending(vcpu) && !rc) { 4033 kvm_s390_prepare_debug_exit(vcpu); 4034 rc = 0; 4035 } 4036 4037 if (rc == -EREMOTE) { 4038 /* userspace support is needed, kvm_run has been prepared */ 4039 rc = 0; 4040 } 4041 4042 disable_cpu_timer_accounting(vcpu); 4043 store_regs(vcpu, kvm_run); 4044 4045 kvm_sigset_deactivate(vcpu); 4046 4047 vcpu->stat.exit_userspace++; 4048 out: 4049 vcpu_put(vcpu); 4050 return rc; 4051 } 4052 4053 /* 4054 * store status at address 4055 * we use have two special cases: 4056 * KVM_S390_STORE_STATUS_NOADDR: -> 0x1200 on 64 bit 4057 * KVM_S390_STORE_STATUS_PREFIXED: -> prefix 4058 */ 4059 int kvm_s390_store_status_unloaded(struct kvm_vcpu *vcpu, unsigned long gpa) 4060 { 4061 unsigned char archmode = 1; 4062 freg_t fprs[NUM_FPRS]; 4063 unsigned int px; 4064 u64 clkcomp, cputm; 4065 int rc; 4066 4067 px = kvm_s390_get_prefix(vcpu); 4068 if (gpa == KVM_S390_STORE_STATUS_NOADDR) { 4069 if (write_guest_abs(vcpu, 163, &archmode, 1)) 4070 return -EFAULT; 4071 gpa = 0; 4072 } else if (gpa == KVM_S390_STORE_STATUS_PREFIXED) { 4073 if (write_guest_real(vcpu, 163, &archmode, 1)) 4074 return -EFAULT; 4075 gpa = px; 4076 } else 4077 gpa -= __LC_FPREGS_SAVE_AREA; 4078 4079 /* manually convert vector registers if necessary */ 4080 if (MACHINE_HAS_VX) { 4081 convert_vx_to_fp(fprs, (__vector128 *) vcpu->run->s.regs.vrs); 4082 rc = write_guest_abs(vcpu, gpa + __LC_FPREGS_SAVE_AREA, 4083 fprs, 128); 4084 } else { 4085 rc = write_guest_abs(vcpu, gpa + __LC_FPREGS_SAVE_AREA, 4086 vcpu->run->s.regs.fprs, 128); 4087 } 4088 rc |= write_guest_abs(vcpu, gpa + __LC_GPREGS_SAVE_AREA, 4089 vcpu->run->s.regs.gprs, 128); 4090 rc |= write_guest_abs(vcpu, gpa + __LC_PSW_SAVE_AREA, 4091 &vcpu->arch.sie_block->gpsw, 16); 4092 rc |= write_guest_abs(vcpu, gpa + __LC_PREFIX_SAVE_AREA, 4093 &px, 4); 4094 rc |= write_guest_abs(vcpu, gpa + __LC_FP_CREG_SAVE_AREA, 4095 &vcpu->run->s.regs.fpc, 4); 4096 rc |= write_guest_abs(vcpu, gpa + __LC_TOD_PROGREG_SAVE_AREA, 4097 &vcpu->arch.sie_block->todpr, 4); 4098 cputm = kvm_s390_get_cpu_timer(vcpu); 4099 rc |= write_guest_abs(vcpu, gpa + __LC_CPU_TIMER_SAVE_AREA, 4100 &cputm, 8); 4101 clkcomp = vcpu->arch.sie_block->ckc >> 8; 4102 rc |= write_guest_abs(vcpu, gpa + __LC_CLOCK_COMP_SAVE_AREA, 4103 &clkcomp, 8); 4104 rc |= write_guest_abs(vcpu, gpa + __LC_AREGS_SAVE_AREA, 4105 &vcpu->run->s.regs.acrs, 64); 4106 rc |= write_guest_abs(vcpu, gpa + __LC_CREGS_SAVE_AREA, 4107 &vcpu->arch.sie_block->gcr, 128); 4108 return rc ? -EFAULT : 0; 4109 } 4110 4111 int kvm_s390_vcpu_store_status(struct kvm_vcpu *vcpu, unsigned long addr) 4112 { 4113 /* 4114 * The guest FPRS and ACRS are in the host FPRS/ACRS due to the lazy 4115 * switch in the run ioctl. Let's update our copies before we save 4116 * it into the save area 4117 */ 4118 save_fpu_regs(); 4119 vcpu->run->s.regs.fpc = current->thread.fpu.fpc; 4120 save_access_regs(vcpu->run->s.regs.acrs); 4121 4122 return kvm_s390_store_status_unloaded(vcpu, addr); 4123 } 4124 4125 static void __disable_ibs_on_vcpu(struct kvm_vcpu *vcpu) 4126 { 4127 kvm_check_request(KVM_REQ_ENABLE_IBS, vcpu); 4128 kvm_s390_sync_request(KVM_REQ_DISABLE_IBS, vcpu); 4129 } 4130 4131 static void __disable_ibs_on_all_vcpus(struct kvm *kvm) 4132 { 4133 unsigned int i; 4134 struct kvm_vcpu *vcpu; 4135 4136 kvm_for_each_vcpu(i, vcpu, kvm) { 4137 __disable_ibs_on_vcpu(vcpu); 4138 } 4139 } 4140 4141 static void __enable_ibs_on_vcpu(struct kvm_vcpu *vcpu) 4142 { 4143 if (!sclp.has_ibs) 4144 return; 4145 kvm_check_request(KVM_REQ_DISABLE_IBS, vcpu); 4146 kvm_s390_sync_request(KVM_REQ_ENABLE_IBS, vcpu); 4147 } 4148 4149 void kvm_s390_vcpu_start(struct kvm_vcpu *vcpu) 4150 { 4151 int i, online_vcpus, started_vcpus = 0; 4152 4153 if (!is_vcpu_stopped(vcpu)) 4154 return; 4155 4156 trace_kvm_s390_vcpu_start_stop(vcpu->vcpu_id, 1); 4157 /* Only one cpu at a time may enter/leave the STOPPED state. */ 4158 spin_lock(&vcpu->kvm->arch.start_stop_lock); 4159 online_vcpus = atomic_read(&vcpu->kvm->online_vcpus); 4160 4161 for (i = 0; i < online_vcpus; i++) { 4162 if (!is_vcpu_stopped(vcpu->kvm->vcpus[i])) 4163 started_vcpus++; 4164 } 4165 4166 if (started_vcpus == 0) { 4167 /* we're the only active VCPU -> speed it up */ 4168 __enable_ibs_on_vcpu(vcpu); 4169 } else if (started_vcpus == 1) { 4170 /* 4171 * As we are starting a second VCPU, we have to disable 4172 * the IBS facility on all VCPUs to remove potentially 4173 * oustanding ENABLE requests. 4174 */ 4175 __disable_ibs_on_all_vcpus(vcpu->kvm); 4176 } 4177 4178 kvm_s390_clear_cpuflags(vcpu, CPUSTAT_STOPPED); 4179 /* 4180 * Another VCPU might have used IBS while we were offline. 4181 * Let's play safe and flush the VCPU at startup. 4182 */ 4183 kvm_make_request(KVM_REQ_TLB_FLUSH, vcpu); 4184 spin_unlock(&vcpu->kvm->arch.start_stop_lock); 4185 return; 4186 } 4187 4188 void kvm_s390_vcpu_stop(struct kvm_vcpu *vcpu) 4189 { 4190 int i, online_vcpus, started_vcpus = 0; 4191 struct kvm_vcpu *started_vcpu = NULL; 4192 4193 if (is_vcpu_stopped(vcpu)) 4194 return; 4195 4196 trace_kvm_s390_vcpu_start_stop(vcpu->vcpu_id, 0); 4197 /* Only one cpu at a time may enter/leave the STOPPED state. */ 4198 spin_lock(&vcpu->kvm->arch.start_stop_lock); 4199 online_vcpus = atomic_read(&vcpu->kvm->online_vcpus); 4200 4201 /* SIGP STOP and SIGP STOP AND STORE STATUS has been fully processed */ 4202 kvm_s390_clear_stop_irq(vcpu); 4203 4204 kvm_s390_set_cpuflags(vcpu, CPUSTAT_STOPPED); 4205 __disable_ibs_on_vcpu(vcpu); 4206 4207 for (i = 0; i < online_vcpus; i++) { 4208 if (!is_vcpu_stopped(vcpu->kvm->vcpus[i])) { 4209 started_vcpus++; 4210 started_vcpu = vcpu->kvm->vcpus[i]; 4211 } 4212 } 4213 4214 if (started_vcpus == 1) { 4215 /* 4216 * As we only have one VCPU left, we want to enable the 4217 * IBS facility for that VCPU to speed it up. 4218 */ 4219 __enable_ibs_on_vcpu(started_vcpu); 4220 } 4221 4222 spin_unlock(&vcpu->kvm->arch.start_stop_lock); 4223 return; 4224 } 4225 4226 static int kvm_vcpu_ioctl_enable_cap(struct kvm_vcpu *vcpu, 4227 struct kvm_enable_cap *cap) 4228 { 4229 int r; 4230 4231 if (cap->flags) 4232 return -EINVAL; 4233 4234 switch (cap->cap) { 4235 case KVM_CAP_S390_CSS_SUPPORT: 4236 if (!vcpu->kvm->arch.css_support) { 4237 vcpu->kvm->arch.css_support = 1; 4238 VM_EVENT(vcpu->kvm, 3, "%s", "ENABLE: CSS support"); 4239 trace_kvm_s390_enable_css(vcpu->kvm); 4240 } 4241 r = 0; 4242 break; 4243 default: 4244 r = -EINVAL; 4245 break; 4246 } 4247 return r; 4248 } 4249 4250 static long kvm_s390_guest_mem_op(struct kvm_vcpu *vcpu, 4251 struct kvm_s390_mem_op *mop) 4252 { 4253 void __user *uaddr = (void __user *)mop->buf; 4254 void *tmpbuf = NULL; 4255 int r, srcu_idx; 4256 const u64 supported_flags = KVM_S390_MEMOP_F_INJECT_EXCEPTION 4257 | KVM_S390_MEMOP_F_CHECK_ONLY; 4258 4259 if (mop->flags & ~supported_flags) 4260 return -EINVAL; 4261 4262 if (mop->size > MEM_OP_MAX_SIZE) 4263 return -E2BIG; 4264 4265 if (!(mop->flags & KVM_S390_MEMOP_F_CHECK_ONLY)) { 4266 tmpbuf = vmalloc(mop->size); 4267 if (!tmpbuf) 4268 return -ENOMEM; 4269 } 4270 4271 srcu_idx = srcu_read_lock(&vcpu->kvm->srcu); 4272 4273 switch (mop->op) { 4274 case KVM_S390_MEMOP_LOGICAL_READ: 4275 if (mop->flags & KVM_S390_MEMOP_F_CHECK_ONLY) { 4276 r = check_gva_range(vcpu, mop->gaddr, mop->ar, 4277 mop->size, GACC_FETCH); 4278 break; 4279 } 4280 r = read_guest(vcpu, mop->gaddr, mop->ar, tmpbuf, mop->size); 4281 if (r == 0) { 4282 if (copy_to_user(uaddr, tmpbuf, mop->size)) 4283 r = -EFAULT; 4284 } 4285 break; 4286 case KVM_S390_MEMOP_LOGICAL_WRITE: 4287 if (mop->flags & KVM_S390_MEMOP_F_CHECK_ONLY) { 4288 r = check_gva_range(vcpu, mop->gaddr, mop->ar, 4289 mop->size, GACC_STORE); 4290 break; 4291 } 4292 if (copy_from_user(tmpbuf, uaddr, mop->size)) { 4293 r = -EFAULT; 4294 break; 4295 } 4296 r = write_guest(vcpu, mop->gaddr, mop->ar, tmpbuf, mop->size); 4297 break; 4298 default: 4299 r = -EINVAL; 4300 } 4301 4302 srcu_read_unlock(&vcpu->kvm->srcu, srcu_idx); 4303 4304 if (r > 0 && (mop->flags & KVM_S390_MEMOP_F_INJECT_EXCEPTION) != 0) 4305 kvm_s390_inject_prog_irq(vcpu, &vcpu->arch.pgm); 4306 4307 vfree(tmpbuf); 4308 return r; 4309 } 4310 4311 long kvm_arch_vcpu_async_ioctl(struct file *filp, 4312 unsigned int ioctl, unsigned long arg) 4313 { 4314 struct kvm_vcpu *vcpu = filp->private_data; 4315 void __user *argp = (void __user *)arg; 4316 4317 switch (ioctl) { 4318 case KVM_S390_IRQ: { 4319 struct kvm_s390_irq s390irq; 4320 4321 if (copy_from_user(&s390irq, argp, sizeof(s390irq))) 4322 return -EFAULT; 4323 return kvm_s390_inject_vcpu(vcpu, &s390irq); 4324 } 4325 case KVM_S390_INTERRUPT: { 4326 struct kvm_s390_interrupt s390int; 4327 struct kvm_s390_irq s390irq; 4328 4329 if (copy_from_user(&s390int, argp, sizeof(s390int))) 4330 return -EFAULT; 4331 if (s390int_to_s390irq(&s390int, &s390irq)) 4332 return -EINVAL; 4333 return kvm_s390_inject_vcpu(vcpu, &s390irq); 4334 } 4335 } 4336 return -ENOIOCTLCMD; 4337 } 4338 4339 long kvm_arch_vcpu_ioctl(struct file *filp, 4340 unsigned int ioctl, unsigned long arg) 4341 { 4342 struct kvm_vcpu *vcpu = filp->private_data; 4343 void __user *argp = (void __user *)arg; 4344 int idx; 4345 long r; 4346 4347 vcpu_load(vcpu); 4348 4349 switch (ioctl) { 4350 case KVM_S390_STORE_STATUS: 4351 idx = srcu_read_lock(&vcpu->kvm->srcu); 4352 r = kvm_s390_vcpu_store_status(vcpu, arg); 4353 srcu_read_unlock(&vcpu->kvm->srcu, idx); 4354 break; 4355 case KVM_S390_SET_INITIAL_PSW: { 4356 psw_t psw; 4357 4358 r = -EFAULT; 4359 if (copy_from_user(&psw, argp, sizeof(psw))) 4360 break; 4361 r = kvm_arch_vcpu_ioctl_set_initial_psw(vcpu, psw); 4362 break; 4363 } 4364 case KVM_S390_INITIAL_RESET: 4365 r = kvm_arch_vcpu_ioctl_initial_reset(vcpu); 4366 break; 4367 case KVM_SET_ONE_REG: 4368 case KVM_GET_ONE_REG: { 4369 struct kvm_one_reg reg; 4370 r = -EFAULT; 4371 if (copy_from_user(®, argp, sizeof(reg))) 4372 break; 4373 if (ioctl == KVM_SET_ONE_REG) 4374 r = kvm_arch_vcpu_ioctl_set_one_reg(vcpu, ®); 4375 else 4376 r = kvm_arch_vcpu_ioctl_get_one_reg(vcpu, ®); 4377 break; 4378 } 4379 #ifdef CONFIG_KVM_S390_UCONTROL 4380 case KVM_S390_UCAS_MAP: { 4381 struct kvm_s390_ucas_mapping ucasmap; 4382 4383 if (copy_from_user(&ucasmap, argp, sizeof(ucasmap))) { 4384 r = -EFAULT; 4385 break; 4386 } 4387 4388 if (!kvm_is_ucontrol(vcpu->kvm)) { 4389 r = -EINVAL; 4390 break; 4391 } 4392 4393 r = gmap_map_segment(vcpu->arch.gmap, ucasmap.user_addr, 4394 ucasmap.vcpu_addr, ucasmap.length); 4395 break; 4396 } 4397 case KVM_S390_UCAS_UNMAP: { 4398 struct kvm_s390_ucas_mapping ucasmap; 4399 4400 if (copy_from_user(&ucasmap, argp, sizeof(ucasmap))) { 4401 r = -EFAULT; 4402 break; 4403 } 4404 4405 if (!kvm_is_ucontrol(vcpu->kvm)) { 4406 r = -EINVAL; 4407 break; 4408 } 4409 4410 r = gmap_unmap_segment(vcpu->arch.gmap, ucasmap.vcpu_addr, 4411 ucasmap.length); 4412 break; 4413 } 4414 #endif 4415 case KVM_S390_VCPU_FAULT: { 4416 r = gmap_fault(vcpu->arch.gmap, arg, 0); 4417 break; 4418 } 4419 case KVM_ENABLE_CAP: 4420 { 4421 struct kvm_enable_cap cap; 4422 r = -EFAULT; 4423 if (copy_from_user(&cap, argp, sizeof(cap))) 4424 break; 4425 r = kvm_vcpu_ioctl_enable_cap(vcpu, &cap); 4426 break; 4427 } 4428 case KVM_S390_MEM_OP: { 4429 struct kvm_s390_mem_op mem_op; 4430 4431 if (copy_from_user(&mem_op, argp, sizeof(mem_op)) == 0) 4432 r = kvm_s390_guest_mem_op(vcpu, &mem_op); 4433 else 4434 r = -EFAULT; 4435 break; 4436 } 4437 case KVM_S390_SET_IRQ_STATE: { 4438 struct kvm_s390_irq_state irq_state; 4439 4440 r = -EFAULT; 4441 if (copy_from_user(&irq_state, argp, sizeof(irq_state))) 4442 break; 4443 if (irq_state.len > VCPU_IRQS_MAX_BUF || 4444 irq_state.len == 0 || 4445 irq_state.len % sizeof(struct kvm_s390_irq) > 0) { 4446 r = -EINVAL; 4447 break; 4448 } 4449 /* do not use irq_state.flags, it will break old QEMUs */ 4450 r = kvm_s390_set_irq_state(vcpu, 4451 (void __user *) irq_state.buf, 4452 irq_state.len); 4453 break; 4454 } 4455 case KVM_S390_GET_IRQ_STATE: { 4456 struct kvm_s390_irq_state irq_state; 4457 4458 r = -EFAULT; 4459 if (copy_from_user(&irq_state, argp, sizeof(irq_state))) 4460 break; 4461 if (irq_state.len == 0) { 4462 r = -EINVAL; 4463 break; 4464 } 4465 /* do not use irq_state.flags, it will break old QEMUs */ 4466 r = kvm_s390_get_irq_state(vcpu, 4467 (__u8 __user *) irq_state.buf, 4468 irq_state.len); 4469 break; 4470 } 4471 default: 4472 r = -ENOTTY; 4473 } 4474 4475 vcpu_put(vcpu); 4476 return r; 4477 } 4478 4479 vm_fault_t kvm_arch_vcpu_fault(struct kvm_vcpu *vcpu, struct vm_fault *vmf) 4480 { 4481 #ifdef CONFIG_KVM_S390_UCONTROL 4482 if ((vmf->pgoff == KVM_S390_SIE_PAGE_OFFSET) 4483 && (kvm_is_ucontrol(vcpu->kvm))) { 4484 vmf->page = virt_to_page(vcpu->arch.sie_block); 4485 get_page(vmf->page); 4486 return 0; 4487 } 4488 #endif 4489 return VM_FAULT_SIGBUS; 4490 } 4491 4492 int kvm_arch_create_memslot(struct kvm *kvm, struct kvm_memory_slot *slot, 4493 unsigned long npages) 4494 { 4495 return 0; 4496 } 4497 4498 /* Section: memory related */ 4499 int kvm_arch_prepare_memory_region(struct kvm *kvm, 4500 struct kvm_memory_slot *memslot, 4501 const struct kvm_userspace_memory_region *mem, 4502 enum kvm_mr_change change) 4503 { 4504 /* A few sanity checks. We can have memory slots which have to be 4505 located/ended at a segment boundary (1MB). The memory in userland is 4506 ok to be fragmented into various different vmas. It is okay to mmap() 4507 and munmap() stuff in this slot after doing this call at any time */ 4508 4509 if (mem->userspace_addr & 0xffffful) 4510 return -EINVAL; 4511 4512 if (mem->memory_size & 0xffffful) 4513 return -EINVAL; 4514 4515 if (mem->guest_phys_addr + mem->memory_size > kvm->arch.mem_limit) 4516 return -EINVAL; 4517 4518 return 0; 4519 } 4520 4521 void kvm_arch_commit_memory_region(struct kvm *kvm, 4522 const struct kvm_userspace_memory_region *mem, 4523 const struct kvm_memory_slot *old, 4524 const struct kvm_memory_slot *new, 4525 enum kvm_mr_change change) 4526 { 4527 int rc; 4528 4529 /* If the basics of the memslot do not change, we do not want 4530 * to update the gmap. Every update causes several unnecessary 4531 * segment translation exceptions. This is usually handled just 4532 * fine by the normal fault handler + gmap, but it will also 4533 * cause faults on the prefix page of running guest CPUs. 4534 */ 4535 if (old->userspace_addr == mem->userspace_addr && 4536 old->base_gfn * PAGE_SIZE == mem->guest_phys_addr && 4537 old->npages * PAGE_SIZE == mem->memory_size) 4538 return; 4539 4540 rc = gmap_map_segment(kvm->arch.gmap, mem->userspace_addr, 4541 mem->guest_phys_addr, mem->memory_size); 4542 if (rc) 4543 pr_warn("failed to commit memory region\n"); 4544 return; 4545 } 4546 4547 static inline unsigned long nonhyp_mask(int i) 4548 { 4549 unsigned int nonhyp_fai = (sclp.hmfai << i * 2) >> 30; 4550 4551 return 0x0000ffffffffffffUL >> (nonhyp_fai << 4); 4552 } 4553 4554 void kvm_arch_vcpu_block_finish(struct kvm_vcpu *vcpu) 4555 { 4556 vcpu->valid_wakeup = false; 4557 } 4558 4559 static int __init kvm_s390_init(void) 4560 { 4561 int i; 4562 4563 if (!sclp.has_sief2) { 4564 pr_info("SIE is not available\n"); 4565 return -ENODEV; 4566 } 4567 4568 if (nested && hpage) { 4569 pr_info("A KVM host that supports nesting cannot back its KVM guests with huge pages\n"); 4570 return -EINVAL; 4571 } 4572 4573 for (i = 0; i < 16; i++) 4574 kvm_s390_fac_base[i] |= 4575 S390_lowcore.stfle_fac_list[i] & nonhyp_mask(i); 4576 4577 return kvm_init(NULL, sizeof(struct kvm_vcpu), 0, THIS_MODULE); 4578 } 4579 4580 static void __exit kvm_s390_exit(void) 4581 { 4582 kvm_exit(); 4583 } 4584 4585 module_init(kvm_s390_init); 4586 module_exit(kvm_s390_exit); 4587 4588 /* 4589 * Enable autoloading of the kvm module. 4590 * Note that we add the module alias here instead of virt/kvm/kvm_main.c 4591 * since x86 takes a different approach. 4592 */ 4593 #include <linux/miscdevice.h> 4594 MODULE_ALIAS_MISCDEV(KVM_MINOR); 4595 MODULE_ALIAS("devname:kvm"); 4596