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");
v3.5.6
  1/*
  2 * s390host.c --  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 */
 15
 16#include <linux/compiler.h>
 17#include <linux/err.h>
 18#include <linux/fs.h>
 19#include <linux/hrtimer.h>
 20#include <linux/init.h>
 21#include <linux/kvm.h>
 22#include <linux/kvm_host.h>
 
 23#include <linux/module.h>
 
 24#include <linux/slab.h>
 25#include <linux/timer.h>
 
 
 26#include <asm/asm-offsets.h>
 27#include <asm/lowcore.h>
 
 28#include <asm/pgtable.h>
 
 29#include <asm/nmi.h>
 30#include <asm/switch_to.h>
 
 31#include <asm/sclp.h>
 
 
 32#include "kvm-s390.h"
 33#include "gaccess.h"
 34
 
 
 
 
 
 
 
 
 
 
 
 
 
 35#define VCPU_STAT(x) offsetof(struct kvm_vcpu, stat.x), KVM_STAT_VCPU
 36
 37struct kvm_stats_debugfs_item debugfs_entries[] = {
 38	{ "userspace_handled", VCPU_STAT(exit_userspace) },
 39	{ "exit_null", VCPU_STAT(exit_null) },
 40	{ "exit_validity", VCPU_STAT(exit_validity) },
 41	{ "exit_stop_request", VCPU_STAT(exit_stop_request) },
 42	{ "exit_external_request", VCPU_STAT(exit_external_request) },
 43	{ "exit_external_interrupt", VCPU_STAT(exit_external_interrupt) },
 44	{ "exit_instruction", VCPU_STAT(exit_instruction) },
 
 45	{ "exit_program_interruption", VCPU_STAT(exit_program_interruption) },
 46	{ "exit_instr_and_program_int", VCPU_STAT(exit_instr_and_program) },
 
 
 
 
 
 47	{ "instruction_lctlg", VCPU_STAT(instruction_lctlg) },
 48	{ "instruction_lctl", VCPU_STAT(instruction_lctl) },
 
 
 49	{ "deliver_emergency_signal", VCPU_STAT(deliver_emergency_signal) },
 50	{ "deliver_external_call", VCPU_STAT(deliver_external_call) },
 51	{ "deliver_service_signal", VCPU_STAT(deliver_service_signal) },
 52	{ "deliver_virtio_interrupt", VCPU_STAT(deliver_virtio_interrupt) },
 53	{ "deliver_stop_signal", VCPU_STAT(deliver_stop_signal) },
 54	{ "deliver_prefix_signal", VCPU_STAT(deliver_prefix_signal) },
 55	{ "deliver_restart_signal", VCPU_STAT(deliver_restart_signal) },
 56	{ "deliver_program_interruption", VCPU_STAT(deliver_program_int) },
 57	{ "exit_wait_state", VCPU_STAT(exit_wait_state) },
 
 58	{ "instruction_stidp", VCPU_STAT(instruction_stidp) },
 59	{ "instruction_spx", VCPU_STAT(instruction_spx) },
 60	{ "instruction_stpx", VCPU_STAT(instruction_stpx) },
 61	{ "instruction_stap", VCPU_STAT(instruction_stap) },
 62	{ "instruction_storage_key", VCPU_STAT(instruction_storage_key) },
 
 63	{ "instruction_stsch", VCPU_STAT(instruction_stsch) },
 64	{ "instruction_chsc", VCPU_STAT(instruction_chsc) },
 
 65	{ "instruction_stsi", VCPU_STAT(instruction_stsi) },
 66	{ "instruction_stfl", VCPU_STAT(instruction_stfl) },
 67	{ "instruction_tprot", VCPU_STAT(instruction_tprot) },
 
 
 68	{ "instruction_sigp_sense", VCPU_STAT(instruction_sigp_sense) },
 69	{ "instruction_sigp_sense_running", VCPU_STAT(instruction_sigp_sense_running) },
 70	{ "instruction_sigp_external_call", VCPU_STAT(instruction_sigp_external_call) },
 71	{ "instruction_sigp_emergency", VCPU_STAT(instruction_sigp_emergency) },
 
 
 72	{ "instruction_sigp_stop", VCPU_STAT(instruction_sigp_stop) },
 
 
 
 73	{ "instruction_sigp_set_arch", VCPU_STAT(instruction_sigp_arch) },
 74	{ "instruction_sigp_set_prefix", VCPU_STAT(instruction_sigp_prefix) },
 75	{ "instruction_sigp_restart", VCPU_STAT(instruction_sigp_restart) },
 
 
 
 76	{ "diagnose_10", VCPU_STAT(diagnose_10) },
 77	{ "diagnose_44", VCPU_STAT(diagnose_44) },
 78	{ "diagnose_9c", VCPU_STAT(diagnose_9c) },
 
 
 
 79	{ NULL }
 80};
 81
 82static unsigned long long *facilities;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 83
 84/* Section: not file related */
 85int kvm_arch_hardware_enable(void *garbage)
 86{
 87	/* every s390 is virtualization enabled ;-) */
 88	return 0;
 89}
 90
 91void kvm_arch_hardware_disable(void *garbage)
 
 
 
 
 
 
 
 
 
 
 92{
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 93}
 94
 
 
 
 
 95int kvm_arch_hardware_setup(void)
 96{
 
 
 
 
 
 
 97	return 0;
 98}
 99
