File Index
Files and directories
Sign in
FILE

interrupt.c

File preview with syntax highlighting.

linux-6.19.14/arch/s390/kvm/interrupt.c C
   1// SPDX-License-Identifier: GPL-2.0
   2/*
   3 * handling kvm guest interrupts
   4 *
   5 * Copyright IBM Corp. 2008, 2020
   6 *
   7 *    Author(s): Carsten Otte <cotte@de.ibm.com>
   8 */
   9
  10#define pr_fmt(fmt) "kvm-s390: " fmt
  11
  12#include <linux/cpufeature.h>
  13#include <linux/interrupt.h>
  14#include <linux/kvm_host.h>
  15#include <linux/hrtimer.h>
  16#include <linux/export.h>
  17#include <linux/mmu_context.h>
  18#include <linux/nospec.h>
  19#include <linux/signal.h>
  20#include <linux/slab.h>
  21#include <linux/bitmap.h>
  22#include <linux/vmalloc.h>
  23#include <asm/access-regs.h>
  24#include <asm/asm-offsets.h>
  25#include <asm/dis.h>
  26#include <linux/uaccess.h>
  27#include <asm/sclp.h>
  28#include <asm/isc.h>
  29#include <asm/gmap.h>
  30#include <asm/nmi.h>
  31#include <asm/airq.h>
  32#include <asm/tpi.h>
  33#include "kvm-s390.h"
  34#include "gaccess.h"
  35#include "trace-s390.h"
  36#include "pci.h"
  37
  38#define PFAULT_INIT 0x0600
  39#define PFAULT_DONE 0x0680
  40#define VIRTIO_PARAM 0x0d00
  41
  42static struct kvm_s390_gib *gib;
  43
  44/* handle external calls via sigp interpretation facility */
  45static int sca_ext_call_pending(struct kvm_vcpu *vcpu, int *src_id)
  46{
  47	struct esca_block *sca = vcpu->kvm->arch.sca;
  48	union esca_sigp_ctrl sigp_ctrl = sca->cpu[vcpu->vcpu_id].sigp_ctrl;
  49
  50	if (!kvm_s390_test_cpuflags(vcpu, CPUSTAT_ECALL_PEND))
  51		return 0;
  52
  53	BUG_ON(!kvm_s390_use_sca_entries());
  54
  55	if (src_id)
  56		*src_id = sigp_ctrl.scn;
  57
  58	return sigp_ctrl.c;
  59}
  60
  61static int sca_inject_ext_call(struct kvm_vcpu *vcpu, int src_id)
  62{
  63	struct esca_block *sca = vcpu->kvm->arch.sca;
  64	union esca_sigp_ctrl *sigp_ctrl = &sca->cpu[vcpu->vcpu_id].sigp_ctrl;
  65	union esca_sigp_ctrl old_val, new_val = {.scn = src_id, .c = 1};
  66	int expect, rc;
  67
  68	BUG_ON(!kvm_s390_use_sca_entries());
  69
  70	old_val = READ_ONCE(*sigp_ctrl);
  71	old_val.c = 0;
  72
  73	expect = old_val.value;
  74	rc = cmpxchg(&sigp_ctrl->value, old_val.value, new_val.value);
  75
  76	if (rc != expect) {
  77		/* another external call is pending */
  78		return -EBUSY;
  79	}
  80	kvm_s390_set_cpuflags(vcpu, CPUSTAT_ECALL_PEND);
  81	return 0;
  82}
  83
  84static void sca_clear_ext_call(struct kvm_vcpu *vcpu)
  85{
  86	struct esca_block *sca = vcpu->kvm->arch.sca;
  87	union esca_sigp_ctrl *sigp_ctrl = &sca->cpu[vcpu->vcpu_id].sigp_ctrl;
  88
  89	if (!kvm_s390_use_sca_entries())
  90		return;
  91	kvm_s390_clear_cpuflags(vcpu, CPUSTAT_ECALL_PEND);
  92
  93	WRITE_ONCE(sigp_ctrl->value, 0);
  94}
  95
  96int psw_extint_disabled(struct kvm_vcpu *vcpu)
  97{
  98	return !(vcpu->arch.sie_block->gpsw.mask & PSW_MASK_EXT);
  99}
 100
 101static int psw_ioint_disabled(struct kvm_vcpu *vcpu)
 102{
 103	return !(vcpu->arch.sie_block->gpsw.mask & PSW_MASK_IO);
 104}
 105
 106static int psw_mchk_disabled(struct kvm_vcpu *vcpu)
 107{
 108	return !(vcpu->arch.sie_block->gpsw.mask & PSW_MASK_MCHECK);
 109}
 110
 111static int psw_interrupts_disabled(struct kvm_vcpu *vcpu)
 112{
 113	return psw_extint_disabled(vcpu) &&
 114	       psw_ioint_disabled(vcpu) &&
 115	       psw_mchk_disabled(vcpu);
 116}
 117
 118static int ckc_interrupts_enabled(struct kvm_vcpu *vcpu)
 119{
 120	if (psw_extint_disabled(vcpu) ||
 121	    !(vcpu->arch.sie_block->gcr[0] & CR0_CLOCK_COMPARATOR_SUBMASK))
 122		return 0;
 123	if (guestdbg_enabled(vcpu) && guestdbg_sstep_enabled(vcpu))
 124		/* No timer interrupts when single stepping */
 125		return 0;
 126	return 1;
 127}
 128
 129static int ckc_irq_pending(struct kvm_vcpu *vcpu)
 130{
 131	const u64 now = kvm_s390_get_tod_clock_fast(vcpu->kvm);
 132	const u64 ckc = vcpu->arch.sie_block->ckc;
 133
 134	if (vcpu->arch.sie_block->gcr[0] & CR0_CLOCK_COMPARATOR_SIGN) {
 135		if ((s64)ckc >= (s64)now)
 136			return 0;
 137	} else if (ckc >= now) {
 138		return 0;
 139	}
 140	return ckc_interrupts_enabled(vcpu);
 141}
 142
 143static int cpu_timer_interrupts_enabled(struct kvm_vcpu *vcpu)
 144{
 145	return !psw_extint_disabled(vcpu) &&
 146	       (vcpu->arch.sie_block->gcr[0] & CR0_CPU_TIMER_SUBMASK);
 147}
 148
 149static int cpu_timer_irq_pending(struct kvm_vcpu *vcpu)
 150{
 151	if (!cpu_timer_interrupts_enabled(vcpu))
 152		return 0;
 153	return kvm_s390_get_cpu_timer(vcpu) >> 63;
 154}
 155
 156static uint64_t isc_to_isc_bits(int isc)
 157{
 158	return (0x80 >> isc) << 24;
 159}
 160
 161static inline u32 isc_to_int_word(u8 isc)
 162{
 163	return ((u32)isc << 27) | 0x80000000;
 164}
 165
 166static inline u8 int_word_to_isc(u32 int_word)
 167{
 168	return (int_word & 0x38000000) >> 27;
 169}
 170
 171/*
 172 * To use atomic bitmap functions, we have to provide a bitmap address
 173 * that is u64 aligned. However, the ipm might be u32 aligned.
 174 * Therefore, we logically start the bitmap at the very beginning of the
 175 * struct and fixup the bit number.
 176 */
 177#define IPM_BIT_OFFSET (offsetof(struct kvm_s390_gisa, ipm) * BITS_PER_BYTE)
 178
 179/**
 180 * gisa_set_iam - change the GISA interruption alert mask
 181 *
 182 * @gisa: gisa to operate on
 183 * @iam: new IAM value to use
 184 *
 185 * Change the IAM atomically with the next alert address and the IPM
 186 * of the GISA if the GISA is not part of the GIB alert list. All three
 187 * fields are located in the first long word of the GISA.
 188 *
 189 * Returns: 0 on success
 190 *          -EBUSY in case the gisa is part of the alert list
 191 */
 192static inline int gisa_set_iam(struct kvm_s390_gisa *gisa, u8 iam)
 193{
 194	u64 word, _word;
 195
 196	word = READ_ONCE(gisa->u64.word[0]);
 197	do {
 198		if ((u64)gisa != word >> 32)
 199			return -EBUSY;
 200		_word = (word & ~0xffUL) | iam;
 201	} while (!try_cmpxchg(&gisa->u64.word[0], &word, _word));
 202
 203	return 0;
 204}
 205
 206/**
 207 * gisa_clear_ipm - clear the GISA interruption pending mask
 208 *
 209 * @gisa: gisa to operate on
 210 *
 211 * Clear the IPM atomically with the next alert address and the IAM
 212 * of the GISA unconditionally. All three fields are located in the
 213 * first long word of the GISA.
 214 */
 215static inline void gisa_clear_ipm(struct kvm_s390_gisa *gisa)
 216{
 217	u64 word, _word;
 218
 219	word = READ_ONCE(gisa->u64.word[0]);
 220	do {
 221		_word = word & ~(0xffUL << 24);
 222	} while (!try_cmpxchg(&gisa->u64.word[0], &word, _word));
 223}
 224
 225/**
 226 * gisa_get_ipm_or_restore_iam - return IPM or restore GISA IAM
 227 *
 228 * @gi: gisa interrupt struct to work on
 229 *
 230 * Atomically restores the interruption alert mask if none of the
 231 * relevant ISCs are pending and return the IPM.
 232 *
 233 * Returns: the relevant pending ISCs
 234 */
 235static inline u8 gisa_get_ipm_or_restore_iam(struct kvm_s390_gisa_interrupt *gi)
 236{
 237	u8 pending_mask, alert_mask;
 238	u64 word, _word;
 239
 240	word = READ_ONCE(gi->origin->u64.word[0]);
 241	do {
 242		alert_mask = READ_ONCE(gi->alert.mask);
 243		pending_mask = (u8)(word >> 24) & alert_mask;
 244		if (pending_mask)
 245			return pending_mask;
 246		_word = (word & ~0xffUL) | alert_mask;
 247	} while (!try_cmpxchg(&gi->origin->u64.word[0], &word, _word));
 248
 249	return 0;
 250}
 251
 252static inline void gisa_set_ipm_gisc(struct kvm_s390_gisa *gisa, u32 gisc)
 253{
 254	set_bit_inv(IPM_BIT_OFFSET + gisc, (unsigned long *) gisa);
 255}
 256
 257static inline u8 gisa_get_ipm(struct kvm_s390_gisa *gisa)
 258{
 259	return READ_ONCE(gisa->ipm);
 260}
 261
 262static inline int gisa_tac_ipm_gisc(struct kvm_s390_gisa *gisa, u32 gisc)
 263{
 264	return test_and_clear_bit_inv(IPM_BIT_OFFSET + gisc, (unsigned long *) gisa);
 265}
 266
 267static inline unsigned long pending_irqs_no_gisa(struct kvm_vcpu *vcpu)
 268{
 269	unsigned long pending = vcpu->kvm->arch.float_int.pending_irqs |
 270				vcpu->arch.local_int.pending_irqs;
 271
 272	pending &= ~vcpu->kvm->arch.float_int.masked_irqs;
 273	return pending;
 274}
 275
 276static inline unsigned long pending_irqs(struct kvm_vcpu *vcpu)
 277{
 278	struct kvm_s390_gisa_interrupt *gi = &vcpu->kvm->arch.gisa_int;
 279	unsigned long pending_mask;
 280
 281	pending_mask = pending_irqs_no_gisa(vcpu);
 282	if (gi->origin)
 283		pending_mask |= gisa_get_ipm(gi->origin) << IRQ_PEND_IO_ISC_7;
 284	return pending_mask;
 285}
 286
 287static inline int isc_to_irq_type(unsigned long isc)
 288{
 289	return IRQ_PEND_IO_ISC_0 - isc;
 290}
 291
 292static inline int irq_type_to_isc(unsigned long irq_type)
 293{
 294	return IRQ_PEND_IO_ISC_0 - irq_type;
 295}
 296
 297static unsigned long disable_iscs(struct kvm_vcpu *vcpu,
 298				   unsigned long active_mask)
 299{
 300	int i;
 301
 302	for (i = 0; i <= MAX_ISC; i++)
 303		if (!(vcpu->arch.sie_block->gcr[6] & isc_to_isc_bits(i)))
 304			active_mask &= ~(1UL << (isc_to_irq_type(i)));
 305
 306	return active_mask;
 307}
 308
 309static unsigned long deliverable_irqs(struct kvm_vcpu *vcpu)
 310{
 311	unsigned long active_mask;
 312
 313	active_mask = pending_irqs(vcpu);
 314	if (!active_mask)
 315		return 0;
 316
 317	if (psw_extint_disabled(vcpu))
 318		active_mask &= ~IRQ_PEND_EXT_MASK;
 319	if (psw_ioint_disabled(vcpu))
 320		active_mask &= ~IRQ_PEND_IO_MASK;
 321	else
 322		active_mask = disable_iscs(vcpu, active_mask);
 323	if (!(vcpu->arch.sie_block->gcr[0] & CR0_EXTERNAL_CALL_SUBMASK))
 324		__clear_bit(IRQ_PEND_EXT_EXTERNAL, &active_mask);
 325	if (!(vcpu->arch.sie_block->gcr[0] & CR0_EMERGENCY_SIGNAL_SUBMASK))
 326		__clear_bit(IRQ_PEND_EXT_EMERGENCY, &active_mask);
 327	if (!(vcpu->arch.sie_block->gcr[0] & CR0_CLOCK_COMPARATOR_SUBMASK))
 328		__clear_bit(IRQ_PEND_EXT_CLOCK_COMP, &active_mask);
 329	if (!(vcpu->arch.sie_block->gcr[0] & CR0_CPU_TIMER_SUBMASK))
 330		__clear_bit(IRQ_PEND_EXT_CPU_TIMER, &active_mask);
 331	if (!(vcpu->arch.sie_block->gcr[0] & CR0_SERVICE_SIGNAL_SUBMASK)) {
 332		__clear_bit(IRQ_PEND_EXT_SERVICE, &active_mask);
 333		__clear_bit(IRQ_PEND_EXT_SERVICE_EV, &active_mask);
 334	}
 335	if (psw_mchk_disabled(vcpu))
 336		active_mask &= ~IRQ_PEND_MCHK_MASK;
 337	/* PV guest cpus can have a single interruption injected at a time. */
 338	if (kvm_s390_pv_cpu_get_handle(vcpu) &&
 339	    vcpu->arch.sie_block->iictl != IICTL_CODE_NONE)
 340		active_mask &= ~(IRQ_PEND_EXT_II_MASK |
 341				 IRQ_PEND_IO_MASK |
 342				 IRQ_PEND_MCHK_MASK);
 343	/*
 344	 * Check both floating and local interrupt's cr14 because
 345	 * bit IRQ_PEND_MCHK_REP could be set in both cases.
 346	 */
 347	if (!(vcpu->arch.sie_block->gcr[14] &
 348	   (vcpu->kvm->arch.float_int.mchk.cr14 |
 349	   vcpu->arch.local_int.irq.mchk.cr14)))
 350		__clear_bit(IRQ_PEND_MCHK_REP, &active_mask);
 351
 352	/*
 353	 * STOP irqs will never be actively delivered. They are triggered via
 354	 * intercept requests and cleared when the stop intercept is performed.
 355	 */
 356	__clear_bit(IRQ_PEND_SIGP_STOP, &active_mask);
 357
 358	return active_mask;
 359}
 360
 361static void __set_cpu_idle(struct kvm_vcpu *vcpu)
 362{
 363	kvm_s390_set_cpuflags(vcpu, CPUSTAT_WAIT);
 364	set_bit(vcpu->vcpu_idx, vcpu->kvm->arch.idle_mask);
 365}
 366
 367static void __unset_cpu_idle(struct kvm_vcpu *vcpu)
 368{
 369	kvm_s390_clear_cpuflags(vcpu, CPUSTAT_WAIT);
 370	clear_bit(vcpu->vcpu_idx, vcpu->kvm->arch.idle_mask);
 371}
 372
 373static void __reset_intercept_indicators(struct kvm_vcpu *vcpu)
 374{
 375	kvm_s390_clear_cpuflags(vcpu, CPUSTAT_IO_INT | CPUSTAT_EXT_INT |
 376				      CPUSTAT_STOP_INT);
 377	vcpu->arch.sie_block->lctl = 0x0000;
 378	vcpu->arch.sie_block->ictl &= ~(ICTL_LPSW | ICTL_STCTL | ICTL_PINT);
 379
 380	if (guestdbg_enabled(vcpu)) {
 381		vcpu->arch.sie_block->lctl |= (LCTL_CR0 | LCTL_CR9 |
 382					       LCTL_CR10 | LCTL_CR11);
 383		vcpu->arch.sie_block->ictl |= (ICTL_STCTL | ICTL_PINT);
 384	}
 385}
 386
 387static void set_intercept_indicators_io(struct kvm_vcpu *vcpu)
 388{
 389	if (!(pending_irqs_no_gisa(vcpu) & IRQ_PEND_IO_MASK))
 390		return;
 391	if (psw_ioint_disabled(vcpu))
 392		kvm_s390_set_cpuflags(vcpu, CPUSTAT_IO_INT);
 393	else
 394		vcpu->arch.sie_block->lctl |= LCTL_CR6;
 395}
 396
 397static void set_intercept_indicators_ext(struct kvm_vcpu *vcpu)
 398{
 399	if (!(pending_irqs_no_gisa(vcpu) & IRQ_PEND_EXT_MASK))
 400		return;
 401	if (psw_extint_disabled(vcpu))
 402		kvm_s390_set_cpuflags(vcpu, CPUSTAT_EXT_INT);
 403	else
 404		vcpu->arch.sie_block->lctl |= LCTL_CR0;
 405}
 406
 407static void set_intercept_indicators_mchk(struct kvm_vcpu *vcpu)
 408{
 409	if (!(pending_irqs_no_gisa(vcpu) & IRQ_PEND_MCHK_MASK))
 410		return;
 411	if (psw_mchk_disabled(vcpu))
 412		vcpu->arch.sie_block->ictl |= ICTL_LPSW;
 413	else
 414		vcpu->arch.sie_block->lctl |= LCTL_CR14;
 415}
 416
 417static void set_intercept_indicators_stop(struct kvm_vcpu *vcpu)
 418{
 419	if (kvm_s390_is_stop_irq_pending(vcpu))
 420		kvm_s390_set_cpuflags(vcpu, CPUSTAT_STOP_INT);
 421}
 422
 423/* Set interception request for non-deliverable interrupts */
 424static void set_intercept_indicators(struct kvm_vcpu *vcpu)
 425{
 426	set_intercept_indicators_io(vcpu);
 427	set_intercept_indicators_ext(vcpu);
 428	set_intercept_indicators_mchk(vcpu);
 429	set_intercept_indicators_stop(vcpu);
 430}
 431
 432static int __must_check __deliver_cpu_timer(struct kvm_vcpu *vcpu)
 433{
 434	struct kvm_s390_local_interrupt *li = &vcpu->arch.local_int;
 435	int rc = 0;
 436
 437	vcpu->stat.deliver_cputm++;
 438	trace_kvm_s390_deliver_interrupt(vcpu->vcpu_id, KVM_S390_INT_CPU_TIMER,
 439					 0, 0);
 440	if (kvm_s390_pv_cpu_is_protected(vcpu)) {
 441		vcpu->arch.sie_block->iictl = IICTL_CODE_EXT;
 442		vcpu->arch.sie_block->eic = EXT_IRQ_CPU_TIMER;
 443	} else {
 444		rc  = put_guest_lc(vcpu, EXT_IRQ_CPU_TIMER,
 445				   (u16 *)__LC_EXT_INT_CODE);
 446		rc |= put_guest_lc(vcpu, 0, (u16 *)__LC_EXT_CPU_ADDR);
 447		rc |= write_guest_lc(vcpu, __LC_EXT_OLD_PSW,
 448				     &vcpu->arch.sie_block->gpsw, sizeof(psw_t));
 449		rc |= read_guest_lc(vcpu, __LC_EXT_NEW_PSW,
 450				    &vcpu->arch.sie_block->gpsw, sizeof(psw_t));
 451	}
 452	clear_bit(IRQ_PEND_EXT_CPU_TIMER, &li->pending_irqs);
 453	return rc ? -EFAULT : 0;
 454}
 455
 456static int __must_check __deliver_ckc(struct kvm_vcpu *vcpu)
 457{
 458	struct kvm_s390_local_interrupt *li = &vcpu->arch.local_int;
 459	int rc = 0;
 460
 461	vcpu->stat.deliver_ckc++;
 462	trace_kvm_s390_deliver_interrupt(vcpu->vcpu_id, KVM_S390_INT_CLOCK_COMP,
 463					 0, 0);
 464	if (kvm_s390_pv_cpu_is_protected(vcpu)) {
 465		vcpu->arch.sie_block->iictl = IICTL_CODE_EXT;
 466		vcpu->arch.sie_block->eic = EXT_IRQ_CLK_COMP;
 467	} else {
 468		rc  = put_guest_lc(vcpu, EXT_IRQ_CLK_COMP,
 469				   (u16 __user *)__LC_EXT_INT_CODE);
 470		rc |= put_guest_lc(vcpu, 0, (u16 *)__LC_EXT_CPU_ADDR);
 471		rc |= write_guest_lc(vcpu, __LC_EXT_OLD_PSW,
 472				     &vcpu->arch.sie_block->gpsw, sizeof(psw_t));
 473		rc |= read_guest_lc(vcpu, __LC_EXT_NEW_PSW,
 474				    &vcpu->arch.sie_block->gpsw, sizeof(psw_t));
 475	}
 476	clear_bit(IRQ_PEND_EXT_CLOCK_COMP, &li->pending_irqs);
 477	return rc ? -EFAULT : 0;
 478}
 479
 480static int __must_check __deliver_pfault_init(struct kvm_vcpu *vcpu)
 481{
 482	struct kvm_s390_local_interrupt *li = &vcpu->arch.local_int;
 483	struct kvm_s390_ext_info ext;
 484	int rc;
 485
 486	spin_lock(&li->lock);
 487	ext = li->irq.ext;
 488	clear_bit(IRQ_PEND_PFAULT_INIT, &li->pending_irqs);
 489	li->irq.ext.ext_params2 = 0;
 490	spin_unlock(&li->lock);
 491
 492	VCPU_EVENT(vcpu, 4, "deliver: pfault init token 0x%llx",
 493		   ext.ext_params2);
 494	trace_kvm_s390_deliver_interrupt(vcpu->vcpu_id,
 495					 KVM_S390_INT_PFAULT_INIT,
 496					 0, ext.ext_params2);
 497
 498	rc  = put_guest_lc(vcpu, EXT_IRQ_CP_SERVICE, (u16 *) __LC_EXT_INT_CODE);
 499	rc |= put_guest_lc(vcpu, PFAULT_INIT, (u16 *) __LC_EXT_CPU_ADDR);
 500	rc |= write_guest_lc(vcpu, __LC_EXT_OLD_PSW,
 501			     &vcpu->arch.sie_block->gpsw, sizeof(psw_t));
 502	rc |= read_guest_lc(vcpu, __LC_EXT_NEW_PSW,
 503			    &vcpu->arch.sie_block->gpsw, sizeof(psw_t));
 504	rc |= put_guest_lc(vcpu, ext.ext_params2, (u64 *) __LC_EXT_PARAMS2);
 505	return rc ? -EFAULT : 0;
 506}
 507
 508static int __write_machine_check(struct kvm_vcpu *vcpu,
 509				 struct kvm_s390_mchk_info *mchk)
 510{
 511	unsigned long ext_sa_addr;
 512	unsigned long lc;
 513	freg_t fprs[NUM_FPRS];
 514	union mci mci;
 515	int rc;
 516
 517	/*
 518	 * All other possible payload for a machine check (e.g. the register
 519	 * contents in the save area) will be handled by the ultravisor, as
 520	 * the hypervisor does not not have the needed information for
 521	 * protected guests.
 522	 */
 523	if (kvm_s390_pv_cpu_is_protected(vcpu)) {
 524		vcpu->arch.sie_block->iictl = IICTL_CODE_MCHK;
 525		vcpu->arch.sie_block->mcic = mchk->mcic;
 526		vcpu->arch.sie_block->faddr = mchk->failing_storage_address;
 527		vcpu->arch.sie_block->edc = mchk->ext_damage_code;
 528		return 0;
 529	}
 530
 531	mci.val = mchk->mcic;
 532	/* take care of lazy register loading */
 533	kvm_s390_fpu_store(vcpu->run);
 534	save_access_regs(vcpu->run->s.regs.acrs);
 535	if (cpu_has_gs() && vcpu->arch.gs_enabled)
 536		save_gs_cb(current->thread.gs_cb);
 537
 538	/* Extended save area */
 539	rc = read_guest_lc(vcpu, __LC_MCESAD, &ext_sa_addr,
 540			   sizeof(unsigned long));
 541	/* Only bits 0 through 63-LC are used for address formation */
 542	lc = ext_sa_addr & MCESA_LC_MASK;
 543	if (test_kvm_facility(vcpu->kvm, 133)) {
 544		switch (lc) {
 545		case 0:
 546		case 10:
 547			ext_sa_addr &= ~0x3ffUL;
 548			break;
 549		case 11:
 550			ext_sa_addr &= ~0x7ffUL;
 551			break;
 552		case 12:
 553			ext_sa_addr &= ~0xfffUL;
 554			break;
 555		default:
 556			ext_sa_addr = 0;
 557			break;
 558		}
 559	} else {
 560		ext_sa_addr &= ~0x3ffUL;
 561	}
 562
 563	if (!rc && mci.vr && ext_sa_addr && test_kvm_facility(vcpu->kvm, 129)) {
 564		if (write_guest_abs(vcpu, ext_sa_addr, vcpu->run->s.regs.vrs,
 565				    512))
 566			mci.vr = 0;
 567	} else {
 568		mci.vr = 0;
 569	}
 570	if (!rc && mci.gs && ext_sa_addr && test_kvm_facility(vcpu->kvm, 133)
 571	    && (lc == 11 || lc == 12)) {
 572		if (write_guest_abs(vcpu, ext_sa_addr + 1024,
 573				    &vcpu->run->s.regs.gscb, 32))
 574			mci.gs = 0;
 575	} else {
 576		mci.gs = 0;
 577	}
 578
 579	/* General interruption information */
 580	rc |= put_guest_lc(vcpu, 1, (u8 __user *) __LC_AR_MODE_ID);
 581	rc |= write_guest_lc(vcpu, __LC_MCK_OLD_PSW,
 582			     &vcpu->arch.sie_block->gpsw, sizeof(psw_t));
 583	rc |= read_guest_lc(vcpu, __LC_MCK_NEW_PSW,
 584			    &vcpu->arch.sie_block->gpsw, sizeof(psw_t));
 585	rc |= put_guest_lc(vcpu, mci.val, (u64 __user *) __LC_MCCK_CODE);
 586
 587	/* Register-save areas */
 588	if (cpu_has_vx()) {
 589		convert_vx_to_fp(fprs, (__vector128 *) vcpu->run->s.regs.vrs);
 590		rc |= write_guest_lc(vcpu, __LC_FPREGS_SAVE_AREA, fprs, 128);
 591	} else {
 592		rc |= write_guest_lc(vcpu, __LC_FPREGS_SAVE_AREA,
 593				     vcpu->run->s.regs.fprs, 128);
 594	}
 595	rc |= write_guest_lc(vcpu, __LC_GPREGS_SAVE_AREA,
 596			     vcpu->run->s.regs.gprs, 128);
 597	rc |= put_guest_lc(vcpu, vcpu->run->s.regs.fpc,
 598			   (u32 __user *) __LC_FP_CREG_SAVE_AREA);
 599	rc |= put_guest_lc(vcpu, vcpu->arch.sie_block->todpr,
 600			   (u32 __user *) __LC_TOD_PROGREG_SAVE_AREA);
 601	rc |= put_guest_lc(vcpu, kvm_s390_get_cpu_timer(vcpu),
 602			   (u64 __user *) __LC_CPU_TIMER_SAVE_AREA);
 603	rc |= put_guest_lc(vcpu, vcpu->arch.sie_block->ckc >> 8,
 604			   (u64 __user *) __LC_CLOCK_COMP_SAVE_AREA);
 605	rc |= write_guest_lc(vcpu, __LC_AREGS_SAVE_AREA,
 606			     &vcpu->run->s.regs.acrs, 64);
 607	rc |= write_guest_lc(vcpu, __LC_CREGS_SAVE_AREA,
 608			     &vcpu->arch.sie_block->gcr, 128);
 609
 610	/* Extended interruption information */
 611	rc |= put_guest_lc(vcpu, mchk->ext_damage_code,
 612			   (u32 __user *) __LC_EXT_DAMAGE_CODE);
 613	rc |= put_guest_lc(vcpu, mchk->failing_storage_address,
 614			   (u64 __user *) __LC_MCCK_FAIL_STOR_ADDR);
 615	rc |= write_guest_lc(vcpu, __LC_PSW_SAVE_AREA, &mchk->fixed_logout,
 616			     sizeof(mchk->fixed_logout));
 617	return rc ? -EFAULT : 0;
 618}
 619
 620static int __must_check __deliver_machine_check(struct kvm_vcpu *vcpu)
 621{
 622	struct kvm_s390_float_interrupt *fi = &vcpu->kvm->arch.float_int;
 623	struct kvm_s390_local_interrupt *li = &vcpu->arch.local_int;
 624	struct kvm_s390_mchk_info mchk = {};
 625	int deliver = 0;
 626	int rc = 0;
 627
 628	spin_lock(&fi->lock);
 629	spin_lock(&li->lock);
 630	if (test_bit(IRQ_PEND_MCHK_EX, &li->pending_irqs) ||
 631	    test_bit(IRQ_PEND_MCHK_REP, &li->pending_irqs)) {
 632		/*
 633		 * If there was an exigent machine check pending, then any
 634		 * repressible machine checks that might have been pending
 635		 * are indicated along with it, so always clear bits for
 636		 * repressible and exigent interrupts
 637		 */
 638		mchk = li->irq.mchk;
 639		clear_bit(IRQ_PEND_MCHK_EX, &li->pending_irqs);
 640		clear_bit(IRQ_PEND_MCHK_REP, &li->pending_irqs);
 641		memset(&li->irq.mchk, 0, sizeof(mchk));
 642		deliver = 1;
 643	}
 644	/*
 645	 * We indicate floating repressible conditions along with
 646	 * other pending conditions. Channel Report Pending and Channel
 647	 * Subsystem damage are the only two and are indicated by
 648	 * bits in mcic and masked in cr14.
 649	 */
 650	if (test_and_clear_bit(IRQ_PEND_MCHK_REP, &fi->pending_irqs)) {
 651		mchk.mcic |= fi->mchk.mcic;
 652		mchk.cr14 |= fi->mchk.cr14;
 653		memset(&fi->mchk, 0, sizeof(mchk));
 654		deliver = 1;
 655	}
 656	spin_unlock(&li->lock);
 657	spin_unlock(&fi->lock);
 658
 659	if (deliver) {
 660		VCPU_EVENT(vcpu, 3, "deliver: machine check mcic 0x%llx",
 661			   mchk.mcic);
 662		trace_kvm_s390_deliver_interrupt(vcpu->vcpu_id,
 663						 KVM_S390_MCHK,
 664						 mchk.cr14, mchk.mcic);
 665		vcpu->stat.deliver_machine_check++;
 666		rc = __write_machine_check(vcpu, &mchk);
 667	}
 668	return rc;
 669}
 670
 671static int __must_check __deliver_restart(struct kvm_vcpu *vcpu)
 672{
 673	struct kvm_s390_local_interrupt *li = &vcpu->arch.local_int;
 674	int rc = 0;
 675
 676	VCPU_EVENT(vcpu, 3, "%s", "deliver: cpu restart");
 677	vcpu->stat.deliver_restart_signal++;
 678	trace_kvm_s390_deliver_interrupt(vcpu->vcpu_id, KVM_S390_RESTART, 0, 0);
 679
 680	if (kvm_s390_pv_cpu_is_protected(vcpu)) {
 681		vcpu->arch.sie_block->iictl = IICTL_CODE_RESTART;
 682	} else {
 683		rc  = write_guest_lc(vcpu,
 684				     offsetof(struct lowcore, restart_old_psw),
 685				     &vcpu->arch.sie_block->gpsw, sizeof(psw_t));
 686		rc |= read_guest_lc(vcpu, offsetof(struct lowcore, restart_psw),
 687				    &vcpu->arch.sie_block->gpsw, sizeof(psw_t));
 688	}
 689	clear_bit(IRQ_PEND_RESTART, &li->pending_irqs);
 690	return rc ? -EFAULT : 0;
 691}
 692
 693static int __must_check __deliver_set_prefix(struct kvm_vcpu *vcpu)
 694{
 695	struct kvm_s390_local_interrupt *li = &vcpu->arch.local_int;
 696	struct kvm_s390_prefix_info prefix;
 697
 698	spin_lock(&li->lock);
 699	prefix = li->irq.prefix;
 700	li->irq.prefix.address = 0;
 701	clear_bit(IRQ_PEND_SET_PREFIX, &li->pending_irqs);
 702	spin_unlock(&li->lock);
 703
 704	vcpu->stat.deliver_prefix_signal++;
 705	trace_kvm_s390_deliver_interrupt(vcpu->vcpu_id,
 706					 KVM_S390_SIGP_SET_PREFIX,
 707					 prefix.address, 0);
 708
 709	kvm_s390_set_prefix(vcpu, prefix.address);
 710	return 0;
 711}
 712
 713static int __must_check __deliver_emergency_signal(struct kvm_vcpu *vcpu)
 714{
 715	struct kvm_s390_local_interrupt *li = &vcpu->arch.local_int;
 716	int rc;
 717	int cpu_addr;
 718
 719	spin_lock(&li->lock);
 720	cpu_addr = find_first_bit(li->sigp_emerg_pending, KVM_MAX_VCPUS);
 721	clear_bit(cpu_addr, li->sigp_emerg_pending);
 722	if (bitmap_empty(li->sigp_emerg_pending, KVM_MAX_VCPUS))
 723		clear_bit(IRQ_PEND_EXT_EMERGENCY, &li->pending_irqs);
 724	spin_unlock(&li->lock);
 725
 726	VCPU_EVENT(vcpu, 4, "%s", "deliver: sigp emerg");
 727	vcpu->stat.deliver_emergency_signal++;
 728	trace_kvm_s390_deliver_interrupt(vcpu->vcpu_id, KVM_S390_INT_EMERGENCY,
 729					 cpu_addr, 0);
 730	if (kvm_s390_pv_cpu_is_protected(vcpu)) {
 731		vcpu->arch.sie_block->iictl = IICTL_CODE_EXT;
 732		vcpu->arch.sie_block->eic = EXT_IRQ_EMERGENCY_SIG;
 733		vcpu->arch.sie_block->extcpuaddr = cpu_addr;
 734		return 0;
 735	}
 736
 737	rc  = put_guest_lc(vcpu, EXT_IRQ_EMERGENCY_SIG,
 738			   (u16 *)__LC_EXT_INT_CODE);
 739	rc |= put_guest_lc(vcpu, cpu_addr, (u16 *)__LC_EXT_CPU_ADDR);
 740	rc |= write_guest_lc(vcpu, __LC_EXT_OLD_PSW,
 741			     &vcpu->arch.sie_block->gpsw, sizeof(psw_t));
 742	rc |= read_guest_lc(vcpu, __LC_EXT_NEW_PSW,
 743			    &vcpu->arch.sie_block->gpsw, sizeof(psw_t));
 744	return rc ? -EFAULT : 0;
 745}
 746
 747static int __must_check __deliver_external_call(struct kvm_vcpu *vcpu)
 748{
 749	struct kvm_s390_local_interrupt *li = &vcpu->arch.local_int;
 750	struct kvm_s390_extcall_info extcall;
 751	int rc;
 752
 753	spin_lock(&li->lock);
 754	extcall = li->irq.extcall;
 755	li->irq.extcall.code = 0;
 756	clear_bit(IRQ_PEND_EXT_EXTERNAL, &li->pending_irqs);
 757	spin_unlock(&li->lock);
 758
 759	VCPU_EVENT(vcpu, 4, "%s", "deliver: sigp ext call");
 760	vcpu->stat.deliver_external_call++;
 761	trace_kvm_s390_deliver_interrupt(vcpu->vcpu_id,
 762					 KVM_S390_INT_EXTERNAL_CALL,
 763					 extcall.code, 0);
 764	if (kvm_s390_pv_cpu_is_protected(vcpu)) {
 765		vcpu->arch.sie_block->iictl = IICTL_CODE_EXT;
 766		vcpu->arch.sie_block->eic = EXT_IRQ_EXTERNAL_CALL;
 767		vcpu->arch.sie_block->extcpuaddr = extcall.code;
 768		return 0;
 769	}
 770
 771	rc  = put_guest_lc(vcpu, EXT_IRQ_EXTERNAL_CALL,
 772			   (u16 *)__LC_EXT_INT_CODE);
 773	rc |= put_guest_lc(vcpu, extcall.code, (u16 *)__LC_EXT_CPU_ADDR);
 774	rc |= write_guest_lc(vcpu, __LC_EXT_OLD_PSW,
 775			     &vcpu->arch.sie_block->gpsw, sizeof(psw_t));
 776	rc |= read_guest_lc(vcpu, __LC_EXT_NEW_PSW, &vcpu->arch.sie_block->gpsw,
 777			    sizeof(psw_t));
 778	return rc ? -EFAULT : 0;
 779}
 780
 781static int __deliver_prog_pv(struct kvm_vcpu *vcpu, u16 code)
 782{
 783	switch (code) {
 784	case PGM_SPECIFICATION:
 785		vcpu->arch.sie_block->iictl = IICTL_CODE_SPECIFICATION;
 786		break;
 787	case PGM_OPERAND:
 788		vcpu->arch.sie_block->iictl = IICTL_CODE_OPERAND;
 789		break;
 790	default:
 791		return -EINVAL;
 792	}
 793	return 0;
 794}
 795
 796static int __must_check __deliver_prog(struct kvm_vcpu *vcpu)
 797{
 798	struct kvm_s390_local_interrupt *li = &vcpu->arch.local_int;
 799	struct kvm_s390_pgm_info pgm_info;
 800	int rc = 0, nullifying = false;
 801	u16 ilen;
 802
 803	spin_lock(&li->lock);
 804	pgm_info = li->irq.pgm;
 805	clear_bit(IRQ_PEND_PROG, &li->pending_irqs);
 806	memset(&li->irq.pgm, 0, sizeof(pgm_info));
 807	spin_unlock(&li->lock);
 808
 809	ilen = pgm_info.flags & KVM_S390_PGM_FLAGS_ILC_MASK;
 810	VCPU_EVENT(vcpu, 3, "deliver: program irq code 0x%x, ilen:%d",
 811		   pgm_info.code, ilen);
 812	vcpu->stat.deliver_program++;
 813	trace_kvm_s390_deliver_interrupt(vcpu->vcpu_id, KVM_S390_PROGRAM_INT,
 814					 pgm_info.code, 0);
 815
 816	/* PER is handled by the ultravisor */
 817	if (kvm_s390_pv_cpu_is_protected(vcpu))
 818		return __deliver_prog_pv(vcpu, pgm_info.code & ~PGM_PER);
 819
 820	switch (pgm_info.code & ~PGM_PER) {
 821	case PGM_AFX_TRANSLATION:
 822	case PGM_ASX_TRANSLATION:
 823	case PGM_EX_TRANSLATION:
 824	case PGM_LFX_TRANSLATION:
 825	case PGM_LSTE_SEQUENCE:
 826	case PGM_LSX_TRANSLATION:
 827	case PGM_LX_TRANSLATION:
 828	case PGM_PRIMARY_AUTHORITY:
 829	case PGM_SECONDARY_AUTHORITY:
 830		nullifying = true;
 831		fallthrough;
 832	case PGM_SPACE_SWITCH:
 833		rc = put_guest_lc(vcpu, pgm_info.trans_exc_code,
 834				  (u64 *)__LC_TRANS_EXC_CODE);
 835		break;
 836	case PGM_ALEN_TRANSLATION:
 837	case PGM_ALE_SEQUENCE:
 838	case PGM_ASTE_INSTANCE:
 839	case PGM_ASTE_SEQUENCE:
 840	case PGM_ASTE_VALIDITY:
 841	case PGM_EXTENDED_AUTHORITY:
 842		rc = put_guest_lc(vcpu, pgm_info.exc_access_id,
 843				  (u8 *)__LC_EXC_ACCESS_ID);
 844		nullifying = true;
 845		break;
 846	case PGM_ASCE_TYPE:
 847	case PGM_PAGE_TRANSLATION:
 848	case PGM_REGION_FIRST_TRANS:
 849	case PGM_REGION_SECOND_TRANS:
 850	case PGM_REGION_THIRD_TRANS:
 851	case PGM_SEGMENT_TRANSLATION:
 852		rc = put_guest_lc(vcpu, pgm_info.trans_exc_code,
 853				  (u64 *)__LC_TRANS_EXC_CODE);
 854		rc |= put_guest_lc(vcpu, pgm_info.exc_access_id,
 855				   (u8 *)__LC_EXC_ACCESS_ID);
 856		rc |= put_guest_lc(vcpu, pgm_info.op_access_id,
 857				   (u8 *)__LC_OP_ACCESS_ID);
 858		nullifying = true;
 859		break;
 860	case PGM_MONITOR:
 861		rc = put_guest_lc(vcpu, pgm_info.mon_class_nr,
 862				  (u16 *)__LC_MON_CLASS_NR);
 863		rc |= put_guest_lc(vcpu, pgm_info.mon_code,
 864				   (u64 *)__LC_MON_CODE);
 865		break;
 866	case PGM_VECTOR_PROCESSING:
 867	case PGM_DATA:
 868		rc = put_guest_lc(vcpu, pgm_info.data_exc_code,
 869				  (u32 *)__LC_DATA_EXC_CODE);
 870		break;
 871	case PGM_PROTECTION:
 872		rc = put_guest_lc(vcpu, pgm_info.trans_exc_code,
 873				  (u64 *)__LC_TRANS_EXC_CODE);
 874		rc |= put_guest_lc(vcpu, pgm_info.exc_access_id,
 875				   (u8 *)__LC_EXC_ACCESS_ID);
 876		break;
 877	case PGM_STACK_FULL:
 878	case PGM_STACK_EMPTY:
 879	case PGM_STACK_SPECIFICATION:
 880	case PGM_STACK_TYPE:
 881	case PGM_STACK_OPERATION:
 882	case PGM_TRACE_TABEL:
 883	case PGM_CRYPTO_OPERATION:
 884		nullifying = true;
 885		break;
 886	}
 887
 888	if (pgm_info.code & PGM_PER) {
 889		rc |= put_guest_lc(vcpu, pgm_info.per_code,
 890				   (u8 *) __LC_PER_CODE);
 891		rc |= put_guest_lc(vcpu, pgm_info.per_atmid,
 892				   (u8 *)__LC_PER_ATMID);
 893		rc |= put_guest_lc(vcpu, pgm_info.per_address,
 894				   (u64 *) __LC_PER_ADDRESS);
 895		rc |= put_guest_lc(vcpu, pgm_info.per_access_id,
 896				   (u8 *) __LC_PER_ACCESS_ID);
 897	}
 898
 899	if (nullifying && !(pgm_info.flags & KVM_S390_PGM_FLAGS_NO_REWIND))
 900		kvm_s390_rewind_psw(vcpu, ilen);
 901
 902	/* bit 1+2 of the target are the ilc, so we can directly use ilen */
 903	rc |= put_guest_lc(vcpu, ilen, (u16 *) __LC_PGM_ILC);
 904	rc |= put_guest_lc(vcpu, vcpu->arch.sie_block->gbea,
 905				 (u64 *) __LC_PGM_LAST_BREAK);
 906	rc |= put_guest_lc(vcpu, pgm_info.code, (u16 *)__LC_PGM_CODE);
 907	rc |= write_guest_lc(vcpu, __LC_PGM_OLD_PSW,
 908			     &vcpu->arch.sie_block->gpsw, sizeof(psw_t));
 909	rc |= read_guest_lc(vcpu, __LC_PGM_NEW_PSW,
 910			    &vcpu->arch.sie_block->gpsw, sizeof(psw_t));
 911	return rc ? -EFAULT : 0;
 912}
 913
 914#define SCCB_MASK 0xFFFFFFF8
 915#define SCCB_EVENT_PENDING 0x3
 916
 917static int write_sclp(struct kvm_vcpu *vcpu, u32 parm)
 918{
 919	int rc;
 920
 921	if (kvm_s390_pv_cpu_get_handle(vcpu)) {
 922		vcpu->arch.sie_block->iictl = IICTL_CODE_EXT;
 923		vcpu->arch.sie_block->eic = EXT_IRQ_SERVICE_SIG;
 924		vcpu->arch.sie_block->eiparams = parm;
 925		return 0;
 926	}
 927
 928	rc  = put_guest_lc(vcpu, EXT_IRQ_SERVICE_SIG, (u16 *)__LC_EXT_INT_CODE);
 929	rc |= put_guest_lc(vcpu, 0, (u16 *)__LC_EXT_CPU_ADDR);
 930	rc |= write_guest_lc(vcpu, __LC_EXT_OLD_PSW,
 931			     &vcpu->arch.sie_block->gpsw, sizeof(psw_t));
 932	rc |= read_guest_lc(vcpu, __LC_EXT_NEW_PSW,
 933			    &vcpu->arch.sie_block->gpsw, sizeof(psw_t));
 934	rc |= put_guest_lc(vcpu, parm,
 935			   (u32 *)__LC_EXT_PARAMS);
 936
 937	return rc ? -EFAULT : 0;
 938}
 939
 940static int __must_check __deliver_service(struct kvm_vcpu *vcpu)
 941{
 942	struct kvm_s390_float_interrupt *fi = &vcpu->kvm->arch.float_int;
 943	struct kvm_s390_ext_info ext;
 944
 945	spin_lock(&fi->lock);
 946	if (test_bit(IRQ_PEND_EXT_SERVICE, &fi->masked_irqs) ||
 947	    !(test_bit(IRQ_PEND_EXT_SERVICE, &fi->pending_irqs))) {
 948		spin_unlock(&fi->lock);
 949		return 0;
 950	}
 951	ext = fi->srv_signal;
 952	memset(&fi->srv_signal, 0, sizeof(ext));
 953	clear_bit(IRQ_PEND_EXT_SERVICE, &fi->pending_irqs);
 954	clear_bit(IRQ_PEND_EXT_SERVICE_EV, &fi->pending_irqs);
 955	if (kvm_s390_pv_cpu_is_protected(vcpu))
 956		set_bit(IRQ_PEND_EXT_SERVICE, &fi->masked_irqs);
 957	spin_unlock(&fi->lock);
 958
 959	VCPU_EVENT(vcpu, 4, "deliver: sclp parameter 0x%x",
 960		   ext.ext_params);
 961	vcpu->stat.deliver_service_signal++;
 962	trace_kvm_s390_deliver_interrupt(vcpu->vcpu_id, KVM_S390_INT_SERVICE,
 963					 ext.ext_params, 0);
 964
 965	return write_sclp(vcpu, ext.ext_params);
 966}
 967
 968static int __must_check __deliver_service_ev(struct kvm_vcpu *vcpu)
 969{
 970	struct kvm_s390_float_interrupt *fi = &vcpu->kvm->arch.float_int;
 971	struct kvm_s390_ext_info ext;
 972
 973	spin_lock(&fi->lock);
 974	if (!(test_bit(IRQ_PEND_EXT_SERVICE_EV, &fi->pending_irqs))) {
 975		spin_unlock(&fi->lock);
 976		return 0;
 977	}
 978	ext = fi->srv_signal;
 979	/* only clear the event bits */
 980	fi->srv_signal.ext_params &= ~SCCB_EVENT_PENDING;
 981	clear_bit(IRQ_PEND_EXT_SERVICE_EV, &fi->pending_irqs);
 982	spin_unlock(&fi->lock);
 983
 984	VCPU_EVENT(vcpu, 4, "%s", "deliver: sclp parameter event");
 985	vcpu->stat.deliver_service_signal++;
 986	trace_kvm_s390_deliver_interrupt(vcpu->vcpu_id, KVM_S390_INT_SERVICE,
 987					 ext.ext_params, 0);
 988
 989	return write_sclp(vcpu, ext.ext_params & SCCB_EVENT_PENDING);
 990}
 991
 992static int __must_check __deliver_pfault_done(struct kvm_vcpu *vcpu)
 993{
 994	struct kvm_s390_float_interrupt *fi = &vcpu->kvm->arch.float_int;
 995	struct kvm_s390_interrupt_info *inti;
 996	int rc = 0;
 997
 998	spin_lock(&fi->lock);
 999	inti = list_first_entry_or_null(&fi->lists[FIRQ_LIST_PFAULT],
1000					struct kvm_s390_interrupt_info,
1001					list);
1002	if (inti) {
1003		list_del(&inti->list);
1004		fi->counters[FIRQ_CNTR_PFAULT] -= 1;
1005	}
1006	if (list_empty(&fi->lists[FIRQ_LIST_PFAULT]))
1007		clear_bit(IRQ_PEND_PFAULT_DONE, &fi->pending_irqs);
1008	spin_unlock(&fi->lock);
1009
1010	if (inti) {
1011		trace_kvm_s390_deliver_interrupt(vcpu->vcpu_id,
1012						 KVM_S390_INT_PFAULT_DONE, 0,
1013						 inti->ext.ext_params2);
1014		VCPU_EVENT(vcpu, 4, "deliver: pfault done token 0x%llx",
1015			   inti->ext.ext_params2);
1016
1017		rc  = put_guest_lc(vcpu, EXT_IRQ_CP_SERVICE,
1018				(u16 *)__LC_EXT_INT_CODE);
1019		rc |= put_guest_lc(vcpu, PFAULT_DONE,
1020				(u16 *)__LC_EXT_CPU_ADDR);
1021		rc |= write_guest_lc(vcpu, __LC_EXT_OLD_PSW,
1022				&vcpu->arch.sie_block->gpsw,
1023				sizeof(psw_t));
1024		rc |= read_guest_lc(vcpu, __LC_EXT_NEW_PSW,
1025				&vcpu->arch.sie_block->gpsw,
1026				sizeof(psw_t));
1027		rc |= put_guest_lc(vcpu, inti->ext.ext_params2,
1028				(u64 *)__LC_EXT_PARAMS2);
1029		kfree(inti);
1030	}
1031	return rc ? -EFAULT : 0;
1032}
1033
1034static int __must_check __deliver_virtio(struct kvm_vcpu *vcpu)
1035{
1036	struct kvm_s390_float_interrupt *fi = &vcpu->kvm->arch.float_int;
1037	struct kvm_s390_interrupt_info *inti;
1038	int rc = 0;
1039
1040	spin_lock(&fi->lock);
1041	inti = list_first_entry_or_null(&fi->lists[FIRQ_LIST_VIRTIO],
1042					struct kvm_s390_interrupt_info,
1043					list);
1044	if (inti) {
1045		VCPU_EVENT(vcpu, 4,
1046			   "deliver: virtio parm: 0x%x,parm64: 0x%llx",
1047			   inti->ext.ext_params, inti->ext.ext_params2);
1048		vcpu->stat.deliver_virtio++;
1049		trace_kvm_s390_deliver_interrupt(vcpu->vcpu_id,
1050				inti->type,
1051				inti->ext.ext_params,
1052				inti->ext.ext_params2);
1053		list_del(&inti->list);
1054		fi->counters[FIRQ_CNTR_VIRTIO] -= 1;
1055	}
1056	if (list_empty(&fi->lists[FIRQ_LIST_VIRTIO]))
1057		clear_bit(IRQ_PEND_VIRTIO, &fi->pending_irqs);
1058	spin_unlock(&fi->lock);
1059
1060	if (inti) {
1061		rc  = put_guest_lc(vcpu, EXT_IRQ_CP_SERVICE,
1062				(u16 *)__LC_EXT_INT_CODE);
1063		rc |= put_guest_lc(vcpu, VIRTIO_PARAM,
1064				(u16 *)__LC_EXT_CPU_ADDR);
1065		rc |= write_guest_lc(vcpu, __LC_EXT_OLD_PSW,
1066				&vcpu->arch.sie_block->gpsw,
1067				sizeof(psw_t));
1068		rc |= read_guest_lc(vcpu, __LC_EXT_NEW_PSW,
1069				&vcpu->arch.sie_block->gpsw,
1070				sizeof(psw_t));
1071		rc |= put_guest_lc(vcpu, inti->ext.ext_params,
1072				(u32 *)__LC_EXT_PARAMS);
1073		rc |= put_guest_lc(vcpu, inti->ext.ext_params2,
1074				(u64 *)__LC_EXT_PARAMS2);
1075		kfree(inti);
1076	}
1077	return rc ? -EFAULT : 0;
1078}
1079
1080static int __do_deliver_io(struct kvm_vcpu *vcpu, struct kvm_s390_io_info *io)
1081{
1082	int rc;
1083
1084	if (kvm_s390_pv_cpu_is_protected(vcpu)) {
1085		vcpu->arch.sie_block->iictl = IICTL_CODE_IO;
1086		vcpu->arch.sie_block->subchannel_id = io->subchannel_id;
1087		vcpu->arch.sie_block->subchannel_nr = io->subchannel_nr;
1088		vcpu->arch.sie_block->io_int_parm = io->io_int_parm;
1089		vcpu->arch.sie_block->io_int_word = io->io_int_word;
1090		return 0;
1091	}
1092
1093	rc  = put_guest_lc(vcpu, io->subchannel_id, (u16 *)__LC_SUBCHANNEL_ID);
1094	rc |= put_guest_lc(vcpu, io->subchannel_nr, (u16 *)__LC_SUBCHANNEL_NR);
1095	rc |= put_guest_lc(vcpu, io->io_int_parm, (u32 *)__LC_IO_INT_PARM);
1096	rc |= put_guest_lc(vcpu, io->io_int_word, (u32 *)__LC_IO_INT_WORD);
1097	rc |= write_guest_lc(vcpu, __LC_IO_OLD_PSW,
1098			     &vcpu->arch.sie_block->gpsw,
1099			     sizeof(psw_t));
1100	rc |= read_guest_lc(vcpu, __LC_IO_NEW_PSW,
1101			    &vcpu->arch.sie_block->gpsw,
1102			    sizeof(psw_t));
1103	return rc ? -EFAULT : 0;
1104}
1105
1106static int __must_check __deliver_io(struct kvm_vcpu *vcpu,
1107				     unsigned long irq_type)
1108{
1109	struct list_head *isc_list;
1110	struct kvm_s390_float_interrupt *fi;
1111	struct kvm_s390_gisa_interrupt *gi = &vcpu->kvm->arch.gisa_int;
1112	struct kvm_s390_interrupt_info *inti = NULL;
1113	struct kvm_s390_io_info io;
1114	u32 isc;
1115	int rc = 0;
1116
1117	fi = &vcpu->kvm->arch.float_int;
1118
1119	spin_lock(&fi->lock);
1120	isc = irq_type_to_isc(irq_type);
1121	isc_list = &fi->lists[isc];
1122	inti = list_first_entry_or_null(isc_list,
1123					struct kvm_s390_interrupt_info,
1124					list);
1125	if (inti) {
1126		if (inti->type & KVM_S390_INT_IO_AI_MASK)
1127			VCPU_EVENT(vcpu, 4, "%s", "deliver: I/O (AI)");
1128		else
1129			VCPU_EVENT(vcpu, 4, "deliver: I/O %x ss %x schid %04x",
1130			inti->io.subchannel_id >> 8,
1131			inti->io.subchannel_id >> 1 & 0x3,
1132			inti->io.subchannel_nr);
1133
1134		vcpu->stat.deliver_io++;
1135		trace_kvm_s390_deliver_interrupt(vcpu->vcpu_id,
1136				inti->type,
1137				((__u32)inti->io.subchannel_id << 16) |
1138				inti->io.subchannel_nr,
1139				((__u64)inti->io.io_int_parm << 32) |
1140				inti->io.io_int_word);
1141		list_del(&inti->list);
1142		fi->counters[FIRQ_CNTR_IO] -= 1;
1143	}
1144	if (list_empty(isc_list))
1145		clear_bit(irq_type, &fi->pending_irqs);
1146	spin_unlock(&fi->lock);
1147
1148	if (inti) {
1149		rc = __do_deliver_io(vcpu, &(inti->io));
1150		kfree(inti);
1151		goto out;
1152	}
1153
1154	if (gi->origin && gisa_tac_ipm_gisc(gi->origin, isc)) {
1155		/*
1156		 * in case an adapter interrupt was not delivered
1157		 * in SIE context KVM will handle the delivery
1158		 */
1159		VCPU_EVENT(vcpu, 4, "%s isc %u", "deliver: I/O (AI/gisa)", isc);
1160		memset(&io, 0, sizeof(io));
1161		io.io_int_word = isc_to_int_word(isc);
1162		vcpu->stat.deliver_io++;
1163		trace_kvm_s390_deliver_interrupt(vcpu->vcpu_id,
1164			KVM_S390_INT_IO(1, 0, 0, 0),
1165			((__u32)io.subchannel_id << 16) |
1166			io.subchannel_nr,
1167			((__u64)io.io_int_parm << 32) |
1168			io.io_int_word);
1169		rc = __do_deliver_io(vcpu, &io);
1170	}
1171out:
1172	return rc;
1173}
1174
1175/* Check whether an external call is pending (deliverable or not) */
1176int kvm_s390_ext_call_pending(struct kvm_vcpu *vcpu)
1177{
1178	struct kvm_s390_local_interrupt *li = &vcpu->arch.local_int;
1179
1180	if (!kvm_s390_use_sca_entries())
1181		return test_bit(IRQ_PEND_EXT_EXTERNAL, &li->pending_irqs);
1182
1183	return sca_ext_call_pending(vcpu, NULL);
1184}
1185
1186int kvm_s390_vcpu_has_irq(struct kvm_vcpu *vcpu, int exclude_stop)
1187{
1188	if (deliverable_irqs(vcpu))
1189		return 1;
1190
1191	if (kvm_cpu_has_pending_timer(vcpu))
1192		return 1;
1193
1194	/* external call pending and deliverable */
1195	if (kvm_s390_ext_call_pending(vcpu) &&
1196	    !psw_extint_disabled(vcpu) &&
1197	    (vcpu->arch.sie_block->gcr[0] & CR0_EXTERNAL_CALL_SUBMASK))
1198		return 1;
1199
1200	if (!exclude_stop && kvm_s390_is_stop_irq_pending(vcpu))
1201		return 1;
1202	return 0;
1203}
1204
1205int kvm_cpu_has_pending_timer(struct kvm_vcpu *vcpu)
1206{
1207	return ckc_irq_pending(vcpu) || cpu_timer_irq_pending(vcpu);
1208}
1209
1210static u64 __calculate_sltime(struct kvm_vcpu *vcpu)
1211{
1212	const u64 now = kvm_s390_get_tod_clock_fast(vcpu->kvm);
1213	const u64 ckc = vcpu->arch.sie_block->ckc;
1214	u64 cputm, sltime = 0;
1215
1216	if (ckc_interrupts_enabled(vcpu)) {
1217		if (vcpu->arch.sie_block->gcr[0] & CR0_CLOCK_COMPARATOR_SIGN) {
1218			if ((s64)now < (s64)ckc)
1219				sltime = tod_to_ns((s64)ckc - (s64)now);
1220		} else if (now < ckc) {
1221			sltime = tod_to_ns(ckc - now);
1222		}
1223		/* already expired */
1224		if (!sltime)
1225			return 0;
1226		if (cpu_timer_interrupts_enabled(vcpu)) {
1227			cputm = kvm_s390_get_cpu_timer(vcpu);
1228			/* already expired? */
1229			if (cputm >> 63)
1230				return 0;
1231			return min_t(u64, sltime, tod_to_ns(cputm));
1232		}
1233	} else if (cpu_timer_interrupts_enabled(vcpu)) {
1234		sltime = kvm_s390_get_cpu_timer(vcpu);
1235		/* already expired? */
1236		if (sltime >> 63)
1237			return 0;
1238	}
1239	return sltime;
1240}
1241
1242int kvm_s390_handle_wait(struct kvm_vcpu *vcpu)
1243{
1244	struct kvm_s390_gisa_interrupt *gi = &vcpu->kvm->arch.gisa_int;
1245	u64 sltime;
1246
1247	vcpu->stat.exit_wait_state++;
1248
1249	/* fast path */
1250	if (kvm_arch_vcpu_runnable(vcpu))
1251		return 0;
1252
1253	if (psw_interrupts_disabled(vcpu)) {
1254		VCPU_EVENT(vcpu, 3, "%s", "disabled wait");
1255		return -EOPNOTSUPP; /* disabled wait */
1256	}
1257
1258	if (gi->origin &&
1259	    (gisa_get_ipm_or_restore_iam(gi) &
1260	     vcpu->arch.sie_block->gcr[6] >> 24))
1261		return 0;
1262
1263	if (!ckc_interrupts_enabled(vcpu) &&
1264	    !cpu_timer_interrupts_enabled(vcpu)) {
1265		VCPU_EVENT(vcpu, 3, "%s", "enabled wait w/o timer");
1266		__set_cpu_idle(vcpu);
1267		goto no_timer;
1268	}
1269
1270	sltime = __calculate_sltime(vcpu);
1271	if (!sltime)
1272		return 0;
1273
1274	__set_cpu_idle(vcpu);
1275	hrtimer_start(&vcpu->arch.ckc_timer, sltime, HRTIMER_MODE_REL);
1276	VCPU_EVENT(vcpu, 4, "enabled wait: %llu ns", sltime);
1277no_timer:
1278	kvm_vcpu_srcu_read_unlock(vcpu);
1279	vcpu->kvm->arch.float_int.last_sleep_cpu = vcpu->vcpu_idx;
1280	kvm_vcpu_halt(vcpu);
1281	vcpu->valid_wakeup = false;
1282	__unset_cpu_idle(vcpu);
1283	kvm_vcpu_srcu_read_lock(vcpu);
1284
1285	hrtimer_cancel(&vcpu->arch.ckc_timer);
1286	return 0;
1287}
1288
1289void kvm_s390_vcpu_wakeup(struct kvm_vcpu *vcpu)
1290{
1291	vcpu->valid_wakeup = true;
1292	kvm_vcpu_wake_up(vcpu);
1293
1294	/*
1295	 * The VCPU might not be sleeping but rather executing VSIE. Let's
1296	 * kick it, so it leaves the SIE to process the request.
1297	 */
1298	kvm_s390_vsie_kick(vcpu);
1299}
1300
1301enum hrtimer_restart kvm_s390_idle_wakeup(struct hrtimer *timer)
1302{
1303	struct kvm_vcpu *vcpu;
1304	u64 sltime;
1305
1306	vcpu = container_of(timer, struct kvm_vcpu, arch.ckc_timer);
1307	sltime = __calculate_sltime(vcpu);
1308
1309	/*
1310	 * If the monotonic clock runs faster than the tod clock we might be
1311	 * woken up too early and have to go back to sleep to avoid deadlocks.
1312	 */
1313	if (sltime && hrtimer_forward_now(timer, ns_to_ktime(sltime)))
1314		return HRTIMER_RESTART;
1315	kvm_s390_vcpu_wakeup(vcpu);
1316	return HRTIMER_NORESTART;
1317}
1318
1319void kvm_s390_clear_local_irqs(struct kvm_vcpu *vcpu)
1320{
1321	struct kvm_s390_local_interrupt *li = &vcpu->arch.local_int;
1322
1323	spin_lock(&li->lock);
1324	li->pending_irqs = 0;
1325	bitmap_zero(li->sigp_emerg_pending, KVM_MAX_VCPUS);
1326	memset(&li->irq, 0, sizeof(li->irq));
1327	spin_unlock(&li->lock);
1328
1329	sca_clear_ext_call(vcpu);
1330}
1331
1332int __must_check kvm_s390_deliver_pending_interrupts(struct kvm_vcpu *vcpu)
1333{
1334	struct kvm_s390_local_interrupt *li = &vcpu->arch.local_int;
1335	int rc = 0;
1336	bool delivered = false;
1337	unsigned long irq_type;
1338	unsigned long irqs;
1339
1340	__reset_intercept_indicators(vcpu);
1341
1342	/* pending ckc conditions might have been invalidated */
1343	clear_bit(IRQ_PEND_EXT_CLOCK_COMP, &li->pending_irqs);
1344	if (ckc_irq_pending(vcpu))
1345		set_bit(IRQ_PEND_EXT_CLOCK_COMP, &li->pending_irqs);
1346
1347	/* pending cpu timer conditions might have been invalidated */
1348	clear_bit(IRQ_PEND_EXT_CPU_TIMER, &li->pending_irqs);
1349	if (cpu_timer_irq_pending(vcpu))
1350		set_bit(IRQ_PEND_EXT_CPU_TIMER, &li->pending_irqs);
1351
1352	while ((irqs = deliverable_irqs(vcpu)) && !rc) {
1353		/* bits are in the reverse order of interrupt priority */
1354		irq_type = find_last_bit(&irqs, IRQ_PEND_COUNT);
1355		switch (irq_type) {
1356		case IRQ_PEND_IO_ISC_0:
1357		case IRQ_PEND_IO_ISC_1:
1358		case IRQ_PEND_IO_ISC_2:
1359		case IRQ_PEND_IO_ISC_3:
1360		case IRQ_PEND_IO_ISC_4:
1361		case IRQ_PEND_IO_ISC_5:
1362		case IRQ_PEND_IO_ISC_6:
1363		case IRQ_PEND_IO_ISC_7:
1364			rc = __deliver_io(vcpu, irq_type);
1365			break;
1366		case IRQ_PEND_MCHK_EX:
1367		case IRQ_PEND_MCHK_REP:
1368			rc = __deliver_machine_check(vcpu);
1369			break;
1370		case IRQ_PEND_PROG:
1371			rc = __deliver_prog(vcpu);
1372			break;
1373		case IRQ_PEND_EXT_EMERGENCY:
1374			rc = __deliver_emergency_signal(vcpu);
1375			break;
1376		case IRQ_PEND_EXT_EXTERNAL:
1377			rc = __deliver_external_call(vcpu);
1378			break;
1379		case IRQ_PEND_EXT_CLOCK_COMP:
1380			rc = __deliver_ckc(vcpu);
1381			break;
1382		case IRQ_PEND_EXT_CPU_TIMER:
1383			rc = __deliver_cpu_timer(vcpu);
1384			break;
1385		case IRQ_PEND_RESTART:
1386			rc = __deliver_restart(vcpu);
1387			break;
1388		case IRQ_PEND_SET_PREFIX:
1389			rc = __deliver_set_prefix(vcpu);
1390			break;
1391		case IRQ_PEND_PFAULT_INIT:
1392			rc = __deliver_pfault_init(vcpu);
1393			break;
1394		case IRQ_PEND_EXT_SERVICE:
1395			rc = __deliver_service(vcpu);
1396			break;
1397		case IRQ_PEND_EXT_SERVICE_EV:
1398			rc = __deliver_service_ev(vcpu);
1399			break;
1400		case IRQ_PEND_PFAULT_DONE:
1401			rc = __deliver_pfault_done(vcpu);
1402			break;
1403		case IRQ_PEND_VIRTIO:
1404			rc = __deliver_virtio(vcpu);
1405			break;
1406		default:
1407			WARN_ONCE(1, "Unknown pending irq type %ld", irq_type);
1408			clear_bit(irq_type, &li->pending_irqs);
1409		}
1410		delivered |= !rc;
1411	}
1412
1413	/*
1414	 * We delivered at least one interrupt and modified the PC. Force a
1415	 * singlestep event now.
1416	 */
1417	if (delivered && guestdbg_sstep_enabled(vcpu)) {
1418		struct kvm_debug_exit_arch *debug_exit = &vcpu->run->debug.arch;
1419
1420		debug_exit->addr = vcpu->arch.sie_block->gpsw.addr;
1421		debug_exit->type = KVM_SINGLESTEP;
1422		vcpu->guest_debug |= KVM_GUESTDBG_EXIT_PENDING;
1423	}
1424
1425	set_intercept_indicators(vcpu);
1426
1427	return rc;
1428}
1429
1430static int __inject_prog(struct kvm_vcpu *vcpu, struct kvm_s390_irq *irq)
1431{
1432	struct kvm_s390_local_interrupt *li = &vcpu->arch.local_int;
1433
1434	vcpu->stat.inject_program++;
1435	VCPU_EVENT(vcpu, 3, "inject: program irq code 0x%x", irq->u.pgm.code);
1436	trace_kvm_s390_inject_vcpu(vcpu->vcpu_id, KVM_S390_PROGRAM_INT,
1437				   irq->u.pgm.code, 0);
1438
1439	if (!(irq->u.pgm.flags & KVM_S390_PGM_FLAGS_ILC_VALID)) {
1440		/* auto detection if no valid ILC was given */
1441		irq->u.pgm.flags &= ~KVM_S390_PGM_FLAGS_ILC_MASK;
1442		irq->u.pgm.flags |= kvm_s390_get_ilen(vcpu);
1443		irq->u.pgm.flags |= KVM_S390_PGM_FLAGS_ILC_VALID;
1444	}
1445
1446	if (irq->u.pgm.code == PGM_PER) {
1447		li->irq.pgm.code |= PGM_PER;
1448		li->irq.pgm.flags = irq->u.pgm.flags;
1449		/* only modify PER related information */
1450		li->irq.pgm.per_address = irq->u.pgm.per_address;
1451		li->irq.pgm.per_code = irq->u.pgm.per_code;
1452		li->irq.pgm.per_atmid = irq->u.pgm.per_atmid;
1453		li->irq.pgm.per_access_id = irq->u.pgm.per_access_id;
1454	} else if (!(irq->u.pgm.code & PGM_PER)) {
1455		li->irq.pgm.code = (li->irq.pgm.code & PGM_PER) |
1456				   irq->u.pgm.code;
1457		li->irq.pgm.flags = irq->u.pgm.flags;
1458		/* only modify non-PER information */
1459		li->irq.pgm.trans_exc_code = irq->u.pgm.trans_exc_code;
1460		li->irq.pgm.mon_code = irq->u.pgm.mon_code;
1461		li->irq.pgm.data_exc_code = irq->u.pgm.data_exc_code;
1462		li->irq.pgm.mon_class_nr = irq->u.pgm.mon_class_nr;
1463		li->irq.pgm.exc_access_id = irq->u.pgm.exc_access_id;
1464		li->irq.pgm.op_access_id = irq->u.pgm.op_access_id;
1465	} else {
1466		li->irq.pgm = irq->u.pgm;
1467	}
1468	set_bit(IRQ_PEND_PROG, &li->pending_irqs);
1469	return 0;
1470}
1471
1472static int __inject_pfault_init(struct kvm_vcpu *vcpu, struct kvm_s390_irq *irq)
1473{
1474	struct kvm_s390_local_interrupt *li = &vcpu->arch.local_int;
1475
1476	vcpu->stat.inject_pfault_init++;
1477	VCPU_EVENT(vcpu, 4, "inject: pfault init parameter block at 0x%llx",
1478		   irq->u.ext.ext_params2);
1479	trace_kvm_s390_inject_vcpu(vcpu->vcpu_id, KVM_S390_INT_PFAULT_INIT,
1480				   irq->u.ext.ext_params,
1481				   irq->u.ext.ext_params2);
1482
1483	li->irq.ext = irq->u.ext;
1484	set_bit(IRQ_PEND_PFAULT_INIT, &li->pending_irqs);
1485	kvm_s390_set_cpuflags(vcpu, CPUSTAT_EXT_INT);
1486	return 0;
1487}
1488
1489static int __inject_extcall(struct kvm_vcpu *vcpu, struct kvm_s390_irq *irq)
1490{
1491	struct kvm_s390_local_interrupt *li = &vcpu->arch.local_int;
1492	struct kvm_s390_extcall_info *extcall = &li->irq.extcall;
1493	uint16_t src_id = irq->u.extcall.code;
1494
1495	vcpu->stat.inject_external_call++;
1496	VCPU_EVENT(vcpu, 4, "inject: external call source-cpu:%u",
1497		   src_id);
1498	trace_kvm_s390_inject_vcpu(vcpu->vcpu_id, KVM_S390_INT_EXTERNAL_CALL,
1499				   src_id, 0);
1500
1501	/* sending vcpu invalid */
1502	if (kvm_get_vcpu_by_id(vcpu->kvm, src_id) == NULL)
1503		return -EINVAL;
1504
1505	if (kvm_s390_use_sca_entries() && !kvm_s390_pv_cpu_get_handle(vcpu))
1506		return sca_inject_ext_call(vcpu, src_id);
1507
1508	if (test_and_set_bit(IRQ_PEND_EXT_EXTERNAL, &li->pending_irqs))
1509		return -EBUSY;
1510	*extcall = irq->u.extcall;
1511	kvm_s390_set_cpuflags(vcpu, CPUSTAT_EXT_INT);
1512	return 0;
1513}
1514
1515static int __inject_set_prefix(struct kvm_vcpu *vcpu, struct kvm_s390_irq *irq)
1516{
1517	struct kvm_s390_local_interrupt *li = &vcpu->arch.local_int;
1518	struct kvm_s390_prefix_info *prefix = &li->irq.prefix;
1519
1520	vcpu->stat.inject_set_prefix++;
1521	VCPU_EVENT(vcpu, 3, "inject: set prefix to %x",
1522		   irq->u.prefix.address);
1523	trace_kvm_s390_inject_vcpu(vcpu->vcpu_id, KVM_S390_SIGP_SET_PREFIX,
1524				   irq->u.prefix.address, 0);
1525
1526	if (!is_vcpu_stopped(vcpu))
1527		return -EBUSY;
1528
1529	*prefix = irq->u.prefix;
1530	set_bit(IRQ_PEND_SET_PREFIX, &li->pending_irqs);
1531	return 0;
1532}
1533
1534#define KVM_S390_STOP_SUPP_FLAGS (KVM_S390_STOP_FLAG_STORE_STATUS)
1535static int __inject_sigp_stop(struct kvm_vcpu *vcpu, struct kvm_s390_irq *irq)
1536{
1537	struct kvm_s390_local_interrupt *li = &vcpu->arch.local_int;
1538	struct kvm_s390_stop_info *stop = &li->irq.stop;
1539	int rc = 0;
1540
1541	vcpu->stat.inject_stop_signal++;
1542	trace_kvm_s390_inject_vcpu(vcpu->vcpu_id, KVM_S390_SIGP_STOP, 0, 0);
1543
1544	if (irq->u.stop.flags & ~KVM_S390_STOP_SUPP_FLAGS)
1545		return -EINVAL;
1546
1547	if (is_vcpu_stopped(vcpu)) {
1548		if (irq->u.stop.flags & KVM_S390_STOP_FLAG_STORE_STATUS)
1549			rc = kvm_s390_store_status_unloaded(vcpu,
1550						KVM_S390_STORE_STATUS_NOADDR);
1551		return rc;
1552	}
1553
1554	if (test_and_set_bit(IRQ_PEND_SIGP_STOP, &li->pending_irqs))
1555		return -EBUSY;
1556	stop->flags = irq->u.stop.flags;
1557	kvm_s390_set_cpuflags(vcpu, CPUSTAT_STOP_INT);
1558	return 0;
1559}
1560
1561static int __inject_sigp_restart(struct kvm_vcpu *vcpu)
1562{
1563	struct kvm_s390_local_interrupt *li = &vcpu->arch.local_int;
1564
1565	vcpu->stat.inject_restart++;
1566	VCPU_EVENT(vcpu, 3, "%s", "inject: restart int");
1567	trace_kvm_s390_inject_vcpu(vcpu->vcpu_id, KVM_S390_RESTART, 0, 0);
1568
1569	set_bit(IRQ_PEND_RESTART, &li->pending_irqs);
1570	return 0;
1571}
1572
1573static int __inject_sigp_emergency(struct kvm_vcpu *vcpu,
1574				   struct kvm_s390_irq *irq)
1575{
1576	struct kvm_s390_local_interrupt *li = &vcpu->arch.local_int;
1577
1578	vcpu->stat.inject_emergency_signal++;
1579	VCPU_EVENT(vcpu, 4, "inject: emergency from cpu %u",
1580		   irq->u.emerg.code);
1581	trace_kvm_s390_inject_vcpu(vcpu->vcpu_id, KVM_S390_INT_EMERGENCY,
1582				   irq->u.emerg.code, 0);
1583
1584	/* sending vcpu invalid */
1585	if (kvm_get_vcpu_by_id(vcpu->kvm, irq->u.emerg.code) == NULL)
1586		return -EINVAL;
1587
1588	set_bit(irq->u.emerg.code, li->sigp_emerg_pending);
1589	set_bit(IRQ_PEND_EXT_EMERGENCY, &li->pending_irqs);
1590	kvm_s390_set_cpuflags(vcpu, CPUSTAT_EXT_INT);
1591	return 0;
1592}
1593
1594static int __inject_mchk(struct kvm_vcpu *vcpu, struct kvm_s390_irq *irq)
1595{
1596	struct kvm_s390_local_interrupt *li = &vcpu->arch.local_int;
1597	struct kvm_s390_mchk_info *mchk = &li->irq.mchk;
1598
1599	vcpu->stat.inject_mchk++;
1600	VCPU_EVENT(vcpu, 3, "inject: machine check mcic 0x%llx",
1601		   irq->u.mchk.mcic);
1602	trace_kvm_s390_inject_vcpu(vcpu->vcpu_id, KVM_S390_MCHK, 0,
1603				   irq->u.mchk.mcic);
1604
1605	/*
1606	 * Because repressible machine checks can be indicated along with
1607	 * exigent machine checks (PoP, Chapter 11, Interruption action)
1608	 * we need to combine cr14, mcic and external damage code.
1609	 * Failing storage address and the logout area should not be or'ed
1610	 * together, we just indicate the last occurrence of the corresponding
1611	 * machine check
1612	 */
1613	mchk->cr14 |= irq->u.mchk.cr14;
1614	mchk->mcic |= irq->u.mchk.mcic;
1615	mchk->ext_damage_code |= irq->u.mchk.ext_damage_code;
1616	mchk->failing_storage_address = irq->u.mchk.failing_storage_address;
1617	memcpy(&mchk->fixed_logout, &irq->u.mchk.fixed_logout,
1618	       sizeof(mchk->fixed_logout));
1619	if (mchk->mcic & MCHK_EX_MASK)
1620		set_bit(IRQ_PEND_MCHK_EX, &li->pending_irqs);
1621	else if (mchk->mcic & MCHK_REP_MASK)
1622		set_bit(IRQ_PEND_MCHK_REP,  &li->pending_irqs);
1623	return 0;
1624}
1625
1626static int __inject_ckc(struct kvm_vcpu *vcpu)
1627{
1628	struct kvm_s390_local_interrupt *li = &vcpu->arch.local_int;
1629
1630	vcpu->stat.inject_ckc++;
1631	VCPU_EVENT(vcpu, 3, "%s", "inject: clock comparator external");
1632	trace_kvm_s390_inject_vcpu(vcpu->vcpu_id, KVM_S390_INT_CLOCK_COMP,
1633				   0, 0);
1634
1635	set_bit(IRQ_PEND_EXT_CLOCK_COMP, &li->pending_irqs);
1636	kvm_s390_set_cpuflags(vcpu, CPUSTAT_EXT_INT);
1637	return 0;
1638}
1639
1640static int __inject_cpu_timer(struct kvm_vcpu *vcpu)
1641{
1642	struct kvm_s390_local_interrupt *li = &vcpu->arch.local_int;
1643
1644	vcpu->stat.inject_cputm++;
1645	VCPU_EVENT(vcpu, 3, "%s", "inject: cpu timer external");
1646	trace_kvm_s390_inject_vcpu(vcpu->vcpu_id, KVM_S390_INT_CPU_TIMER,
1647				   0, 0);
1648
1649	set_bit(IRQ_PEND_EXT_CPU_TIMER, &li->pending_irqs);
1650	kvm_s390_set_cpuflags(vcpu, CPUSTAT_EXT_INT);
1651	return 0;
1652}
1653
1654static struct kvm_s390_interrupt_info *get_io_int(struct kvm *kvm,
1655						  int isc, u32 schid)
1656{
1657	struct kvm_s390_float_interrupt *fi = &kvm->arch.float_int;
1658	struct list_head *isc_list = &fi->lists[FIRQ_LIST_IO_ISC_0 + isc];
1659	struct kvm_s390_interrupt_info *iter;
1660	u16 id = (schid & 0xffff0000U) >> 16;
1661	u16 nr = schid & 0x0000ffffU;
1662
1663	spin_lock(&fi->lock);
1664	list_for_each_entry(iter, isc_list, list) {
1665		if (schid && (id != iter->io.subchannel_id ||
1666			      nr != iter->io.subchannel_nr))
1667			continue;
1668		/* found an appropriate entry */
1669		list_del_init(&iter->list);
1670		fi->counters[FIRQ_CNTR_IO] -= 1;
1671		if (list_empty(isc_list))
1672			clear_bit(isc_to_irq_type(isc), &fi->pending_irqs);
1673		spin_unlock(&fi->lock);
1674		return iter;
1675	}
1676	spin_unlock(&fi->lock);
1677	return NULL;
1678}
1679
1680static struct kvm_s390_interrupt_info *get_top_io_int(struct kvm *kvm,
1681						      u64 isc_mask, u32 schid)
1682{
1683	struct kvm_s390_interrupt_info *inti = NULL;
1684	int isc;
1685
1686	for (isc = 0; isc <= MAX_ISC && !inti; isc++) {
1687		if (isc_mask & isc_to_isc_bits(isc))
1688			inti = get_io_int(kvm, isc, schid);
1689	}
1690	return inti;
1691}
1692
1693static int get_top_gisa_isc(struct kvm *kvm, u64 isc_mask, u32 schid)
1694{
1695	struct kvm_s390_gisa_interrupt *gi = &kvm->arch.gisa_int;
1696	unsigned long active_mask;
1697	int isc;
1698
1699	if (schid)
1700		goto out;
1701	if (!gi->origin)
1702		goto out;
1703
1704	active_mask = (isc_mask & gisa_get_ipm(gi->origin) << 24) << 32;
1705	while (active_mask) {
1706		isc = __fls(active_mask) ^ (BITS_PER_LONG - 1);
1707		if (gisa_tac_ipm_gisc(gi->origin, isc))
1708			return isc;
1709		clear_bit_inv(isc, &active_mask);
1710	}
1711out:
1712	return -EINVAL;
1713}
1714
1715/*
1716 * Dequeue and return an I/O interrupt matching any of the interruption
1717 * subclasses as designated by the isc mask in cr6 and the schid (if != 0).
1718 * Take into account the interrupts pending in the interrupt list and in GISA.
1719 *
1720 * Note that for a guest that does not enable I/O interrupts
1721 * but relies on TPI, a flood of classic interrupts may starve
1722 * out adapter interrupts on the same isc. Linux does not do
1723 * that, and it is possible to work around the issue by configuring
1724 * different iscs for classic and adapter interrupts in the guest,
1725 * but we may want to revisit this in the future.
1726 */
1727struct kvm_s390_interrupt_info *kvm_s390_get_io_int(struct kvm *kvm,
1728						    u64 isc_mask, u32 schid)
1729{
1730	struct kvm_s390_gisa_interrupt *gi = &kvm->arch.gisa_int;
1731	struct kvm_s390_interrupt_info *inti, *tmp_inti;
1732	int isc;
1733
1734	inti = get_top_io_int(kvm, isc_mask, schid);
1735
1736	isc = get_top_gisa_isc(kvm, isc_mask, schid);
1737	if (isc < 0)
1738		/* no AI in GISA */
1739		goto out;
1740
1741	if (!inti)
1742		/* AI in GISA but no classical IO int */
1743		goto gisa_out;
1744
1745	/* both types of interrupts present */
1746	if (int_word_to_isc(inti->io.io_int_word) <= isc) {
1747		/* classical IO int with higher priority */
1748		gisa_set_ipm_gisc(gi->origin, isc);
1749		goto out;
1750	}
1751gisa_out:
1752	tmp_inti = kzalloc(sizeof(*inti), GFP_KERNEL_ACCOUNT);
1753	if (tmp_inti) {
1754		tmp_inti->type = KVM_S390_INT_IO(1, 0, 0, 0);
1755		tmp_inti->io.io_int_word = isc_to_int_word(isc);
1756		if (inti)
1757			kvm_s390_reinject_io_int(kvm, inti);
1758		inti = tmp_inti;
1759	} else
1760		gisa_set_ipm_gisc(gi->origin, isc);
1761out:
1762	return inti;
1763}
1764
1765static int __inject_service(struct kvm *kvm,
1766			     struct kvm_s390_interrupt_info *inti)
1767{
1768	struct kvm_s390_float_interrupt *fi = &kvm->arch.float_int;
1769
1770	kvm->stat.inject_service_signal++;
1771	spin_lock(&fi->lock);
1772	fi->srv_signal.ext_params |= inti->ext.ext_params & SCCB_EVENT_PENDING;
1773
1774	/* We always allow events, track them separately from the sccb ints */
1775	if (fi->srv_signal.ext_params & SCCB_EVENT_PENDING)
1776		set_bit(IRQ_PEND_EXT_SERVICE_EV, &fi->pending_irqs);
1777
1778	/*
1779	 * Early versions of the QEMU s390 bios will inject several
1780	 * service interrupts after another without handling a
1781	 * condition code indicating busy.
1782	 * We will silently ignore those superfluous sccb values.
1783	 * A future version of QEMU will take care of serialization
1784	 * of servc requests
1785	 */
1786	if (fi->srv_signal.ext_params & SCCB_MASK)
1787		goto out;
1788	fi->srv_signal.ext_params |= inti->ext.ext_params & SCCB_MASK;
1789	set_bit(IRQ_PEND_EXT_SERVICE, &fi->pending_irqs);
1790out:
1791	spin_unlock(&fi->lock);
1792	kfree(inti);
1793	return 0;
1794}
1795
1796static int __inject_virtio(struct kvm *kvm,
1797			    struct kvm_s390_interrupt_info *inti)
1798{
1799	struct kvm_s390_float_interrupt *fi = &kvm->arch.float_int;
1800
1801	kvm->stat.inject_virtio++;
1802	spin_lock(&fi->lock);
1803	if (fi->counters[FIRQ_CNTR_VIRTIO] >= KVM_S390_MAX_VIRTIO_IRQS) {
1804		spin_unlock(&fi->lock);
1805		return -EBUSY;
1806	}
1807	fi->counters[FIRQ_CNTR_VIRTIO] += 1;
1808	list_add_tail(&inti->list, &fi->lists[FIRQ_LIST_VIRTIO]);
1809	set_bit(IRQ_PEND_VIRTIO, &fi->pending_irqs);
1810	spin_unlock(&fi->lock);
1811	return 0;
1812}
1813
1814static int __inject_pfault_done(struct kvm *kvm,
1815				 struct kvm_s390_interrupt_info *inti)
1816{
1817	struct kvm_s390_float_interrupt *fi = &kvm->arch.float_int;
1818
1819	kvm->stat.inject_pfault_done++;
1820	spin_lock(&fi->lock);
1821	if (fi->counters[FIRQ_CNTR_PFAULT] >=
1822		(ASYNC_PF_PER_VCPU * KVM_MAX_VCPUS)) {
1823		spin_unlock(&fi->lock);
1824		return -EBUSY;
1825	}
1826	fi->counters[FIRQ_CNTR_PFAULT] += 1;
1827	list_add_tail(&inti->list, &fi->lists[FIRQ_LIST_PFAULT]);
1828	set_bit(IRQ_PEND_PFAULT_DONE, &fi->pending_irqs);
1829	spin_unlock(&fi->lock);
1830	return 0;
1831}
1832
1833#define CR_PENDING_SUBCLASS 28
1834static int __inject_float_mchk(struct kvm *kvm,
1835				struct kvm_s390_interrupt_info *inti)
1836{
1837	struct kvm_s390_float_interrupt *fi = &kvm->arch.float_int;
1838
1839	kvm->stat.inject_float_mchk++;
1840	spin_lock(&fi->lock);
1841	fi->mchk.cr14 |= inti->mchk.cr14 & (1UL << CR_PENDING_SUBCLASS);
1842	fi->mchk.mcic |= inti->mchk.mcic;
1843	set_bit(IRQ_PEND_MCHK_REP, &fi->pending_irqs);
1844	spin_unlock(&fi->lock);
1845	kfree(inti);
1846	return 0;
1847}
1848
1849static int __inject_io(struct kvm *kvm, struct kvm_s390_interrupt_info *inti)
1850{
1851	struct kvm_s390_gisa_interrupt *gi = &kvm->arch.gisa_int;
1852	struct kvm_s390_float_interrupt *fi;
1853	struct list_head *list;
1854	int isc;
1855
1856	kvm->stat.inject_io++;
1857	isc = int_word_to_isc(inti->io.io_int_word);
1858
1859	/*
1860	 * We do not use the lock checking variant as this is just a
1861	 * performance optimization and we do not hold the lock here.
1862	 * This is ok as the code will pick interrupts from both "lists"
1863	 * for delivery.
1864	 */
1865	if (gi->origin && inti->type & KVM_S390_INT_IO_AI_MASK) {
1866		VM_EVENT(kvm, 4, "%s isc %1u", "inject: I/O (AI/gisa)", isc);
1867		gisa_set_ipm_gisc(gi->origin, isc);
1868		kfree(inti);
1869		return 0;
1870	}
1871
1872	fi = &kvm->arch.float_int;
1873	spin_lock(&fi->lock);
1874	if (fi->counters[FIRQ_CNTR_IO] >= KVM_S390_MAX_FLOAT_IRQS) {
1875		spin_unlock(&fi->lock);
1876		return -EBUSY;
1877	}
1878	fi->counters[FIRQ_CNTR_IO] += 1;
1879
1880	if (inti->type & KVM_S390_INT_IO_AI_MASK)
1881		VM_EVENT(kvm, 4, "%s", "inject: I/O (AI)");
1882	else
1883		VM_EVENT(kvm, 4, "inject: I/O %x ss %x schid %04x",
1884			inti->io.subchannel_id >> 8,
1885			inti->io.subchannel_id >> 1 & 0x3,
1886			inti->io.subchannel_nr);
1887	list = &fi->lists[FIRQ_LIST_IO_ISC_0 + isc];
1888	list_add_tail(&inti->list, list);
1889	set_bit(isc_to_irq_type(isc), &fi->pending_irqs);
1890	spin_unlock(&fi->lock);
1891	return 0;
1892}
1893
1894/*
1895 * Find a destination VCPU for a floating irq and kick it.
1896 */
1897static void __floating_irq_kick(struct kvm *kvm, u64 type)
1898{
1899	struct kvm_vcpu *dst_vcpu;
1900	int sigcpu, online_vcpus, nr_tries = 0;
1901
1902	online_vcpus = atomic_read(&kvm->online_vcpus);
1903	if (!online_vcpus)
1904		return;
1905
1906	for (sigcpu = kvm->arch.float_int.last_sleep_cpu; ; sigcpu++) {
1907		sigcpu %= online_vcpus;
1908		dst_vcpu = kvm_get_vcpu(kvm, sigcpu);
1909		if (!is_vcpu_stopped(dst_vcpu))
1910			break;
1911		/* avoid endless loops if all vcpus are stopped */
1912		if (nr_tries++ >= online_vcpus)
1913			return;
1914	}
1915
1916	/* make the VCPU drop out of the SIE, or wake it up if sleeping */
1917	switch (type) {
1918	case KVM_S390_MCHK:
1919		kvm_s390_set_cpuflags(dst_vcpu, CPUSTAT_STOP_INT);
1920		break;
1921	case KVM_S390_INT_IO_MIN...KVM_S390_INT_IO_MAX:
1922		if (!(type & KVM_S390_INT_IO_AI_MASK &&
1923		      kvm->arch.gisa_int.origin) ||
1924		      kvm_s390_pv_cpu_get_handle(dst_vcpu))
1925			kvm_s390_set_cpuflags(dst_vcpu, CPUSTAT_IO_INT);
1926		break;
1927	default:
1928		kvm_s390_set_cpuflags(dst_vcpu, CPUSTAT_EXT_INT);
1929		break;
1930	}
1931	kvm_s390_vcpu_wakeup(dst_vcpu);
1932}
1933
1934static int __inject_vm(struct kvm *kvm, struct kvm_s390_interrupt_info *inti)
1935{
1936	u64 type = READ_ONCE(inti->type);
1937	int rc;
1938
1939	switch (type) {
1940	case KVM_S390_MCHK:
1941		rc = __inject_float_mchk(kvm, inti);
1942		break;
1943	case KVM_S390_INT_VIRTIO:
1944		rc = __inject_virtio(kvm, inti);
1945		break;
1946	case KVM_S390_INT_SERVICE:
1947		rc = __inject_service(kvm, inti);
1948		break;
1949	case KVM_S390_INT_PFAULT_DONE:
1950		rc = __inject_pfault_done(kvm, inti);
1951		break;
1952	case KVM_S390_INT_IO_MIN...KVM_S390_INT_IO_MAX:
1953		rc = __inject_io(kvm, inti);
1954		break;
1955	default:
1956		rc = -EINVAL;
1957	}
1958	if (rc)
1959		return rc;
1960
1961	__floating_irq_kick(kvm, type);
1962	return 0;
1963}
1964
1965int kvm_s390_inject_vm(struct kvm *kvm,
1966		       struct kvm_s390_interrupt *s390int)
1967{
1968	struct kvm_s390_interrupt_info *inti;
1969	int rc;
1970
1971	inti = kzalloc(sizeof(*inti), GFP_KERNEL_ACCOUNT);
1972	if (!inti)
1973		return -ENOMEM;
1974
1975	inti->type = s390int->type;
1976	switch (inti->type) {
1977	case KVM_S390_INT_VIRTIO:
1978		VM_EVENT(kvm, 5, "inject: virtio parm:%x,parm64:%llx",
1979			 s390int->parm, s390int->parm64);
1980		inti->ext.ext_params = s390int->parm;
1981		inti->ext.ext_params2 = s390int->parm64;
1982		break;
1983	case KVM_S390_INT_SERVICE:
1984		VM_EVENT(kvm, 4, "inject: sclp parm:%x", s390int->parm);
1985		inti->ext.ext_params = s390int->parm;
1986		break;
1987	case KVM_S390_INT_PFAULT_DONE:
1988		inti->ext.ext_params2 = s390int->parm64;
1989		break;
1990	case KVM_S390_MCHK:
1991		VM_EVENT(kvm, 3, "inject: machine check mcic 0x%llx",
1992			 s390int->parm64);
1993		inti->mchk.cr14 = s390int->parm; /* upper bits are not used */
1994		inti->mchk.mcic = s390int->parm64;
1995		break;
1996	case KVM_S390_INT_IO_MIN...KVM_S390_INT_IO_MAX:
1997		inti->io.subchannel_id = s390int->parm >> 16;
1998		inti->io.subchannel_nr = s390int->parm & 0x0000ffffu;
1999		inti->io.io_int_parm = s390int->parm64 >> 32;
2000		inti->io.io_int_word = s390int->parm64 & 0x00000000ffffffffull;
2001		break;
2002	default:
2003		kfree(inti);
2004		return -EINVAL;
2005	}
2006	trace_kvm_s390_inject_vm(s390int->type, s390int->parm, s390int->parm64,
2007				 2);
2008
2009	rc = __inject_vm(kvm, inti);
2010	if (rc)
2011		kfree(inti);
2012	return rc;
2013}
2014
2015int kvm_s390_reinject_io_int(struct kvm *kvm,
2016			      struct kvm_s390_interrupt_info *inti)
2017{
2018	return __inject_vm(kvm, inti);
2019}
2020
2021int s390int_to_s390irq(struct kvm_s390_interrupt *s390int,
2022		       struct kvm_s390_irq *irq)
2023{
2024	irq->type = s390int->type;
2025	switch (irq->type) {
2026	case KVM_S390_PROGRAM_INT:
2027		if (s390int->parm & 0xffff0000)
2028			return -EINVAL;
2029		irq->u.pgm.code = s390int->parm;
2030		break;
2031	case KVM_S390_SIGP_SET_PREFIX:
2032		irq->u.prefix.address = s390int->parm;
2033		break;
2034	case KVM_S390_SIGP_STOP:
2035		irq->u.stop.flags = s390int->parm;
2036		break;
2037	case KVM_S390_INT_EXTERNAL_CALL:
2038		if (s390int->parm & 0xffff0000)
2039			return -EINVAL;
2040		irq->u.extcall.code = s390int->parm;
2041		break;
2042	case KVM_S390_INT_EMERGENCY:
2043		if (s390int->parm & 0xffff0000)
2044			return -EINVAL;
2045		irq->u.emerg.code = s390int->parm;
2046		break;
2047	case KVM_S390_MCHK:
2048		irq->u.mchk.mcic = s390int->parm64;
2049		break;
2050	case KVM_S390_INT_PFAULT_INIT:
2051		irq->u.ext.ext_params = s390int->parm;
2052		irq->u.ext.ext_params2 = s390int->parm64;
2053		break;
2054	case KVM_S390_RESTART:
2055	case KVM_S390_INT_CLOCK_COMP:
2056	case KVM_S390_INT_CPU_TIMER:
2057		break;
2058	default:
2059		return -EINVAL;
2060	}
2061	return 0;
2062}
2063
2064int kvm_s390_is_stop_irq_pending(struct kvm_vcpu *vcpu)
2065{
2066	struct kvm_s390_local_interrupt *li = &vcpu->arch.local_int;
2067
2068	return test_bit(IRQ_PEND_SIGP_STOP, &li->pending_irqs);
2069}
2070
2071int kvm_s390_is_restart_irq_pending(struct kvm_vcpu *vcpu)
2072{
2073	struct kvm_s390_local_interrupt *li = &vcpu->arch.local_int;
2074
2075	return test_bit(IRQ_PEND_RESTART, &li->pending_irqs);
2076}
2077
2078void kvm_s390_clear_stop_irq(struct kvm_vcpu *vcpu)
2079{
2080	struct kvm_s390_local_interrupt *li = &vcpu->arch.local_int;
2081
2082	spin_lock(&li->lock);
2083	li->irq.stop.flags = 0;
2084	clear_bit(IRQ_PEND_SIGP_STOP, &li->pending_irqs);
2085	spin_unlock(&li->lock);
2086}
2087
2088static int do_inject_vcpu(struct kvm_vcpu *vcpu, struct kvm_s390_irq *irq)
2089{
2090	int rc;
2091
2092	switch (irq->type) {
2093	case KVM_S390_PROGRAM_INT:
2094		rc = __inject_prog(vcpu, irq);
2095		break;
2096	case KVM_S390_SIGP_SET_PREFIX:
2097		rc = __inject_set_prefix(vcpu, irq);
2098		break;
2099	case KVM_S390_SIGP_STOP:
2100		rc = __inject_sigp_stop(vcpu, irq);
2101		break;
2102	case KVM_S390_RESTART:
2103		rc = __inject_sigp_restart(vcpu);
2104		break;
2105	case KVM_S390_INT_CLOCK_COMP:
2106		rc = __inject_ckc(vcpu);
2107		break;
2108	case KVM_S390_INT_CPU_TIMER:
2109		rc = __inject_cpu_timer(vcpu);
2110		break;
2111	case KVM_S390_INT_EXTERNAL_CALL:
2112		rc = __inject_extcall(vcpu, irq);
2113		break;
2114	case KVM_S390_INT_EMERGENCY:
2115		rc = __inject_sigp_emergency(vcpu, irq);
2116		break;
2117	case KVM_S390_MCHK:
2118		rc = __inject_mchk(vcpu, irq);
2119		break;
2120	case KVM_S390_INT_PFAULT_INIT:
2121		rc = __inject_pfault_init(vcpu, irq);
2122		break;
2123	case KVM_S390_INT_VIRTIO:
2124	case KVM_S390_INT_SERVICE:
2125	case KVM_S390_INT_IO_MIN...KVM_S390_INT_IO_MAX:
2126	default:
2127		rc = -EINVAL;
2128	}
2129
2130	return rc;
2131}
2132
2133int kvm_s390_inject_vcpu(struct kvm_vcpu *vcpu, struct kvm_s390_irq *irq)
2134{
2135	struct kvm_s390_local_interrupt *li = &vcpu->arch.local_int;
2136	int rc;
2137
2138	spin_lock(&li->lock);
2139	rc = do_inject_vcpu(vcpu, irq);
2140	spin_unlock(&li->lock);
2141	if (!rc)
2142		kvm_s390_vcpu_wakeup(vcpu);
2143	return rc;
2144}
2145
2146static inline void clear_irq_list(struct list_head *_list)
2147{
2148	struct kvm_s390_interrupt_info *inti, *n;
2149
2150	list_for_each_entry_safe(inti, n, _list, list) {
2151		list_del(&inti->list);
2152		kfree(inti);
2153	}
2154}
2155
2156static void inti_to_irq(struct kvm_s390_interrupt_info *inti,
2157		       struct kvm_s390_irq *irq)
2158{
2159	irq->type = inti->type;
2160	switch (inti->type) {
2161	case KVM_S390_INT_PFAULT_INIT:
2162	case KVM_S390_INT_PFAULT_DONE:
2163	case KVM_S390_INT_VIRTIO:
2164		irq->u.ext = inti->ext;
2165		break;
2166	case KVM_S390_INT_IO_MIN...KVM_S390_INT_IO_MAX:
2167		irq->u.io = inti->io;
2168		break;
2169	}
2170}
2171
2172void kvm_s390_clear_float_irqs(struct kvm *kvm)
2173{
2174	struct kvm_s390_float_interrupt *fi = &kvm->arch.float_int;
2175	int i;
2176
2177	mutex_lock(&kvm->lock);
2178	if (!kvm_s390_pv_is_protected(kvm))
2179		fi->masked_irqs = 0;
2180	mutex_unlock(&kvm->lock);
2181	spin_lock(&fi->lock);
2182	fi->pending_irqs = 0;
2183	memset(&fi->srv_signal, 0, sizeof(fi->srv_signal));
2184	memset(&fi->mchk, 0, sizeof(fi->mchk));
2185	for (i = 0; i < FIRQ_LIST_COUNT; i++)
2186		clear_irq_list(&fi->lists[i]);
2187	for (i = 0; i < FIRQ_MAX_COUNT; i++)
2188		fi->counters[i] = 0;
2189	spin_unlock(&fi->lock);
2190	kvm_s390_gisa_clear(kvm);
2191};
2192
2193static int get_all_floating_irqs(struct kvm *kvm, u8 __user *usrbuf, u64 len)
2194{
2195	struct kvm_s390_gisa_interrupt *gi = &kvm->arch.gisa_int;
2196	struct kvm_s390_interrupt_info *inti;
2197	struct kvm_s390_float_interrupt *fi;
2198	struct kvm_s390_irq *buf;
2199	struct kvm_s390_irq *irq;
2200	int max_irqs;
2201	int ret = 0;
2202	int n = 0;
2203	int i;
2204
2205	if (len > KVM_S390_FLIC_MAX_BUFFER || len == 0)
2206		return -EINVAL;
2207
2208	/*
2209	 * We are already using -ENOMEM to signal
2210	 * userspace it may retry with a bigger buffer,
2211	 * so we need to use something else for this case
2212	 */
2213	buf = vzalloc(len);
2214	if (!buf)
2215		return -ENOBUFS;
2216
2217	max_irqs = len / sizeof(struct kvm_s390_irq);
2218
2219	if (gi->origin && gisa_get_ipm(gi->origin)) {
2220		for (i = 0; i <= MAX_ISC; i++) {
2221			if (n == max_irqs) {
2222				/* signal userspace to try again */
2223				ret = -ENOMEM;
2224				goto out_nolock;
2225			}
2226			if (gisa_tac_ipm_gisc(gi->origin, i)) {
2227				irq = (struct kvm_s390_irq *) &buf[n];
2228				irq->type = KVM_S390_INT_IO(1, 0, 0, 0);
2229				irq->u.io.io_int_word = isc_to_int_word(i);
2230				n++;
2231			}
2232		}
2233	}
2234	fi = &kvm->arch.float_int;
2235	spin_lock(&fi->lock);
2236	for (i = 0; i < FIRQ_LIST_COUNT; i++) {
2237		list_for_each_entry(inti, &fi->lists[i], list) {
2238			if (n == max_irqs) {
2239				/* signal userspace to try again */
2240				ret = -ENOMEM;
2241				goto out;
2242			}
2243			inti_to_irq(inti, &buf[n]);
2244			n++;
2245		}
2246	}
2247	if (test_bit(IRQ_PEND_EXT_SERVICE, &fi->pending_irqs) ||
2248	    test_bit(IRQ_PEND_EXT_SERVICE_EV, &fi->pending_irqs)) {
2249		if (n == max_irqs) {
2250			/* signal userspace to try again */
2251			ret = -ENOMEM;
2252			goto out;
2253		}
2254		irq = (struct kvm_s390_irq *) &buf[n];
2255		irq->type = KVM_S390_INT_SERVICE;
2256		irq->u.ext = fi->srv_signal;
2257		n++;
2258	}
2259	if (test_bit(IRQ_PEND_MCHK_REP, &fi->pending_irqs)) {
2260		if (n == max_irqs) {
2261				/* signal userspace to try again */
2262				ret = -ENOMEM;
2263				goto out;
2264		}
2265		irq = (struct kvm_s390_irq *) &buf[n];
2266		irq->type = KVM_S390_MCHK;
2267		irq->u.mchk = fi->mchk;
2268		n++;
2269}
2270
2271out:
2272	spin_unlock(&fi->lock);
2273out_nolock:
2274	if (!ret && n > 0) {
2275		if (copy_to_user(usrbuf, buf, sizeof(struct kvm_s390_irq) * n))
2276			ret = -EFAULT;
2277	}
2278	vfree(buf);
2279
2280	return ret < 0 ? ret : n;
2281}
2282
2283static int flic_ais_mode_get_all(struct kvm *kvm, struct kvm_device_attr *attr)
2284{
2285	struct kvm_s390_float_interrupt *fi = &kvm->arch.float_int;
2286	struct kvm_s390_ais_all ais;
2287
2288	if (attr->attr < sizeof(ais))
2289		return -EINVAL;
2290
2291	if (!test_kvm_facility(kvm, 72))
2292		return -EOPNOTSUPP;
2293
2294	mutex_lock(&fi->ais_lock);
2295	ais.simm = fi->simm;
2296	ais.nimm = fi->nimm;
2297	mutex_unlock(&fi->ais_lock);
2298
2299	if (copy_to_user((void __user *)attr->addr, &ais, sizeof(ais)))
2300		return -EFAULT;
2301
2302	return 0;
2303}
2304
2305static int flic_get_attr(struct kvm_device *dev, struct kvm_device_attr *attr)
2306{
2307	int r;
2308
2309	switch (attr->group) {
2310	case KVM_DEV_FLIC_GET_ALL_IRQS:
2311		r = get_all_floating_irqs(dev->kvm, (u8 __user *) attr->addr,
2312					  attr->attr);
2313		break;
2314	case KVM_DEV_FLIC_AISM_ALL:
2315		r = flic_ais_mode_get_all(dev->kvm, attr);
2316		break;
2317	default:
2318		r = -EINVAL;
2319	}
2320
2321	return r;
2322}
2323
2324static inline int copy_irq_from_user(struct kvm_s390_interrupt_info *inti,
2325				     u64 addr)
2326{
2327	struct kvm_s390_irq __user *uptr = (struct kvm_s390_irq __user *) addr;
2328	void *target = NULL;
2329	void __user *source;
2330	u64 size;
2331
2332	if (get_user(inti->type, (u64 __user *)addr))
2333		return -EFAULT;
2334
2335	switch (inti->type) {
2336	case KVM_S390_INT_PFAULT_INIT:
2337	case KVM_S390_INT_PFAULT_DONE:
2338	case KVM_S390_INT_VIRTIO:
2339	case KVM_S390_INT_SERVICE:
2340		target = (void *) &inti->ext;
2341		source = &uptr->u.ext;
2342		size = sizeof(inti->ext);
2343		break;
2344	case KVM_S390_INT_IO_MIN...KVM_S390_INT_IO_MAX:
2345		target = (void *) &inti->io;
2346		source = &uptr->u.io;
2347		size = sizeof(inti->io);
2348		break;
2349	case KVM_S390_MCHK:
2350		target = (void *) &inti->mchk;
2351		source = &uptr->u.mchk;
2352		size = sizeof(inti->mchk);
2353		break;
2354	default:
2355		return -EINVAL;
2356	}
2357
2358	if (copy_from_user(target, source, size))
2359		return -EFAULT;
2360
2361	return 0;
2362}
2363
2364static int enqueue_floating_irq(struct kvm_device *dev,
2365				struct kvm_device_attr *attr)
2366{
2367	struct kvm_s390_interrupt_info *inti = NULL;
2368	int r = 0;
2369	int len = attr->attr;
2370
2371	if (len % sizeof(struct kvm_s390_irq) != 0)
2372		return -EINVAL;
2373	else if (len > KVM_S390_FLIC_MAX_BUFFER)
2374		return -EINVAL;
2375
2376	while (len >= sizeof(struct kvm_s390_irq)) {
2377		inti = kzalloc(sizeof(*inti), GFP_KERNEL_ACCOUNT);
2378		if (!inti)
2379			return -ENOMEM;
2380
2381		r = copy_irq_from_user(inti, attr->addr);
2382		if (r) {
2383			kfree(inti);
2384			return r;
2385		}
2386		r = __inject_vm(dev->kvm, inti);
2387		if (r) {
2388			kfree(inti);
2389			return r;
2390		}
2391		len -= sizeof(struct kvm_s390_irq);
2392		attr->addr += sizeof(struct kvm_s390_irq);
2393	}
2394
2395	return r;
2396}
2397
2398static struct s390_io_adapter *get_io_adapter(struct kvm *kvm, unsigned int id)
2399{
2400	if (id >= MAX_S390_IO_ADAPTERS)
2401		return NULL;
2402	id = array_index_nospec(id, MAX_S390_IO_ADAPTERS);
2403	return kvm->arch.adapters[id];
2404}
2405
2406static int register_io_adapter(struct kvm_device *dev,
2407			       struct kvm_device_attr *attr)
2408{
2409	struct s390_io_adapter *adapter;
2410	struct kvm_s390_io_adapter adapter_info;
2411
2412	if (copy_from_user(&adapter_info,
2413			   (void __user *)attr->addr, sizeof(adapter_info)))
2414		return -EFAULT;
2415
2416	if (adapter_info.id >= MAX_S390_IO_ADAPTERS)
2417		return -EINVAL;
2418
2419	adapter_info.id = array_index_nospec(adapter_info.id,
2420					     MAX_S390_IO_ADAPTERS);
2421
2422	if (dev->kvm->arch.adapters[adapter_info.id] != NULL)
2423		return -EINVAL;
2424
2425	adapter = kzalloc(sizeof(*adapter), GFP_KERNEL_ACCOUNT);
2426	if (!adapter)
2427		return -ENOMEM;
2428
2429	adapter->id = adapter_info.id;
2430	adapter->isc = adapter_info.isc;
2431	adapter->maskable = adapter_info.maskable;
2432	adapter->masked = false;
2433	adapter->swap = adapter_info.swap;
2434	adapter->suppressible = (adapter_info.flags) &
2435				KVM_S390_ADAPTER_SUPPRESSIBLE;
2436	dev->kvm->arch.adapters[adapter->id] = adapter;
2437
2438	return 0;
2439}
2440
2441int kvm_s390_mask_adapter(struct kvm *kvm, unsigned int id, bool masked)
2442{
2443	int ret;
2444	struct s390_io_adapter *adapter = get_io_adapter(kvm, id);
2445
2446	if (!adapter || !adapter->maskable)
2447		return -EINVAL;
2448	ret = adapter->masked;
2449	adapter->masked = masked;
2450	return ret;
2451}
2452
2453void kvm_s390_destroy_adapters(struct kvm *kvm)
2454{
2455	int i;
2456
2457	for (i = 0; i < MAX_S390_IO_ADAPTERS; i++)
2458		kfree(kvm->arch.adapters[i]);
2459}
2460
2461static int modify_io_adapter(struct kvm_device *dev,
2462			     struct kvm_device_attr *attr)
2463{
2464	struct kvm_s390_io_adapter_req req;
2465	struct s390_io_adapter *adapter;
2466	int ret;
2467
2468	if (copy_from_user(&req, (void __user *)attr->addr, sizeof(req)))
2469		return -EFAULT;
2470
2471	adapter = get_io_adapter(dev->kvm, req.id);
2472	if (!adapter)
2473		return -EINVAL;
2474	switch (req.type) {
2475	case KVM_S390_IO_ADAPTER_MASK:
2476		ret = kvm_s390_mask_adapter(dev->kvm, req.id, req.mask);
2477		if (ret > 0)
2478			ret = 0;
2479		break;
2480	/*
2481	 * The following operations are no longer needed and therefore no-ops.
2482	 * The gpa to hva translation is done when an IRQ route is set up. The
2483	 * set_irq code uses get_user_pages_remote() to do the actual write.
2484	 */
2485	case KVM_S390_IO_ADAPTER_MAP:
2486	case KVM_S390_IO_ADAPTER_UNMAP:
2487		ret = 0;
2488		break;
2489	default:
2490		ret = -EINVAL;
2491	}
2492
2493	return ret;
2494}
2495
2496static int clear_io_irq(struct kvm *kvm, struct kvm_device_attr *attr)
2497
2498{
2499	const u64 isc_mask = 0xffUL << 24; /* all iscs set */
2500	u32 schid;
2501
2502	if (attr->flags)
2503		return -EINVAL;
2504	if (attr->attr != sizeof(schid))
2505		return -EINVAL;
2506	if (copy_from_user(&schid, (void __user *) attr->addr, sizeof(schid)))
2507		return -EFAULT;
2508	if (!schid)
2509		return -EINVAL;
2510	kfree(kvm_s390_get_io_int(kvm, isc_mask, schid));
2511	/*
2512	 * If userspace is conforming to the architecture, we can have at most
2513	 * one pending I/O interrupt per subchannel, so this is effectively a
2514	 * clear all.
2515	 */
2516	return 0;
2517}
2518
2519static int modify_ais_mode(struct kvm *kvm, struct kvm_device_attr *attr)
2520{
2521	struct kvm_s390_float_interrupt *fi = &kvm->arch.float_int;
2522	struct kvm_s390_ais_req req;
2523	int ret = 0;
2524
2525	if (!test_kvm_facility(kvm, 72))
2526		return -EOPNOTSUPP;
2527
2528	if (copy_from_user(&req, (void __user *)attr->addr, sizeof(req)))
2529		return -EFAULT;
2530
2531	if (req.isc > MAX_ISC)
2532		return -EINVAL;
2533
2534	trace_kvm_s390_modify_ais_mode(req.isc,
2535				       (fi->simm & AIS_MODE_MASK(req.isc)) ?
2536				       (fi->nimm & AIS_MODE_MASK(req.isc)) ?
2537				       2 : KVM_S390_AIS_MODE_SINGLE :
2538				       KVM_S390_AIS_MODE_ALL, req.mode);
2539
2540	mutex_lock(&fi->ais_lock);
2541	switch (req.mode) {
2542	case KVM_S390_AIS_MODE_ALL:
2543		fi->simm &= ~AIS_MODE_MASK(req.isc);
2544		fi->nimm &= ~AIS_MODE_MASK(req.isc);
2545		break;
2546	case KVM_S390_AIS_MODE_SINGLE:
2547		fi->simm |= AIS_MODE_MASK(req.isc);
2548		fi->nimm &= ~AIS_MODE_MASK(req.isc);
2549		break;
2550	default:
2551		ret = -EINVAL;
2552	}
2553	mutex_unlock(&fi->ais_lock);
2554
2555	return ret;
2556}
2557
2558static int kvm_s390_inject_airq(struct kvm *kvm,
2559				struct s390_io_adapter *adapter)
2560{
2561	struct kvm_s390_float_interrupt *fi = &kvm->arch.float_int;
2562	struct kvm_s390_interrupt s390int = {
2563		.type = KVM_S390_INT_IO(1, 0, 0, 0),
2564		.parm = 0,
2565		.parm64 = isc_to_int_word(adapter->isc),
2566	};
2567	int ret = 0;
2568
2569	if (!test_kvm_facility(kvm, 72) || !adapter->suppressible)
2570		return kvm_s390_inject_vm(kvm, &s390int);
2571
2572	mutex_lock(&fi->ais_lock);
2573	if (fi->nimm & AIS_MODE_MASK(adapter->isc)) {
2574		trace_kvm_s390_airq_suppressed(adapter->id, adapter->isc);
2575		goto out;
2576	}
2577
2578	ret = kvm_s390_inject_vm(kvm, &s390int);
2579	if (!ret && (fi->simm & AIS_MODE_MASK(adapter->isc))) {
2580		fi->nimm |= AIS_MODE_MASK(adapter->isc);
2581		trace_kvm_s390_modify_ais_mode(adapter->isc,
2582					       KVM_S390_AIS_MODE_SINGLE, 2);
2583	}
2584out:
2585	mutex_unlock(&fi->ais_lock);
2586	return ret;
2587}
2588
2589static int flic_inject_airq(struct kvm *kvm, struct kvm_device_attr *attr)
2590{
2591	unsigned int id = attr->attr;
2592	struct s390_io_adapter *adapter = get_io_adapter(kvm, id);
2593
2594	if (!adapter)
2595		return -EINVAL;
2596
2597	return kvm_s390_inject_airq(kvm, adapter);
2598}
2599
2600static int flic_ais_mode_set_all(struct kvm *kvm, struct kvm_device_attr *attr)
2601{
2602	struct kvm_s390_float_interrupt *fi = &kvm->arch.float_int;
2603	struct kvm_s390_ais_all ais;
2604
2605	if (!test_kvm_facility(kvm, 72))
2606		return -EOPNOTSUPP;
2607
2608	if (copy_from_user(&ais, (void __user *)attr->addr, sizeof(ais)))
2609		return -EFAULT;
2610
2611	mutex_lock(&fi->ais_lock);
2612	fi->simm = ais.simm;
2613	fi->nimm = ais.nimm;
2614	mutex_unlock(&fi->ais_lock);
2615
2616	return 0;
2617}
2618
2619static int flic_set_attr(struct kvm_device *dev, struct kvm_device_attr *attr)
2620{
2621	int r = 0;
2622	unsigned long i;
2623	struct kvm_vcpu *vcpu;
2624
2625	switch (attr->group) {
2626	case KVM_DEV_FLIC_ENQUEUE:
2627		r = enqueue_floating_irq(dev, attr);
2628		break;
2629	case KVM_DEV_FLIC_CLEAR_IRQS:
2630		kvm_s390_clear_float_irqs(dev->kvm);
2631		break;
2632	case KVM_DEV_FLIC_APF_ENABLE:
2633		if (kvm_is_ucontrol(dev->kvm))
2634			return -EINVAL;
2635		dev->kvm->arch.gmap->pfault_enabled = 1;
2636		break;
2637	case KVM_DEV_FLIC_APF_DISABLE_WAIT:
2638		if (kvm_is_ucontrol(dev->kvm))
2639			return -EINVAL;
2640		dev->kvm->arch.gmap->pfault_enabled = 0;
2641		/*
2642		 * Make sure no async faults are in transition when
2643		 * clearing the queues. So we don't need to worry
2644		 * about late coming workers.
2645		 */
2646		synchronize_srcu(&dev->kvm->srcu);
2647		kvm_for_each_vcpu(i, vcpu, dev->kvm)
2648			kvm_clear_async_pf_completion_queue(vcpu);
2649		break;
2650	case KVM_DEV_FLIC_ADAPTER_REGISTER:
2651		r = register_io_adapter(dev, attr);
2652		break;
2653	case KVM_DEV_FLIC_ADAPTER_MODIFY:
2654		r = modify_io_adapter(dev, attr);
2655		break;
2656	case KVM_DEV_FLIC_CLEAR_IO_IRQ:
2657		r = clear_io_irq(dev->kvm, attr);
2658		break;
2659	case KVM_DEV_FLIC_AISM:
2660		r = modify_ais_mode(dev->kvm, attr);
2661		break;
2662	case KVM_DEV_FLIC_AIRQ_INJECT:
2663		r = flic_inject_airq(dev->kvm, attr);
2664		break;
2665	case KVM_DEV_FLIC_AISM_ALL:
2666		r = flic_ais_mode_set_all(dev->kvm, attr);
2667		break;
2668	default:
2669		r = -EINVAL;
2670	}
2671
2672	return r;
2673}
2674
2675static int flic_has_attr(struct kvm_device *dev,
2676			     struct kvm_device_attr *attr)
2677{
2678	switch (attr->group) {
2679	case KVM_DEV_FLIC_GET_ALL_IRQS:
2680	case KVM_DEV_FLIC_ENQUEUE:
2681	case KVM_DEV_FLIC_CLEAR_IRQS:
2682	case KVM_DEV_FLIC_APF_ENABLE:
2683	case KVM_DEV_FLIC_APF_DISABLE_WAIT:
2684	case KVM_DEV_FLIC_ADAPTER_REGISTER:
2685	case KVM_DEV_FLIC_ADAPTER_MODIFY:
2686	case KVM_DEV_FLIC_CLEAR_IO_IRQ:
2687	case KVM_DEV_FLIC_AISM:
2688	case KVM_DEV_FLIC_AIRQ_INJECT:
2689	case KVM_DEV_FLIC_AISM_ALL:
2690		return 0;
2691	}
2692	return -ENXIO;
2693}
2694
2695static int flic_create(struct kvm_device *dev, u32 type)
2696{
2697	if (!dev)
2698		return -EINVAL;
2699	if (dev->kvm->arch.flic)
2700		return -EINVAL;
2701	dev->kvm->arch.flic = dev;
2702	return 0;
2703}
2704
2705static void flic_destroy(struct kvm_device *dev)
2706{
2707	dev->kvm->arch.flic = NULL;
2708	kfree(dev);
2709}
2710
2711/* s390 floating irq controller (flic) */
2712struct kvm_device_ops kvm_flic_ops = {
2713	.name = "kvm-flic",
2714	.get_attr = flic_get_attr,
2715	.set_attr = flic_set_attr,
2716	.has_attr = flic_has_attr,
2717	.create = flic_create,
2718	.destroy = flic_destroy,
2719};
2720
2721static unsigned long get_ind_bit(__u64 addr, unsigned long bit_nr, bool swap)
2722{
2723	unsigned long bit;
2724
2725	bit = bit_nr + (addr % PAGE_SIZE) * 8;
2726
2727	return swap ? (bit ^ (BITS_PER_LONG - 1)) : bit;
2728}
2729
2730static struct page *get_map_page(struct kvm *kvm, u64 uaddr)
2731{
2732	struct mm_struct *mm = kvm->mm;
2733	struct page *page = NULL;
2734	int locked = 1;
2735
2736	if (mmget_not_zero(mm)) {
2737		mmap_read_lock(mm);
2738		get_user_pages_remote(mm, uaddr, 1, FOLL_WRITE,
2739				      &page, &locked);
2740		if (locked)
2741			mmap_read_unlock(mm);
2742		mmput(mm);
2743	}
2744
2745	return page;
2746}
2747
2748static int adapter_indicators_set(struct kvm *kvm,
2749				  struct s390_io_adapter *adapter,
2750				  struct kvm_s390_adapter_int *adapter_int)
2751{
2752	unsigned long bit;
2753	int summary_set, idx;
2754	struct page *ind_page, *summary_page;
2755	void *map;
2756
2757	ind_page = get_map_page(kvm, adapter_int->ind_addr);
2758	if (!ind_page)
2759		return -1;
2760	summary_page = get_map_page(kvm, adapter_int->summary_addr);
2761	if (!summary_page) {
2762		put_page(ind_page);
2763		return -1;
2764	}
2765
2766	idx = srcu_read_lock(&kvm->srcu);
2767	map = page_address(ind_page);
2768	bit = get_ind_bit(adapter_int->ind_addr,
2769			  adapter_int->ind_offset, adapter->swap);
2770	set_bit(bit, map);
2771	mark_page_dirty(kvm, adapter_int->ind_addr >> PAGE_SHIFT);
2772	set_page_dirty_lock(ind_page);
2773	map = page_address(summary_page);
2774	bit = get_ind_bit(adapter_int->summary_addr,
2775			  adapter_int->summary_offset, adapter->swap);
2776	summary_set = test_and_set_bit(bit, map);
2777	mark_page_dirty(kvm, adapter_int->summary_addr >> PAGE_SHIFT);
2778	set_page_dirty_lock(summary_page);
2779	srcu_read_unlock(&kvm->srcu, idx);
2780
2781	put_page(ind_page);
2782	put_page(summary_page);
2783	return summary_set ? 0 : 1;
2784}
2785
2786/*
2787 * < 0 - not injected due to error
2788 * = 0 - coalesced, summary indicator already active
2789 * > 0 - injected interrupt
2790 */
2791static int set_adapter_int(struct kvm_kernel_irq_routing_entry *e,
2792			   struct kvm *kvm, int irq_source_id, int level,
2793			   bool line_status)
2794{
2795	int ret;
2796	struct s390_io_adapter *adapter;
2797
2798	/* We're only interested in the 0->1 transition. */
2799	if (!level)
2800		return 0;
2801	adapter = get_io_adapter(kvm, e->adapter.adapter_id);
2802	if (!adapter)
2803		return -1;
2804	ret = adapter_indicators_set(kvm, adapter, &e->adapter);
2805	if ((ret > 0) && !adapter->masked) {
2806		ret = kvm_s390_inject_airq(kvm, adapter);
2807		if (ret == 0)
2808			ret = 1;
2809	}
2810	return ret;
2811}
2812
2813/*
2814 * Inject the machine check to the guest.
2815 */
2816void kvm_s390_reinject_machine_check(struct kvm_vcpu *vcpu,
2817				     struct mcck_volatile_info *mcck_info)
2818{
2819	struct kvm_s390_interrupt_info inti;
2820	struct kvm_s390_irq irq;
2821	struct kvm_s390_mchk_info *mchk;
2822	union mci mci;
2823	__u64 cr14 = 0;         /* upper bits are not used */
2824	int rc;
2825
2826	mci.val = mcck_info->mcic;
2827	if (mci.sr)
2828		cr14 |= CR14_RECOVERY_SUBMASK;
2829	if (mci.dg)
2830		cr14 |= CR14_DEGRADATION_SUBMASK;
2831	if (mci.w)
2832		cr14 |= CR14_WARNING_SUBMASK;
2833
2834	mchk = mci.ck ? &inti.mchk : &irq.u.mchk;
2835	mchk->cr14 = cr14;
2836	mchk->mcic = mcck_info->mcic;
2837	mchk->ext_damage_code = mcck_info->ext_damage_code;
2838	mchk->failing_storage_address = mcck_info->failing_storage_address;
2839	if (mci.ck) {
2840		/* Inject the floating machine check */
2841		inti.type = KVM_S390_MCHK;
2842		rc = __inject_vm(vcpu->kvm, &inti);
2843	} else {
2844		/* Inject the machine check to specified vcpu */
2845		irq.type = KVM_S390_MCHK;
2846		rc = kvm_s390_inject_vcpu(vcpu, &irq);
2847	}
2848	WARN_ON_ONCE(rc);
2849}
2850
2851int kvm_set_routing_entry(struct kvm *kvm,
2852			  struct kvm_kernel_irq_routing_entry *e,
2853			  const struct kvm_irq_routing_entry *ue)
2854{
2855	u64 uaddr_s, uaddr_i;
2856	int idx;
2857
2858	switch (ue->type) {
2859	/* we store the userspace addresses instead of the guest addresses */
2860	case KVM_IRQ_ROUTING_S390_ADAPTER:
2861		if (kvm_is_ucontrol(kvm))
2862			return -EINVAL;
2863		e->set = set_adapter_int;
2864
2865		idx = srcu_read_lock(&kvm->srcu);
2866		uaddr_s = gpa_to_hva(kvm, ue->u.adapter.summary_addr);
2867		uaddr_i = gpa_to_hva(kvm, ue->u.adapter.ind_addr);
2868		srcu_read_unlock(&kvm->srcu, idx);
2869
2870		if (kvm_is_error_hva(uaddr_s) || kvm_is_error_hva(uaddr_i))
2871			return -EFAULT;
2872		e->adapter.summary_addr = uaddr_s;
2873		e->adapter.ind_addr = uaddr_i;
2874		e->adapter.summary_offset = ue->u.adapter.summary_offset;
2875		e->adapter.ind_offset = ue->u.adapter.ind_offset;
2876		e->adapter.adapter_id = ue->u.adapter.adapter_id;
2877		return 0;
2878	default:
2879		return -EINVAL;
2880	}
2881}
2882
2883int kvm_set_msi(struct kvm_kernel_irq_routing_entry *e, struct kvm *kvm,
2884		int irq_source_id, int level, bool line_status)
2885{
2886	return -EINVAL;
2887}
2888
2889int kvm_s390_set_irq_state(struct kvm_vcpu *vcpu, void __user *irqstate, int len)
2890{
2891	struct kvm_s390_local_interrupt *li = &vcpu->arch.local_int;
2892	struct kvm_s390_irq *buf;
2893	int r = 0;
2894	int n;
2895
2896	buf = vmalloc(len);
2897	if (!buf)
2898		return -ENOMEM;
2899
2900	if (copy_from_user((void *) buf, irqstate, len)) {
2901		r = -EFAULT;
2902		goto out_free;
2903	}
2904
2905	/*
2906	 * Don't allow setting the interrupt state
2907	 * when there are already interrupts pending
2908	 */
2909	spin_lock(&li->lock);
2910	if (li->pending_irqs) {
2911		r = -EBUSY;
2912		goto out_unlock;
2913	}
2914
2915	for (n = 0; n < len / sizeof(*buf); n++) {
2916		r = do_inject_vcpu(vcpu, &buf[n]);
2917		if (r)
2918			break;
2919	}
2920
2921out_unlock:
2922	spin_unlock(&li->lock);
2923out_free:
2924	vfree(buf);
2925
2926	return r;
2927}
2928
2929static void store_local_irq(struct kvm_s390_local_interrupt *li,
2930			    struct kvm_s390_irq *irq,
2931			    unsigned long irq_type)
2932{
2933	switch (irq_type) {
2934	case IRQ_PEND_MCHK_EX:
2935	case IRQ_PEND_MCHK_REP:
2936		irq->type = KVM_S390_MCHK;
2937		irq->u.mchk = li->irq.mchk;
2938		break;
2939	case IRQ_PEND_PROG:
2940		irq->type = KVM_S390_PROGRAM_INT;
2941		irq->u.pgm = li->irq.pgm;
2942		break;
2943	case IRQ_PEND_PFAULT_INIT:
2944		irq->type = KVM_S390_INT_PFAULT_INIT;
2945		irq->u.ext = li->irq.ext;
2946		break;
2947	case IRQ_PEND_EXT_EXTERNAL:
2948		irq->type = KVM_S390_INT_EXTERNAL_CALL;
2949		irq->u.extcall = li->irq.extcall;
2950		break;
2951	case IRQ_PEND_EXT_CLOCK_COMP:
2952		irq->type = KVM_S390_INT_CLOCK_COMP;
2953		break;
2954	case IRQ_PEND_EXT_CPU_TIMER:
2955		irq->type = KVM_S390_INT_CPU_TIMER;
2956		break;
2957	case IRQ_PEND_SIGP_STOP:
2958		irq->type = KVM_S390_SIGP_STOP;
2959		irq->u.stop = li->irq.stop;
2960		break;
2961	case IRQ_PEND_RESTART:
2962		irq->type = KVM_S390_RESTART;
2963		break;
2964	case IRQ_PEND_SET_PREFIX:
2965		irq->type = KVM_S390_SIGP_SET_PREFIX;
2966		irq->u.prefix = li->irq.prefix;
2967		break;
2968	}
2969}
2970
2971int kvm_s390_get_irq_state(struct kvm_vcpu *vcpu, __u8 __user *buf, int len)
2972{
2973	int scn;
2974	DECLARE_BITMAP(sigp_emerg_pending, KVM_MAX_VCPUS);
2975	struct kvm_s390_local_interrupt *li = &vcpu->arch.local_int;
2976	unsigned long pending_irqs;
2977	struct kvm_s390_irq irq;
2978	unsigned long irq_type;
2979	int cpuaddr;
2980	int n = 0;
2981
2982	spin_lock(&li->lock);
2983	pending_irqs = li->pending_irqs;
2984	memcpy(&sigp_emerg_pending, &li->sigp_emerg_pending,
2985	       sizeof(sigp_emerg_pending));
2986	spin_unlock(&li->lock);
2987
2988	for_each_set_bit(irq_type, &pending_irqs, IRQ_PEND_COUNT) {
2989		memset(&irq, 0, sizeof(irq));
2990		if (irq_type == IRQ_PEND_EXT_EMERGENCY)
2991			continue;
2992		if (n + sizeof(irq) > len)
2993			return -ENOBUFS;
2994		store_local_irq(&vcpu->arch.local_int, &irq, irq_type);
2995		if (copy_to_user(&buf[n], &irq, sizeof(irq)))
2996			return -EFAULT;
2997		n += sizeof(irq);
2998	}
2999
3000	if (test_bit(IRQ_PEND_EXT_EMERGENCY, &pending_irqs)) {
3001		for_each_set_bit(cpuaddr, sigp_emerg_pending, KVM_MAX_VCPUS) {
3002			memset(&irq, 0, sizeof(irq));
3003			if (n + sizeof(irq) > len)
3004				return -ENOBUFS;
3005			irq.type = KVM_S390_INT_EMERGENCY;
3006			irq.u.emerg.code = cpuaddr;
3007			if (copy_to_user(&buf[n], &irq, sizeof(irq)))
3008				return -EFAULT;
3009			n += sizeof(irq);
3010		}
3011	}
3012
3013	if (sca_ext_call_pending(vcpu, &scn)) {
3014		if (n + sizeof(irq) > len)
3015			return -ENOBUFS;
3016		memset(&irq, 0, sizeof(irq));
3017		irq.type = KVM_S390_INT_EXTERNAL_CALL;
3018		irq.u.extcall.code = scn;
3019		if (copy_to_user(&buf[n], &irq, sizeof(irq)))
3020			return -EFAULT;
3021		n += sizeof(irq);
3022	}
3023
3024	return n;
3025}
3026
3027static void __airqs_kick_single_vcpu(struct kvm *kvm, u8 deliverable_mask)
3028{
3029	int vcpu_idx, online_vcpus = atomic_read(&kvm->online_vcpus);
3030	struct kvm_s390_gisa_interrupt *gi = &kvm->arch.gisa_int;
3031	struct kvm_vcpu *vcpu;
3032	u8 vcpu_isc_mask;
3033
3034	for_each_set_bit(vcpu_idx, kvm->arch.idle_mask, online_vcpus) {
3035		vcpu = kvm_get_vcpu(kvm, vcpu_idx);
3036		if (psw_ioint_disabled(vcpu))
3037			continue;
3038		vcpu_isc_mask = (u8)(vcpu->arch.sie_block->gcr[6] >> 24);
3039		if (deliverable_mask & vcpu_isc_mask) {
3040			/* lately kicked but not yet running */
3041			if (test_and_set_bit(vcpu_idx, gi->kicked_mask))
3042				return;
3043			kvm_s390_vcpu_wakeup(vcpu);
3044			return;
3045		}
3046	}
3047}
3048
3049static enum hrtimer_restart gisa_vcpu_kicker(struct hrtimer *timer)
3050{
3051	struct kvm_s390_gisa_interrupt *gi =
3052		container_of(timer, struct kvm_s390_gisa_interrupt, timer);
3053	struct kvm *kvm =
3054		container_of(gi->origin, struct sie_page2, gisa)->kvm;
3055	u8 pending_mask;
3056
3057	pending_mask = gisa_get_ipm_or_restore_iam(gi);
3058	if (pending_mask) {
3059		__airqs_kick_single_vcpu(kvm, pending_mask);
3060		hrtimer_forward_now(timer, ns_to_ktime(gi->expires));
3061		return HRTIMER_RESTART;
3062	}
3063
3064	return HRTIMER_NORESTART;
3065}
3066
3067#define NULL_GISA_ADDR 0x00000000UL
3068#define NONE_GISA_ADDR 0x00000001UL
3069#define GISA_ADDR_MASK 0xfffff000UL
3070
3071static void process_gib_alert_list(void)
3072{
3073	struct kvm_s390_gisa_interrupt *gi;
3074	u32 final, gisa_phys, origin = 0UL;
3075	struct kvm_s390_gisa *gisa;
3076	struct kvm *kvm;
3077
3078	do {
3079		/*
3080		 * If the NONE_GISA_ADDR is still stored in the alert list
3081		 * origin, we will leave the outer loop. No further GISA has
3082		 * been added to the alert list by millicode while processing
3083		 * the current alert list.
3084		 */
3085		final = (origin & NONE_GISA_ADDR);
3086		/*
3087		 * Cut off the alert list and store the NONE_GISA_ADDR in the
3088		 * alert list origin to avoid further GAL interruptions.
3089		 * A new alert list can be build up by millicode in parallel
3090		 * for guests not in the yet cut-off alert list. When in the
3091		 * final loop, store the NULL_GISA_ADDR instead. This will re-
3092		 * enable GAL interruptions on the host again.
3093		 */
3094		origin = xchg(&gib->alert_list_origin,
3095			      (!final) ? NONE_GISA_ADDR : NULL_GISA_ADDR);
3096		/*
3097		 * Loop through the just cut-off alert list and start the
3098		 * gisa timers to kick idle vcpus to consume the pending
3099		 * interruptions asap.
3100		 */
3101		while (origin & GISA_ADDR_MASK) {
3102			gisa_phys = origin;
3103			gisa = phys_to_virt(gisa_phys);
3104			origin = gisa->next_alert;
3105			gisa->next_alert = gisa_phys;
3106			kvm = container_of(gisa, struct sie_page2, gisa)->kvm;
3107			gi = &kvm->arch.gisa_int;
3108			if (hrtimer_active(&gi->timer))
3109				hrtimer_cancel(&gi->timer);
3110			hrtimer_start(&gi->timer, 0, HRTIMER_MODE_REL);
3111		}
3112	} while (!final);
3113
3114}
3115
3116void kvm_s390_gisa_clear(struct kvm *kvm)
3117{
3118	struct kvm_s390_gisa_interrupt *gi = &kvm->arch.gisa_int;
3119
3120	if (!gi->origin)
3121		return;
3122	gisa_clear_ipm(gi->origin);
3123	VM_EVENT(kvm, 3, "gisa 0x%p cleared", gi->origin);
3124}
3125
3126void kvm_s390_gisa_init(struct kvm *kvm)
3127{
3128	struct kvm_s390_gisa_interrupt *gi = &kvm->arch.gisa_int;
3129
3130	if (!css_general_characteristics.aiv)
3131		return;
3132	gi->origin = &kvm->arch.sie_page2->gisa;
3133	gi->alert.mask = 0;
3134	spin_lock_init(&gi->alert.ref_lock);
3135	gi->expires = 50 * 1000; /* 50 usec */
3136	hrtimer_setup(&gi->timer, gisa_vcpu_kicker, CLOCK_MONOTONIC, HRTIMER_MODE_REL);
3137	memset(gi->origin, 0, sizeof(struct kvm_s390_gisa));
3138	gi->origin->next_alert = (u32)virt_to_phys(gi->origin);
3139	VM_EVENT(kvm, 3, "gisa 0x%p initialized", gi->origin);
3140}
3141
3142void kvm_s390_gisa_enable(struct kvm *kvm)
3143{
3144	struct kvm_s390_gisa_interrupt *gi = &kvm->arch.gisa_int;
3145	struct kvm_vcpu *vcpu;
3146	unsigned long i;
3147	u32 gisa_desc;
3148
3149	if (gi->origin)
3150		return;
3151	kvm_s390_gisa_init(kvm);
3152	gisa_desc = kvm_s390_get_gisa_desc(kvm);
3153	if (!gisa_desc)
3154		return;
3155	kvm_for_each_vcpu(i, vcpu, kvm) {
3156		mutex_lock(&vcpu->mutex);
3157		vcpu->arch.sie_block->gd = gisa_desc;
3158		vcpu->arch.sie_block->eca |= ECA_AIV;
3159		VCPU_EVENT(vcpu, 3, "AIV gisa format-%u enabled for cpu %03u",
3160			   vcpu->arch.sie_block->gd & 0x3, vcpu->vcpu_id);
3161		mutex_unlock(&vcpu->mutex);
3162	}
3163}
3164
3165void kvm_s390_gisa_destroy(struct kvm *kvm)
3166{
3167	struct kvm_s390_gisa_interrupt *gi = &kvm->arch.gisa_int;
3168	struct kvm_s390_gisa *gisa = gi->origin;
3169
3170	if (!gi->origin)
3171		return;
3172	WARN(gi->alert.mask != 0x00,
3173	     "unexpected non zero alert.mask 0x%02x",
3174	     gi->alert.mask);
3175	gi->alert.mask = 0x00;
3176	if (gisa_set_iam(gi->origin, gi->alert.mask))
3177		process_gib_alert_list();
3178	hrtimer_cancel(&gi->timer);
3179	gi->origin = NULL;
3180	VM_EVENT(kvm, 3, "gisa 0x%p destroyed", gisa);
3181}
3182
3183void kvm_s390_gisa_disable(struct kvm *kvm)
3184{
3185	struct kvm_s390_gisa_interrupt *gi = &kvm->arch.gisa_int;
3186	struct kvm_vcpu *vcpu;
3187	unsigned long i;
3188
3189	if (!gi->origin)
3190		return;
3191	kvm_for_each_vcpu(i, vcpu, kvm) {
3192		mutex_lock(&vcpu->mutex);
3193		vcpu->arch.sie_block->eca &= ~ECA_AIV;
3194		vcpu->arch.sie_block->gd = 0U;
3195		mutex_unlock(&vcpu->mutex);
3196		VCPU_EVENT(vcpu, 3, "AIV disabled for cpu %03u", vcpu->vcpu_id);
3197	}
3198	kvm_s390_gisa_destroy(kvm);
3199}
3200
3201/**
3202 * kvm_s390_gisc_register - register a guest ISC
3203 *
3204 * @kvm:  the kernel vm to work with
3205 * @gisc: the guest interruption sub class to register
3206 *
3207 * The function extends the vm specific alert mask to use.
3208 * The effective IAM mask in the GISA is updated as well
3209 * in case the GISA is not part of the GIB alert list.
3210 * It will be updated latest when the IAM gets restored
3211 * by gisa_get_ipm_or_restore_iam().
3212 *
3213 * Returns: the nonspecific ISC (NISC) the gib alert mechanism
3214 *          has registered with the channel subsystem.
3215 *          -ENODEV in case the vm uses no GISA
3216 *          -ERANGE in case the guest ISC is invalid
3217 */
3218int kvm_s390_gisc_register(struct kvm *kvm, u32 gisc)
3219{
3220	struct kvm_s390_gisa_interrupt *gi = &kvm->arch.gisa_int;
3221
3222	if (!gi->origin)
3223		return -ENODEV;
3224	if (gisc > MAX_ISC)
3225		return -ERANGE;
3226
3227	spin_lock(&gi->alert.ref_lock);
3228	gi->alert.ref_count[gisc]++;
3229	if (gi->alert.ref_count[gisc] == 1) {
3230		gi->alert.mask |= 0x80 >> gisc;
3231		gisa_set_iam(gi->origin, gi->alert.mask);
3232	}
3233	spin_unlock(&gi->alert.ref_lock);
3234
3235	return gib->nisc;
3236}
3237EXPORT_SYMBOL_GPL(kvm_s390_gisc_register);
3238
3239/**
3240 * kvm_s390_gisc_unregister - unregister a guest ISC
3241 *
3242 * @kvm:  the kernel vm to work with
3243 * @gisc: the guest interruption sub class to register
3244 *
3245 * The function reduces the vm specific alert mask to use.
3246 * The effective IAM mask in the GISA is updated as well
3247 * in case the GISA is not part of the GIB alert list.
3248 * It will be updated latest when the IAM gets restored
3249 * by gisa_get_ipm_or_restore_iam().
3250 *
3251 * Returns: the nonspecific ISC (NISC) the gib alert mechanism
3252 *          has registered with the channel subsystem.
3253 *          -ENODEV in case the vm uses no GISA
3254 *          -ERANGE in case the guest ISC is invalid
3255 *          -EINVAL in case the guest ISC is not registered
3256 */
3257int kvm_s390_gisc_unregister(struct kvm *kvm, u32 gisc)
3258{
3259	struct kvm_s390_gisa_interrupt *gi = &kvm->arch.gisa_int;
3260	int rc = 0;
3261
3262	if (!gi->origin)
3263		return -ENODEV;
3264	if (gisc > MAX_ISC)
3265		return -ERANGE;
3266
3267	spin_lock(&gi->alert.ref_lock);
3268	if (gi->alert.ref_count[gisc] == 0) {
3269		rc = -EINVAL;
3270		goto out;
3271	}
3272	gi->alert.ref_count[gisc]--;
3273	if (gi->alert.ref_count[gisc] == 0) {
3274		gi->alert.mask &= ~(0x80 >> gisc);
3275		gisa_set_iam(gi->origin, gi->alert.mask);
3276	}
3277out:
3278	spin_unlock(&gi->alert.ref_lock);
3279
3280	return rc;
3281}
3282EXPORT_SYMBOL_GPL(kvm_s390_gisc_unregister);
3283
3284static void aen_host_forward(unsigned long si)
3285{
3286	struct kvm_s390_gisa_interrupt *gi;
3287	struct zpci_gaite *gaite;
3288	struct kvm *kvm;
3289
3290	gaite = (struct zpci_gaite *)aift->gait +
3291		(si * sizeof(struct zpci_gaite));
3292	if (gaite->count == 0)
3293		return;
3294	if (gaite->aisb != 0)
3295		set_bit_inv(gaite->aisbo, phys_to_virt(gaite->aisb));
3296
3297	kvm = kvm_s390_pci_si_to_kvm(aift, si);
3298	if (!kvm)
3299		return;
3300	gi = &kvm->arch.gisa_int;
3301
3302	if (!(gi->origin->g1.simm & AIS_MODE_MASK(gaite->gisc)) ||
3303	    !(gi->origin->g1.nimm & AIS_MODE_MASK(gaite->gisc))) {
3304		gisa_set_ipm_gisc(gi->origin, gaite->gisc);
3305		if (hrtimer_active(&gi->timer))
3306			hrtimer_cancel(&gi->timer);
3307		hrtimer_start(&gi->timer, 0, HRTIMER_MODE_REL);
3308		kvm->stat.aen_forward++;
3309	}
3310}
3311
3312static void aen_process_gait(u8 isc)
3313{
3314	bool found = false, first = true;
3315	union zpci_sic_iib iib = {{0}};
3316	unsigned long si, flags;
3317
3318	spin_lock_irqsave(&aift->gait_lock, flags);
3319
3320	if (!aift->gait) {
3321		spin_unlock_irqrestore(&aift->gait_lock, flags);
3322		return;
3323	}
3324
3325	for (si = 0;;) {
3326		/* Scan adapter summary indicator bit vector */
3327		si = airq_iv_scan(aift->sbv, si, airq_iv_end(aift->sbv));
3328		if (si == -1UL) {
3329			if (first || found) {
3330				/* Re-enable interrupts. */
3331				zpci_set_irq_ctrl(SIC_IRQ_MODE_SINGLE, isc,
3332						  &iib);
3333				first = found = false;
3334			} else {
3335				/* Interrupts on and all bits processed */
3336				break;
3337			}
3338			found = false;
3339			si = 0;
3340			/* Scan again after re-enabling interrupts */
3341			continue;
3342		}
3343		found = true;
3344		aen_host_forward(si);
3345	}
3346
3347	spin_unlock_irqrestore(&aift->gait_lock, flags);
3348}
3349
3350static void gib_alert_irq_handler(struct airq_struct *airq,
3351				  struct tpi_info *tpi_info)
3352{
3353	struct tpi_adapter_info *info = (struct tpi_adapter_info *)tpi_info;
3354
3355	inc_irq_stat(IRQIO_GAL);
3356
3357	if ((info->forward || info->error) &&
3358	    IS_ENABLED(CONFIG_VFIO_PCI_ZDEV_KVM)) {
3359		aen_process_gait(info->isc);
3360		if (info->aism != 0)
3361			process_gib_alert_list();
3362	} else {
3363		process_gib_alert_list();
3364	}
3365}
3366
3367static struct airq_struct gib_alert_irq = {
3368	.handler = gib_alert_irq_handler,
3369};
3370
3371void kvm_s390_gib_destroy(void)
3372{
3373	if (!gib)
3374		return;
3375	if (kvm_s390_pci_interp_allowed() && aift) {
3376		mutex_lock(&aift->aift_lock);
3377		kvm_s390_pci_aen_exit();
3378		mutex_unlock(&aift->aift_lock);
3379	}
3380	chsc_sgib(0);
3381	unregister_adapter_interrupt(&gib_alert_irq);
3382	free_page((unsigned long)gib);
3383	gib = NULL;
3384}
3385
3386int __init kvm_s390_gib_init(u8 nisc)
3387{
3388	u32 gib_origin;
3389	int rc = 0;
3390
3391	if (!css_general_characteristics.aiv) {
3392		KVM_EVENT(3, "%s", "gib not initialized, no AIV facility");
3393		goto out;
3394	}
3395
3396	gib = (struct kvm_s390_gib *)get_zeroed_page(GFP_KERNEL_ACCOUNT | GFP_DMA);
3397	if (!gib) {
3398		rc = -ENOMEM;
3399		goto out;
3400	}
3401
3402	gib_alert_irq.isc = nisc;
3403	if (register_adapter_interrupt(&gib_alert_irq)) {
3404		pr_err("Registering the GIB alert interruption handler failed\n");
3405		rc = -EIO;
3406		goto out_free_gib;
3407	}
3408	/* adapter interrupts used for AP (applicable here) don't use the LSI */
3409	*gib_alert_irq.lsi_ptr = 0xff;
3410
3411	gib->nisc = nisc;
3412	gib_origin = virt_to_phys(gib);
3413	if (chsc_sgib(gib_origin)) {
3414		pr_err("Associating the GIB with the AIV facility failed\n");
3415		free_page((unsigned long)gib);
3416		gib = NULL;
3417		rc = -EIO;
3418		goto out_unreg_gal;
3419	}
3420
3421	if (kvm_s390_pci_interp_allowed()) {
3422		if (kvm_s390_pci_aen_init(nisc)) {
3423			pr_err("Initializing AEN for PCI failed\n");
3424			rc = -EIO;
3425			goto out_unreg_gal;
3426		}
3427	}
3428
3429	KVM_EVENT(3, "gib 0x%p (nisc=%d) initialized", gib, gib->nisc);
3430	goto out;
3431
3432out_unreg_gal:
3433	unregister_adapter_interrupt(&gib_alert_irq);
3434out_free_gib:
3435	free_page((unsigned long)gib);
3436	gib = NULL;
3437out:
3438	return rc;
3439}
~/ Read-only file preview.