Linux Audio

Check our new training course

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