100void kvm_arch_hardware_unsetup(void)
101{
102}
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
103
104void kvm_arch_check_processor_compat(void *rtn)
105{
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
106}
107
108int kvm_arch_init(void *opaque)
109{
110	return 0;
 
 
 
 
 
 
 
 
 
 
 
 
111}
112
113void kvm_arch_exit(void)
114{
 
115}
116
117/* Section: device related */
118long kvm_arch_dev_ioctl(struct file *filp,
119			unsigned int ioctl, unsigned long arg)
120{
121	if (ioctl == KVM_S390_ENABLE_SIE)
122		return s390_enable_sie();
123	return -EINVAL;
124}
125
126int kvm_dev_ioctl_check_extension(long ext)
127{
128	int r;
129
130	switch (ext) {
131	case KVM_CAP_S390_PSW:
132	case KVM_CAP_S390_GMAP:
133	case KVM_CAP_SYNC_MMU:
134#ifdef CONFIG_KVM_S390_UCONTROL
135	case KVM_CAP_S390_UCONTROL:
136#endif
 
137	case KVM_CAP_SYNC_REGS:
138	case KVM_CAP_ONE_REG:
 
 
 
 
 
 
 
 
 
 
 
 
 
 
139		r = 1;
140		break;
 
 
 
141	case KVM_CAP_NR_VCPUS:
142	case KVM_CAP_MAX_VCPUS:
143		r = KVM_MAX_VCPUS;
 
 
 
 
 
 
 
144		break;
145	case KVM_CAP_S390_COW:
146		r = sclp_get_fac85() & 0x2;
 
 
 
 
 
 
147		break;
148	default:
149		r = 0;
150	}
151	return r;
152}
153
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
154/* Section: vm related */
 
 
155/*
156 * Get (and clear) the dirty memory log for a memory slot.
157 */
158int kvm_vm_ioctl_get_dirty_log(struct kvm *kvm,
159			       struct kvm_dirty_log *log)
160{
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
161	return 0;
162}
163
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
164long kvm_arch_vm_ioctl(struct file *filp,
165		       unsigned int ioctl, unsigned long arg)
166{
167	struct kvm *kvm = filp->private_data;
168	void __user *argp = (void __user *)arg;
 
169	int r;
170
171	switch (ioctl) {
172	case KVM_S390_INTERRUPT: {
173		struct kvm_s390_interrupt s390int;
174
175		r = -EFAULT;
176		if (copy_from_user(&s390int, argp, sizeof(s390int)))
177			break;
178		r = kvm_s390_inject_vm(kvm, &s390int);
179		break;
180	}
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
181	default:
182		r = -ENOTTY;
183	}
184
185	return r;
186}
187
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
188int kvm_arch_init_vm(struct kvm *kvm, unsigned long type)
189{
190	int rc;
 
191	char debug_name[16];
 
192
193	rc = -EINVAL;
194#ifdef CONFIG_KVM_S390_UCONTROL
195	if (type & ~KVM_VM_S390_UCONTROL)
196		goto out_err;
197	if ((type & KVM_VM_S390_UCONTROL) && (!capable(CAP_SYS_ADMIN)))
198		goto out_err;
199#else
200	if (type)
201		goto out_err;
202#endif
203
204	rc = s390_enable_sie();
205	if (rc)
206		goto out_err;
207
208	rc = -ENOMEM;
209
210	kvm->arch.sca = (struct sca_block *) get_zeroed_page(GFP_KERNEL);
 
 
 
 
 
 
211	if (!kvm->arch.sca)
212		goto out_err;
 
 
 
 
 
 
 
213
214	sprintf(debug_name, "kvm-%u", current->pid);
215
216	kvm->arch.dbf = debug_register(debug_name, 8, 2, 8 * sizeof(long));
217	if (!kvm->arch.dbf)
218		goto out_nodbf;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
219
220	spin_lock_init(&kvm->arch.float_int.lock);
221	INIT_LIST_HEAD(&kvm->arch.float_int.list);
 
 
 
222
223	debug_register_view(kvm->arch.dbf, &debug_sprintf_view);
224	VM_EVENT(kvm, 3, "%s", "vm created");
225
226	if (type & KVM_VM_S390_UCONTROL) {
227		kvm->arch.gmap = NULL;
 
228	} else {
229		kvm->arch.gmap = gmap_alloc(current->mm);
 
 
 
 
 
230		if (!kvm->arch.gmap)
231			goto out_nogmap;
 
 
232	}
 
 
 
 
 
 
 
 
 
233	return 0;
234out_nogmap:
 
235	debug_unregister(kvm->arch.dbf);
236out_nodbf:
237	free_page((unsigned long)(kvm->arch.sca));
238out_err:
239	return rc;
240}
241
 
 
 
 
 
 
 
 
 
 
242void kvm_arch_vcpu_destroy(struct kvm_vcpu *vcpu)
243{
244	VCPU_EVENT(vcpu, 3, "%s", "free cpu");
245	if (!kvm_is_ucontrol(vcpu->kvm)) {
246		clear_bit(63 - vcpu->vcpu_id,
247			  (unsigned long *) &vcpu->kvm->arch.sca->mcn);
248		if (vcpu->kvm->arch.sca->cpu[vcpu->vcpu_id].sda ==
249		    (__u64) vcpu->arch.sie_block)
250			vcpu->kvm->arch.sca->cpu[vcpu->vcpu_id].sda = 0;
251	}
252	smp_mb();
253
254	if (kvm_is_ucontrol(vcpu->kvm))
255		gmap_free(vcpu->arch.gmap);
256
 
 
257	free_page((unsigned long)(vcpu->arch.sie_block));
 
258	kvm_vcpu_uninit(vcpu);
259	kfree(vcpu);
260}
261
262static void kvm_free_vcpus(struct kvm *kvm)
263{
264	unsigned int i;
265	struct kvm_vcpu *vcpu;
266
267	kvm_for_each_vcpu(i, vcpu, kvm)
268		kvm_arch_vcpu_destroy(vcpu);
269
270	mutex_lock(&kvm->lock);
271	for (i = 0; i < atomic_read(&kvm->online_vcpus); i++)
272		kvm->vcpus[i] = NULL;
273
274	atomic_set(&kvm->online_vcpus, 0);
275	mutex_unlock(&kvm->lock);
276}
277
278void kvm_arch_sync_events(struct kvm *kvm)
279{
280}
281
282void kvm_arch_destroy_vm(struct kvm *kvm)
283{
284	kvm_free_vcpus(kvm);
285	free_page((unsigned long)(kvm->arch.sca));
286	debug_unregister(kvm->arch.dbf);
 
287	if (!kvm_is_ucontrol(kvm))
288		gmap_free(kvm->arch.gmap);
 
 
 
 
289}
290
291/* Section: vcpu related */
292int kvm_arch_vcpu_init(struct kvm_vcpu *vcpu)
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
293{
294	if (kvm_is_ucontrol(vcpu->kvm)) {
295		vcpu->arch.gmap = gmap_alloc(current->mm);
296		if (!vcpu->arch.gmap)
297			return -ENOMEM;
298		return 0;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
299	}
 
 
 
 
 
 
 
 
 
 
 
 
300
301	vcpu->arch.gmap = vcpu->kvm->arch.gmap;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
302	vcpu->run->kvm_valid_regs = KVM_SYNC_PREFIX |
303				    KVM_SYNC_GPRS |
304				    KVM_SYNC_ACRS |
305				    KVM_SYNC_CRS;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
306	return 0;
307}
308
309void kvm_arch_vcpu_uninit(struct kvm_vcpu *vcpu)
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
310{
311	/* Nothing todo */
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
312}
313
314void kvm_arch_vcpu_load(struct kvm_vcpu *vcpu, int cpu)
315{
316	save_fp_regs(&vcpu->arch.host_fpregs);
317	save_access_regs(vcpu->arch.host_acrs);
318	vcpu->arch.guest_fpregs.fpc &= FPC_VALID_MASK;
319	restore_fp_regs(&vcpu->arch.guest_fpregs);
320	restore_access_regs(vcpu->run->s.regs.acrs);
321	gmap_enable(vcpu->arch.gmap);
322	atomic_set_mask(CPUSTAT_RUNNING, &vcpu->arch.sie_block->cpuflags);
323}
324
325void kvm_arch_vcpu_put(struct kvm_vcpu *vcpu)
326{
327	atomic_clear_mask(CPUSTAT_RUNNING, &vcpu->arch.sie_block->cpuflags);
328	gmap_disable(vcpu->arch.gmap);
329	save_fp_regs(&vcpu->arch.guest_fpregs);
330	save_access_regs(vcpu->run->s.regs.acrs);
331	restore_fp_regs(&vcpu->arch.host_fpregs);
332	restore_access_regs(vcpu->arch.host_acrs);
 
333}
334
335static void kvm_s390_vcpu_initial_reset(struct kvm_vcpu *vcpu)
336{
337	/* this equals initial cpu reset in pop, but we don't switch to ESA */
338	vcpu->arch.sie_block->gpsw.mask = 0UL;
339	vcpu->arch.sie_block->gpsw.addr = 0UL;
340	kvm_s390_set_prefix(vcpu, 0);
341	vcpu->arch.sie_block->cputm     = 0UL;
342	vcpu->arch.sie_block->ckc       = 0UL;
343	vcpu->arch.sie_block->todpr     = 0;
344	memset(vcpu->arch.sie_block->gcr, 0, 16 * sizeof(__u64));
345	vcpu->arch.sie_block->gcr[0]  = 0xE0UL;
346	vcpu->arch.sie_block->gcr[14] = 0xC2000000UL;
347	vcpu->arch.guest_fpregs.fpc = 0;
348	asm volatile("lfpc %0" : : "Q" (vcpu->arch.guest_fpregs.fpc));
 
349	vcpu->arch.sie_block->gbea = 1;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
350}
351
352int kvm_arch_vcpu_setup(struct kvm_vcpu *vcpu)
353{
 
 
354	atomic_set(&vcpu->arch.sie_block->cpuflags, CPUSTAT_ZARCH |
355						    CPUSTAT_SM |
356						    CPUSTAT_STOPPED);
357	vcpu->arch.sie_block->ecb   = 6;
358	vcpu->arch.sie_block->eca   = 0xC1002001U;
359	vcpu->arch.sie_block->fac   = (int) (long) facilities;
360	hrtimer_init(&vcpu->arch.ckc_timer, CLOCK_REALTIME, HRTIMER_MODE_ABS);
361	tasklet_init(&vcpu->arch.tasklet, kvm_s390_tasklet,
362		     (unsigned long) vcpu);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
363	vcpu->arch.ckc_timer.function = kvm_s390_idle_wakeup;
364	get_cpu_id(&vcpu->arch.cpu_id);
365	vcpu->arch.cpu_id.version = 0xff;
366	return 0;
 
367}
368
369struct kvm_vcpu *kvm_arch_vcpu_create(struct kvm *kvm,
370				      unsigned int id)
371{
372	struct kvm_vcpu *vcpu;
 
373	int rc = -EINVAL;
374
375	if (id >= KVM_MAX_VCPUS)
376		goto out;
377
378	rc = -ENOMEM;
379
380	vcpu = kzalloc(sizeof(struct kvm_vcpu), GFP_KERNEL);
381	if (!vcpu)
382		goto out;
383
384	vcpu->arch.sie_block = (struct kvm_s390_sie_block *)
385					get_zeroed_page(GFP_KERNEL);
 
386
387	if (!vcpu->arch.sie_block)
388		goto out_free_cpu;
 
 
 
 
389
390	vcpu->arch.sie_block->icpua = id;
391	if (!kvm_is_ucontrol(kvm)) {
392		if (!kvm->arch.sca) {
393			WARN_ON_ONCE(1);
394			goto out_free_cpu;
395		}
396		if (!kvm->arch.sca->cpu[id].sda)
397			kvm->arch.sca->cpu[id].sda =
398				(__u64) vcpu->arch.sie_block;
399		vcpu->arch.sie_block->scaoh =
400			(__u32)(((__u64)kvm->arch.sca) >> 32);
401		vcpu->arch.sie_block->scaol = (__u32)(__u64)kvm->arch.sca;
402		set_bit(63 - id, (unsigned long *) &kvm->arch.sca->mcn);
403	}
404
405	spin_lock_init(&vcpu->arch.local_int.lock);
406	INIT_LIST_HEAD(&vcpu->arch.local_int.list);
407	vcpu->arch.local_int.float_int = &kvm->arch.float_int;
408	spin_lock(&kvm->arch.float_int.lock);
409	kvm->arch.float_int.local_int[id] = &vcpu->arch.local_int;
410	init_waitqueue_head(&vcpu->arch.local_int.wq);
411	vcpu->arch.local_int.cpuflags = &vcpu->arch.sie_block->cpuflags;
412	spin_unlock(&kvm->arch.float_int.lock);
413
414	rc = kvm_vcpu_init(vcpu, kvm, id);
415	if (rc)
416		goto out_free_sie_block;
417	VM_EVENT(kvm, 3, "create cpu %d at %p, sie block at %p", id, vcpu,
418		 vcpu->arch.sie_block);
 
419
420	return vcpu;
421out_free_sie_block:
422	free_page((unsigned long)(vcpu->arch.sie_block));
423out_free_cpu:
424	kfree(vcpu);
425out:
426	return ERR_PTR(rc);
427}
428
429int kvm_arch_vcpu_runnable(struct kvm_vcpu *vcpu)
430{
431	/* kvm common code refers to this, but never calls it */
432	BUG();
433	return 0;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
434}
435
436int kvm_arch_vcpu_should_kick(struct kvm_vcpu *vcpu)
437{
438	/* kvm common code refers to this, but never calls it */
439	BUG();
440	return 0;
441}
442
443static int kvm_arch_vcpu_ioctl_get_one_reg(struct kvm_vcpu *vcpu,
444					   struct kvm_one_reg *reg)
445{
446	int r = -EINVAL;
447
448	switch (reg->id) {
449	case KVM_REG_S390_TODPR:
450		r = put_user(vcpu->arch.sie_block->todpr,
451			     (u32 __user *)reg->addr);
452		break;
453	case KVM_REG_S390_EPOCHDIFF:
454		r = put_user(vcpu->arch.sie_block->epoch,
455			     (u64 __user *)reg->addr);
456		break;
457	case KVM_REG_S390_CPU_TIMER:
458		r = put_user(vcpu->arch.sie_block->cputm,
459			     (u64 __user *)reg->addr);
460		break;
461	case KVM_REG_S390_CLOCK_COMP:
462		r = put_user(vcpu->arch.sie_block->ckc,
463			     (u64 __user *)reg->addr);
464		break;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
465	default:
466		break;
467	}
468
469	return r;
470}
471
472static int kvm_arch_vcpu_ioctl_set_one_reg(struct kvm_vcpu *vcpu,
473					   struct kvm_one_reg *reg)
474{
475	int r = -EINVAL;
 
476
477	switch (reg->id) {
478	case KVM_REG_S390_TODPR:
479		r = get_user(vcpu->arch.sie_block->todpr,
480			     (u32 __user *)reg->addr);
481		break;
482	case KVM_REG_S390_EPOCHDIFF:
483		r = get_user(vcpu->arch.sie_block->epoch,
484			     (u64 __user *)reg->addr);
485		break;
486	case KVM_REG_S390_CPU_TIMER:
487		r = get_user(vcpu->arch.sie_block->cputm,
488			     (u64 __user *)reg->addr);
 
489		break;
490	case KVM_REG_S390_CLOCK_COMP:
491		r = get_user(vcpu->arch.sie_block->ckc,
492			     (u64 __user *)reg->addr);
493		break;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
494	default:
495		break;
496	}
497
498	return r;
499}
500
501static int kvm_arch_vcpu_ioctl_initial_reset(struct kvm_vcpu *vcpu)
502{
503	kvm_s390_vcpu_initial_reset(vcpu);
504	return 0;
505}
506
507int kvm_arch_vcpu_ioctl_set_regs(struct kvm_vcpu *vcpu, struct kvm_regs *regs)
508{
509	memcpy(&vcpu->run->s.regs.gprs, &regs->gprs, sizeof(regs->gprs));
510	return 0;
511}
512
513int kvm_arch_vcpu_ioctl_get_regs(struct kvm_vcpu *vcpu, struct kvm_regs *regs)
514{
515	memcpy(&regs->gprs, &vcpu->run->s.regs.gprs, sizeof(regs->gprs));
516	return 0;
517}
518
519int kvm_arch_vcpu_ioctl_set_sregs(struct kvm_vcpu *vcpu,
520				  struct kvm_sregs *sregs)
521{
522	memcpy(&vcpu->run->s.regs.acrs, &sregs->acrs, sizeof(sregs->acrs));
523	memcpy(&vcpu->arch.sie_block->gcr, &sregs->crs, sizeof(sregs->crs));
524	restore_access_regs(vcpu->run->s.regs.acrs);
525	return 0;
526}
527
528int kvm_arch_vcpu_ioctl_get_sregs(struct kvm_vcpu *vcpu,
529				  struct kvm_sregs *sregs)
530{
531	memcpy(&sregs->acrs, &vcpu->run->s.regs.acrs, sizeof(sregs->acrs));
532	memcpy(&sregs->crs, &vcpu->arch.sie_block->gcr, sizeof(sregs->crs));
533	return 0;
534}
535
536int kvm_arch_vcpu_ioctl_set_fpu(struct kvm_vcpu *vcpu, struct kvm_fpu *fpu)
537{
538	memcpy(&vcpu->arch.guest_fpregs.fprs, &fpu->fprs, sizeof(fpu->fprs));
539	vcpu->arch.guest_fpregs.fpc = fpu->fpc & FPC_VALID_MASK;
540	restore_fp_regs(&vcpu->arch.guest_fpregs);
 
 
 
 
 
541	return 0;
542}
543
544int kvm_arch_vcpu_ioctl_get_fpu(struct kvm_vcpu *vcpu, struct kvm_fpu *fpu)
545{
546	memcpy(&fpu->fprs, &vcpu->arch.guest_fpregs.fprs, sizeof(fpu->fprs));
547	fpu->fpc = vcpu->arch.guest_fpregs.fpc;
 
 
 
 
 
 
548	return 0;
549}
550
551static int kvm_arch_vcpu_ioctl_set_initial_psw(struct kvm_vcpu *vcpu, psw_t psw)
552{
553	int rc = 0;
554
555	if (!(atomic_read(&vcpu->arch.sie_block->cpuflags) & CPUSTAT_STOPPED))
556		rc = -EBUSY;
557	else {
558		vcpu->run->psw_mask = psw.mask;
559		vcpu->run->psw_addr = psw.addr;
560	}
561	return rc;
562}
563
564int kvm_arch_vcpu_ioctl_translate(struct kvm_vcpu *vcpu,
565				  struct kvm_translation *tr)
566{
567	return -EINVAL; /* not implemented yet */
568}
569
 
 
 
 
570int kvm_arch_vcpu_ioctl_set_guest_debug(struct kvm_vcpu *vcpu,
571					struct kvm_guest_debug *dbg)
572{
573	return -EINVAL; /* not implemented yet */
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
574}
575
576int kvm_arch_vcpu_ioctl_get_mpstate(struct kvm_vcpu *vcpu,
577				    struct kvm_mp_state *mp_state)
578{
579	return -EINVAL; /* not implemented yet */
 
 
580}
581
582int kvm_arch_vcpu_ioctl_set_mpstate(struct kvm_vcpu *vcpu,
583				    struct kvm_mp_state *mp_state)
584{
585	return -EINVAL; /* not implemented yet */
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
586}
587
588static int __vcpu_run(struct kvm_vcpu *vcpu)
589{
 
 
590	int rc;
591
592	memcpy(&vcpu->arch.sie_block->gg14, &vcpu->run->s.regs.gprs[14], 16);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
593
594	if (need_resched())
595		schedule();
596
597	if (test_thread_flag(TIF_MCCK_PENDING))
598		s390_handle_mcck();
599
600	if (!kvm_is_ucontrol(vcpu->kvm))
601		kvm_s390_deliver_pending_interrupts(vcpu);
 
 
 
 
 
 
 
 
 
 
 
 
602
603	vcpu->arch.sie_block->icptcode = 0;
604	local_irq_disable();
605	kvm_guest_enter();
606	local_irq_enable();
607	VCPU_EVENT(vcpu, 6, "entering sie flags %x",
608		   atomic_read(&vcpu->arch.sie_block->cpuflags));
609	rc = sie64a(vcpu->arch.sie_block, vcpu->run->s.regs.gprs);
610	if (rc) {
611		if (kvm_is_ucontrol(vcpu->kvm)) {
612			rc = SIE_INTERCEPT_UCONTROL;
613		} else {
614			VCPU_EVENT(vcpu, 3, "%s", "fault in sie instruction");
615			kvm_s390_inject_program_int(vcpu, PGM_ADDRESSING);
616			rc = 0;
617		}
618	}
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
619	VCPU_EVENT(vcpu, 6, "exit sie icptcode %d",
620		   vcpu->arch.sie_block->icptcode);
621	local_irq_disable();
622	kvm_guest_exit();
623	local_irq_enable();
 
624
625	memcpy(&vcpu->run->s.regs.gprs[14], &vcpu->arch.sie_block->gg14, 16);
626	return rc;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
627}
628
629int kvm_arch_vcpu_ioctl_run(struct kvm_vcpu *vcpu, struct kvm_run *kvm_run)
630{
631	int rc;
632	sigset_t sigsaved;
 
 
 
 
 
633
634rerun_vcpu:
635	if (vcpu->sigset_active)
636		sigprocmask(SIG_SETMASK, &vcpu->sigset, &sigsaved);
 
637
638	atomic_clear_mask(CPUSTAT_STOPPED, &vcpu->arch.sie_block->cpuflags);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
639
640	BUG_ON(vcpu->kvm->arch.float_int.local_int[vcpu->vcpu_id] == NULL);
 
641
642	switch (kvm_run->exit_reason) {
643	case KVM_EXIT_S390_SIEIC:
644	case KVM_EXIT_UNKNOWN:
645	case KVM_EXIT_INTR:
646	case KVM_EXIT_S390_RESET:
647	case KVM_EXIT_S390_UCONTROL:
648		break;
649	default:
650		BUG();
651	}
652
 
 
653	vcpu->arch.sie_block->gpsw.mask = kvm_run->psw_mask;
654	vcpu->arch.sie_block->gpsw.addr = kvm_run->psw_addr;
655	if (kvm_run->kvm_dirty_regs & KVM_SYNC_PREFIX) {
656		kvm_run->kvm_dirty_regs &= ~KVM_SYNC_PREFIX;
657		kvm_s390_set_prefix(vcpu, kvm_run->s.regs.prefix);
658	}
659	if (kvm_run->kvm_dirty_regs & KVM_SYNC_CRS) {
660		kvm_run->kvm_dirty_regs &= ~KVM_SYNC_CRS;
661		memcpy(&vcpu->arch.sie_block->gcr, &kvm_run->s.regs.crs, 128);
662		kvm_s390_set_prefix(vcpu, kvm_run->s.regs.prefix);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
663	}
664
665	might_fault();
 
 
 
 
 
 
 
 
 
666
667	do {
668		rc = __vcpu_run(vcpu);
669		if (rc)
670			break;
671		if (kvm_is_ucontrol(vcpu->kvm))
672			rc = -EOPNOTSUPP;
673		else
674			rc = kvm_handle_sie_intercept(vcpu);
675	} while (!signal_pending(current) && !rc);
676
677	if (rc == SIE_INTERCEPT_RERUNVCPU)
678		goto rerun_vcpu;
679
680	if (signal_pending(current) && !rc) {
681		kvm_run->exit_reason = KVM_EXIT_INTR;
682		rc = -EINTR;
683	}
684
685#ifdef CONFIG_KVM_S390_UCONTROL
686	if (rc == SIE_INTERCEPT_UCONTROL) {
687		kvm_run->exit_reason = KVM_EXIT_S390_UCONTROL;
688		kvm_run->s390_ucontrol.trans_exc_code =
689			current->thread.gmap_addr;
690		kvm_run->s390_ucontrol.pgm_code = 0x10;
691		rc = 0;
692	}
693#endif
694
695	if (rc == -EOPNOTSUPP) {
696		/* intercept cannot be handled in-kernel, prepare kvm-run */
697		kvm_run->exit_reason         = KVM_EXIT_S390_SIEIC;
698		kvm_run->s390_sieic.icptcode = vcpu->arch.sie_block->icptcode;
699		kvm_run->s390_sieic.ipa      = vcpu->arch.sie_block->ipa;
700		kvm_run->s390_sieic.ipb      = vcpu->arch.sie_block->ipb;
701		rc = 0;
702	}
703
704	if (rc == -EREMOTE) {
705		/* intercept was handled, but userspace support is needed
706		 * kvm_run has been prepared by the handler */
707		rc = 0;
708	}
709
710	kvm_run->psw_mask     = vcpu->arch.sie_block->gpsw.mask;
711	kvm_run->psw_addr     = vcpu->arch.sie_block->gpsw.addr;
712	kvm_run->s.regs.prefix = vcpu->arch.sie_block->prefix;
713	memcpy(&kvm_run->s.regs.crs, &vcpu->arch.sie_block->gcr, 128);
714
715	if (vcpu->sigset_active)
716		sigprocmask(SIG_SETMASK, &sigsaved, NULL);
717
718	vcpu->stat.exit_userspace++;
719	return rc;
720}
721
722static int __guestcopy(struct kvm_vcpu *vcpu, u64 guestdest, void *from,
723		       unsigned long n, int prefix)
724{
725	if (prefix)
726		return copy_to_guest(vcpu, guestdest, from, n);
727	else
728		return copy_to_guest_absolute(vcpu, guestdest, from, n);
729}
730
731/*
732 * store status at address
733 * we use have two special cases:
734 * KVM_S390_STORE_STATUS_NOADDR: -> 0x1200 on 64 bit
735 * KVM_S390_STORE_STATUS_PREFIXED: -> prefix
736 */
737int kvm_s390_vcpu_store_status(struct kvm_vcpu *vcpu, unsigned long addr)
738{
739	unsigned char archmode = 1;
740	int prefix;
 
 
 
741
742	if (addr == KVM_S390_STORE_STATUS_NOADDR) {
743		if (copy_to_guest_absolute(vcpu, 163ul, &archmode, 1))
 
744			return -EFAULT;
745		addr = SAVE_AREA_BASE;
746		prefix = 0;
747	} else if (addr == KVM_S390_STORE_STATUS_PREFIXED) {
748		if (copy_to_guest(vcpu, 163ul, &archmode, 1))
749			return -EFAULT;
750		addr = SAVE_AREA_BASE;
751		prefix = 1;
752	} else
753		prefix = 0;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
754
755	if (__guestcopy(vcpu, addr + offsetof(struct save_area, fp_regs),
756			vcpu->arch.guest_fpregs.fprs, 128, prefix))
757		return -EFAULT;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
758
759	if (__guestcopy(vcpu, addr + offsetof(struct save_area, gp_regs),
760			vcpu->run->s.regs.gprs, 128, prefix))
761		return -EFAULT;
 
 
 
 
 
762
763	if (__guestcopy(vcpu, addr + offsetof(struct save_area, psw),
764			&vcpu->arch.sie_block->gpsw, 16, prefix))
765		return -EFAULT;
766
767	if (__guestcopy(vcpu, addr + offsetof(struct save_area, pref_reg),
768			&vcpu->arch.sie_block->prefix, 4, prefix))
769		return -EFAULT;
770
771	if (__guestcopy(vcpu,
772			addr + offsetof(struct save_area, fp_ctrl_reg),
773			&vcpu->arch.guest_fpregs.fpc, 4, prefix))
774		return -EFAULT;
 
775
776	if (__guestcopy(vcpu, addr + offsetof(struct save_area, tod_reg),
777			&vcpu->arch.sie_block->todpr, 4, prefix))
778		return -EFAULT;
779
780	if (__guestcopy(vcpu, addr + offsetof(struct save_area, timer),
781			&vcpu->arch.sie_block->cputm, 8, prefix))
782		return -EFAULT;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
783
784	if (__guestcopy(vcpu, addr + offsetof(struct save_area, clk_cmp),
785			&vcpu->arch.sie_block->ckc, 8, prefix))
786		return -EFAULT;
787
788	if (__guestcopy(vcpu, addr + offsetof(struct save_area, acc_regs),
789			&vcpu->run->s.regs.acrs, 64, prefix))
790		return -EFAULT;
791
792	if (__guestcopy(vcpu,
793			addr + offsetof(struct save_area, ctrl_regs),
794			&vcpu->arch.sie_block->gcr, 128, prefix))
795		return -EFAULT;
796	return 0;
797}
798
799long kvm_arch_vcpu_ioctl(struct file *filp,
800			 unsigned int ioctl, unsigned long arg)
801{
802	struct kvm_vcpu *vcpu = filp->private_data;
803	void __user *argp = (void __user *)arg;
 
804	long r;
805
806	switch (ioctl) {
 
 
 
 
 
 
 
 
 
807	case KVM_S390_INTERRUPT: {
808		struct kvm_s390_interrupt s390int;
 
809
810		r = -EFAULT;
811		if (copy_from_user(&s390int, argp, sizeof(s390int)))
812			break;
813		r = kvm_s390_inject_vcpu(vcpu, &s390int);
 
 
814		break;
815	}
816	case KVM_S390_STORE_STATUS:
 
817		r = kvm_s390_vcpu_store_status(vcpu, arg);
 
818		break;
819	case KVM_S390_SET_INITIAL_PSW: {
820		psw_t psw;
821
822		r = -EFAULT;
823		if (copy_from_user(&psw, argp, sizeof(psw)))
824			break;
825		r = kvm_arch_vcpu_ioctl_set_initial_psw(vcpu, psw);
826		break;
827	}
828	case KVM_S390_INITIAL_RESET:
829		r = kvm_arch_vcpu_ioctl_initial_reset(vcpu);
830		break;
831	case KVM_SET_ONE_REG:
832	case KVM_GET_ONE_REG: {
833		struct kvm_one_reg reg;
834		r = -EFAULT;
835		if (copy_from_user(&reg, argp, sizeof(reg)))
836			break;
837		if (ioctl == KVM_SET_ONE_REG)
838			r = kvm_arch_vcpu_ioctl_set_one_reg(vcpu, &reg);
839		else
840			r = kvm_arch_vcpu_ioctl_get_one_reg(vcpu, &reg);
841		break;
842	}
843#ifdef CONFIG_KVM_S390_UCONTROL
844	case KVM_S390_UCAS_MAP: {
845		struct kvm_s390_ucas_mapping ucasmap;
846
847		if (copy_from_user(&ucasmap, argp, sizeof(ucasmap))) {
848			r = -EFAULT;
849			break;
850		}
851
852		if (!kvm_is_ucontrol(vcpu->kvm)) {
853			r = -EINVAL;
854			break;
855		}
856
857		r = gmap_map_segment(vcpu->arch.gmap, ucasmap.user_addr,
858				     ucasmap.vcpu_addr, ucasmap.length);
859		break;
860	}
861	case KVM_S390_UCAS_UNMAP: {
862		struct kvm_s390_ucas_mapping ucasmap;
863
864		if (copy_from_user(&ucasmap, argp, sizeof(ucasmap))) {
865			r = -EFAULT;
866			break;
867		}
868
869		if (!kvm_is_ucontrol(vcpu->kvm)) {
870			r = -EINVAL;
871			break;
872		}
873
874		r = gmap_unmap_segment(vcpu->arch.gmap, ucasmap.vcpu_addr,
875			ucasmap.length);
876		break;
877	}
878#endif
879	case KVM_S390_VCPU_FAULT: {
880		r = gmap_fault(arg, vcpu->arch.gmap);
881		if (!IS_ERR_VALUE(r))
882			r = 0;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
883		break;
884	}
885	default:
886		r = -ENOTTY;
887	}
888	return r;
889}
890
891int kvm_arch_vcpu_fault(struct kvm_vcpu *vcpu, struct vm_fault *vmf)
892{
893#ifdef CONFIG_KVM_S390_UCONTROL
894	if ((vmf->pgoff == KVM_S390_SIE_PAGE_OFFSET)
895		 && (kvm_is_ucontrol(vcpu->kvm))) {
896		vmf->page = virt_to_page(vcpu->arch.sie_block);
897		get_page(vmf->page);
898		return 0;
899	}
900#endif
901	return VM_FAULT_SIGBUS;
902}
903
904void kvm_arch_free_memslot(struct kvm_memory_slot *free,
905			   struct kvm_memory_slot *dont)
906{
907}
908
909int kvm_arch_create_memslot(struct kvm_memory_slot *slot, unsigned long npages)
910{
911	return 0;
912}
913
914/* Section: memory related */
915int kvm_arch_prepare_memory_region(struct kvm *kvm,
916				   struct kvm_memory_slot *memslot,
917				   struct kvm_memory_slot old,
918				   struct kvm_userspace_memory_region *mem,
919				   int user_alloc)
920{
921	/* A few sanity checks. We can have exactly one memory slot which has
922	   to start at guest virtual zero and which has to be located at a
923	   page boundary in userland and which has to end at a page boundary.
924	   The memory in userland is ok to be fragmented into various different
925	   vmas. It is okay to mmap() and munmap() stuff in this slot after
926	   doing this call at any time */
927
928	if (mem->slot)
929		return -EINVAL;
930
931	if (mem->guest_phys_addr)
932		return -EINVAL;
933
934	if (mem->userspace_addr & 0xffffful)
935		return -EINVAL;
936
937	if (mem->memory_size & 0xffffful)
938		return -EINVAL;
939
940	if (!user_alloc)
941		return -EINVAL;
942
943	return 0;
944}
945
946void kvm_arch_commit_memory_region(struct kvm *kvm,
947				struct kvm_userspace_memory_region *mem,
948				struct kvm_memory_slot old,
949				int user_alloc)
 
950{
951	int rc;
952
 
 
 
 
 
 
 
 
 
 
953
954	rc = gmap_map_segment(kvm->arch.gmap, mem->userspace_addr,
955		mem->guest_phys_addr, mem->memory_size);
956	if (rc)
957		printk(KERN_WARNING "kvm-s390: failed to commit memory region\n");
958	return;
959}
960
961void kvm_arch_flush_shadow(struct kvm *kvm)
 
 
 
 
 
 
 
962{
 
963}
964
965static int __init kvm_s390_init(void)
966{
967	int ret;
968	ret = kvm_init(NULL, sizeof(struct kvm_vcpu), 0, THIS_MODULE);
969	if (ret)
970		return ret;
971
972	/*
973	 * guests can ask for up to 255+1 double words, we need a full page
974	 * to hold the maximum amount of facilities. On the other hand, we
975	 * only set facilities that are known to work in KVM.
976	 */
977	facilities = (unsigned long long *) get_zeroed_page(GFP_KERNEL|GFP_DMA);
978	if (!facilities) {
979		kvm_exit();
980		return -ENOMEM;
981	}
982	memcpy(facilities, S390_lowcore.stfle_fac_list, 16);
983	facilities[0] &= 0xff00fff3f47c0000ULL;
984	facilities[1] &= 0x201c000000000000ULL;
985	return 0;
 
 
986}
987
988static void __exit kvm_s390_exit(void)
989{
990	free_page((unsigned long) facilities);
991	kvm_exit();
992}
993
994module_init(kvm_s390_init);
995module_exit(kvm_s390_exit);