linux/arch/s390/kvm/interrupt.c
<<
>>
Prefs
   1/*
   2 * handling kvm guest interrupts
   3 *
   4 * Copyright IBM Corp. 2008, 2015
   5 *
   6 * This program is free software; you can redistribute it and/or modify
   7 * it under the terms of the GNU General Public License (version 2 only)
   8 * as published by the Free Software Foundation.
   9 *
  10 *    Author(s): Carsten Otte <cotte@de.ibm.com>
  11 */
  12
  13#include <linux/interrupt.h>
  14#include <linux/kvm_host.h>
  15#include <linux/hrtimer.h>
  16#include <linux/mmu_context.h>
  17#include <linux/signal.h>
  18#include <linux/slab.h>
  19#include <linux/bitmap.h>
  20#include <linux/vmalloc.h>
  21#include <asm/asm-offsets.h>
  22#include <asm/dis.h>
  23#include <linux/uaccess.h>
  24#include <asm/sclp.h>
  25#include <asm/isc.h>
  26#include <asm/gmap.h>
  27#include <asm/switch_to.h>
  28#include <asm/nmi.h>
  29#include "kvm-s390.h"
  30#include "gaccess.h"
  31#include "trace-s390.h"
  32
  33#define PFAULT_INIT 0x0600
  34#define PFAULT_DONE 0x0680
  35#define VIRTIO_PARAM 0x0d00
  36
  37/* handle external calls via sigp interpretation facility */
  38static int sca_ext_call_pending(struct kvm_vcpu *vcpu, int *src_id)
  39{
  40        int c, scn;
  41
  42        if (!(atomic_read(&vcpu->arch.sie_block->cpuflags) & CPUSTAT_ECALL_PEND))
  43                return 0;
  44
  45        BUG_ON(!kvm_s390_use_sca_entries());
  46        read_lock(&vcpu->kvm->arch.sca_lock);
  47        if (vcpu->kvm->arch.use_esca) {
  48                struct esca_block *sca = vcpu->kvm->arch.sca;
  49                union esca_sigp_ctrl sigp_ctrl =
  50                        sca->cpu[vcpu->vcpu_id].sigp_ctrl;
  51
  52                c = sigp_ctrl.c;
  53                scn = sigp_ctrl.scn;
  54        } else {
  55                struct bsca_block *sca = vcpu->kvm->arch.sca;
  56                union bsca_sigp_ctrl sigp_ctrl =
  57                        sca->cpu[vcpu->vcpu_id].sigp_ctrl;
  58
  59                c = sigp_ctrl.c;
  60                scn = sigp_ctrl.scn;
  61        }
  62        read_unlock(&vcpu->kvm->arch.sca_lock);
  63
  64        if (src_id)
  65                *src_id = scn;
  66
  67        return c;
  68}
  69
  70static int sca_inject_ext_call(struct kvm_vcpu *vcpu, int src_id)
  71{
  72        int expect, rc;
  73
  74        BUG_ON(!kvm_s390_use_sca_entries());
  75        read_lock(&vcpu->kvm->arch.sca_lock);
  76        if (vcpu->kvm->arch.use_esca) {
  77                struct esca_block *sca = vcpu->kvm->arch.sca;
  78                union esca_sigp_ctrl *sigp_ctrl =
  79                        &(sca->cpu[vcpu->vcpu_id].sigp_ctrl);
  80                union esca_sigp_ctrl new_val = {0}, old_val = *sigp_ctrl;
  81
  82                new_val.scn = src_id;
  83                new_val.c = 1;
  84                old_val.c = 0;
  85
  86                expect = old_val.value;
  87                rc = cmpxchg(&sigp_ctrl->value, old_val.value, new_val.value);
  88        } else {
  89                struct bsca_block *sca = vcpu->kvm->arch.sca;
  90                union bsca_sigp_ctrl *sigp_ctrl =
  91                        &(sca->cpu[vcpu->vcpu_id].sigp_ctrl);
  92                union bsca_sigp_ctrl new_val = {0}, old_val = *sigp_ctrl;
  93
  94                new_val.scn = src_id;
  95                new_val.c = 1;
  96                old_val.c = 0;
  97
  98                expect = old_val.value;
  99                rc = cmpxchg(&sigp_ctrl->value, old_val.value, new_val.value);
 100        }
 101        read_unlock(&vcpu->kvm->arch.sca_lock);
 102
 103        if (rc != expect) {
 104                /* another external call is pending */
 105                return -EBUSY;
 106        }
 107        atomic_or(CPUSTAT_ECALL_PEND, &vcpu->arch.sie_block->cpuflags);
 108        return 0;
 109}
 110
 111static void sca_clear_ext_call(struct kvm_vcpu *vcpu)
 112{
 113        struct kvm_s390_local_interrupt *li = &vcpu->arch.local_int;
 114        int rc, expect;
 115
 116        if (!kvm_s390_use_sca_entries())
 117                return;
 118        atomic_andnot(CPUSTAT_ECALL_PEND, li->cpuflags);
 119        read_lock(&vcpu->kvm->arch.sca_lock);
 120        if (vcpu->kvm->arch.use_esca) {
 121                struct esca_block *sca = vcpu->kvm->arch.sca;
 122                union esca_sigp_ctrl *sigp_ctrl =
 123                        &(sca->cpu[vcpu->vcpu_id].sigp_ctrl);
 124                union esca_sigp_ctrl old = *sigp_ctrl;
 125
 126                expect = old.value;
 127                rc = cmpxchg(&sigp_ctrl->value, old.value, 0);
 128        } else {
 129                struct bsca_block *sca = vcpu->kvm->arch.sca;
 130                union bsca_sigp_ctrl *sigp_ctrl =
 131                        &(sca->cpu[vcpu->vcpu_id].sigp_ctrl);
 132                union bsca_sigp_ctrl old = *sigp_ctrl;
 133
 134                expect = old.value;
 135                rc = cmpxchg(&sigp_ctrl->value, old.value, 0);
 136        }
 137        read_unlock(&vcpu->kvm->arch.sca_lock);
 138        WARN_ON(rc != expect); /* cannot clear? */
 139}
 140
 141int psw_extint_disabled(struct kvm_vcpu *vcpu)
 142{
 143        return !(vcpu->arch.sie_block->gpsw.mask & PSW_MASK_EXT);
 144}
 145
 146static int psw_ioint_disabled(struct kvm_vcpu *vcpu)
 147{
 148        return !(vcpu->arch.sie_block->gpsw.mask & PSW_MASK_IO);
 149}
 150
 151static int psw_mchk_disabled(struct kvm_vcpu *vcpu)
 152{
 153        return !(vcpu->arch.sie_block->gpsw.mask & PSW_MASK_MCHECK);
 154}
 155
 156static int psw_interrupts_disabled(struct kvm_vcpu *vcpu)
 157{
 158        return psw_extint_disabled(vcpu) &&
 159               psw_ioint_disabled(vcpu) &&
 160               psw_mchk_disabled(vcpu);
 161}
 162
 163static int ckc_interrupts_enabled(struct kvm_vcpu *vcpu)
 164{
 165        if (psw_extint_disabled(vcpu) ||
 166            !(vcpu->arch.sie_block->gcr[0] & 0x800ul))
 167                return 0;
 168        if (guestdbg_enabled(vcpu) && guestdbg_sstep_enabled(vcpu))
 169                /* No timer interrupts when single stepping */
 170                return 0;
 171        return 1;
 172}
 173
 174static int ckc_irq_pending(struct kvm_vcpu *vcpu)
 175{
 176        if (vcpu->arch.sie_block->ckc >= kvm_s390_get_tod_clock_fast(vcpu->kvm))
 177                return 0;
 178        return ckc_interrupts_enabled(vcpu);
 179}
 180
 181static int cpu_timer_interrupts_enabled(struct kvm_vcpu *vcpu)
 182{
 183        return !psw_extint_disabled(vcpu) &&
 184               (vcpu->arch.sie_block->gcr[0] & 0x400ul);
 185}
 186
 187static int cpu_timer_irq_pending(struct kvm_vcpu *vcpu)
 188{
 189        if (!cpu_timer_interrupts_enabled(vcpu))
 190                return 0;
 191        return kvm_s390_get_cpu_timer(vcpu) >> 63;
 192}
 193
 194static inline int is_ioirq(unsigned long irq_type)
 195{
 196        return ((irq_type >= IRQ_PEND_IO_ISC_0) &&
 197                (irq_type <= IRQ_PEND_IO_ISC_7));
 198}
 199
 200static uint64_t isc_to_isc_bits(int isc)
 201{
 202        return (0x80 >> isc) << 24;
 203}
 204
 205static inline u8 int_word_to_isc(u32 int_word)
 206{
 207        return (int_word & 0x38000000) >> 27;
 208}
 209
 210static inline unsigned long pending_irqs(struct kvm_vcpu *vcpu)
 211{
 212        return vcpu->kvm->arch.float_int.pending_irqs |
 213               vcpu->arch.local_int.pending_irqs;
 214}
 215
 216static unsigned long disable_iscs(struct kvm_vcpu *vcpu,
 217                                   unsigned long active_mask)
 218{
 219        int i;
 220
 221        for (i = 0; i <= MAX_ISC; i++)
 222                if (!(vcpu->arch.sie_block->gcr[6] & isc_to_isc_bits(i)))
 223                        active_mask &= ~(1UL << (IRQ_PEND_IO_ISC_0 + i));
 224
 225        return active_mask;
 226}
 227
 228static unsigned long deliverable_irqs(struct kvm_vcpu *vcpu)
 229{
 230        unsigned long active_mask;
 231
 232        active_mask = pending_irqs(vcpu);
 233        if (!active_mask)
 234                return 0;
 235
 236        if (psw_extint_disabled(vcpu))
 237                active_mask &= ~IRQ_PEND_EXT_MASK;
 238        if (psw_ioint_disabled(vcpu))
 239                active_mask &= ~IRQ_PEND_IO_MASK;
 240        else
 241                active_mask = disable_iscs(vcpu, active_mask);
 242        if (!(vcpu->arch.sie_block->gcr[0] & 0x2000ul))
 243                __clear_bit(IRQ_PEND_EXT_EXTERNAL, &active_mask);
 244        if (!(vcpu->arch.sie_block->gcr[0] & 0x4000ul))
 245                __clear_bit(IRQ_PEND_EXT_EMERGENCY, &active_mask);
 246        if (!(vcpu->arch.sie_block->gcr[0] & 0x800ul))
 247                __clear_bit(IRQ_PEND_EXT_CLOCK_COMP, &active_mask);
 248        if (!(vcpu->arch.sie_block->gcr[0] & 0x400ul))
 249                __clear_bit(IRQ_PEND_EXT_CPU_TIMER, &active_mask);
 250        if (!(vcpu->arch.sie_block->gcr[0] & 0x200ul))
 251                __clear_bit(IRQ_PEND_EXT_SERVICE, &active_mask);
 252        if (psw_mchk_disabled(vcpu))
 253                active_mask &= ~IRQ_PEND_MCHK_MASK;
 254        if (!(vcpu->arch.sie_block->gcr[14] &
 255              vcpu->kvm->arch.float_int.mchk.cr14))
 256                __clear_bit(IRQ_PEND_MCHK_REP, &active_mask);
 257
 258        /*
 259         * STOP irqs will never be actively delivered. They are triggered via
 260         * intercept requests and cleared when the stop intercept is performed.
 261         */
 262        __clear_bit(IRQ_PEND_SIGP_STOP, &active_mask);
 263
 264        return active_mask;
 265}
 266
 267static void __set_cpu_idle(struct kvm_vcpu *vcpu)
 268{
 269        atomic_or(CPUSTAT_WAIT, &vcpu->arch.sie_block->cpuflags);
 270        set_bit(vcpu->vcpu_id, vcpu->arch.local_int.float_int->idle_mask);
 271}
 272
 273static void __unset_cpu_idle(struct kvm_vcpu *vcpu)
 274{
 275        atomic_andnot(CPUSTAT_WAIT, &vcpu->arch.sie_block->cpuflags);
 276        clear_bit(vcpu->vcpu_id, vcpu->arch.local_int.float_int->idle_mask);
 277}
 278
 279static void __reset_intercept_indicators(struct kvm_vcpu *vcpu)
 280{
 281        atomic_andnot(CPUSTAT_IO_INT | CPUSTAT_EXT_INT | CPUSTAT_STOP_INT,
 282                    &vcpu->arch.sie_block->cpuflags);
 283        vcpu->arch.sie_block->lctl = 0x0000;
 284        vcpu->arch.sie_block->ictl &= ~(ICTL_LPSW | ICTL_STCTL | ICTL_PINT);
 285
 286        if (guestdbg_enabled(vcpu)) {
 287                vcpu->arch.sie_block->lctl |= (LCTL_CR0 | LCTL_CR9 |
 288                                               LCTL_CR10 | LCTL_CR11);
 289                vcpu->arch.sie_block->ictl |= (ICTL_STCTL | ICTL_PINT);
 290        }
 291}
 292
 293static void __set_cpuflag(struct kvm_vcpu *vcpu, u32 flag)
 294{
 295        atomic_or(flag, &vcpu->arch.sie_block->cpuflags);
 296}
 297
 298static void set_intercept_indicators_io(struct kvm_vcpu *vcpu)
 299{
 300        if (!(pending_irqs(vcpu) & IRQ_PEND_IO_MASK))
 301                return;
 302        else if (psw_ioint_disabled(vcpu))
 303                __set_cpuflag(vcpu, CPUSTAT_IO_INT);
 304        else
 305                vcpu->arch.sie_block->lctl |= LCTL_CR6;
 306}
 307
 308static void set_intercept_indicators_ext(struct kvm_vcpu *vcpu)
 309{
 310        if (!(pending_irqs(vcpu) & IRQ_PEND_EXT_MASK))
 311                return;
 312        if (psw_extint_disabled(vcpu))
 313                __set_cpuflag(vcpu, CPUSTAT_EXT_INT);
 314        else
 315                vcpu->arch.sie_block->lctl |= LCTL_CR0;
 316}
 317
 318static void set_intercept_indicators_mchk(struct kvm_vcpu *vcpu)
 319{
 320        if (!(pending_irqs(vcpu) & IRQ_PEND_MCHK_MASK))
 321                return;
 322        if (psw_mchk_disabled(vcpu))
 323                vcpu->arch.sie_block->ictl |= ICTL_LPSW;
 324        else
 325                vcpu->arch.sie_block->lctl |= LCTL_CR14;
 326}
 327
 328static void set_intercept_indicators_stop(struct kvm_vcpu *vcpu)
 329{
 330        if (kvm_s390_is_stop_irq_pending(vcpu))
 331                __set_cpuflag(vcpu, CPUSTAT_STOP_INT);
 332}
 333
 334/* Set interception request for non-deliverable interrupts */
 335static void set_intercept_indicators(struct kvm_vcpu *vcpu)
 336{
 337        set_intercept_indicators_io(vcpu);
 338        set_intercept_indicators_ext(vcpu);
 339        set_intercept_indicators_mchk(vcpu);
 340        set_intercept_indicators_stop(vcpu);
 341}
 342
 343static int __must_check __deliver_cpu_timer(struct kvm_vcpu *vcpu)
 344{
 345        struct kvm_s390_local_interrupt *li = &vcpu->arch.local_int;
 346        int rc;
 347
 348        trace_kvm_s390_deliver_interrupt(vcpu->vcpu_id, KVM_S390_INT_CPU_TIMER,
 349                                         0, 0);
 350
 351        rc  = put_guest_lc(vcpu, EXT_IRQ_CPU_TIMER,
 352                           (u16 *)__LC_EXT_INT_CODE);
 353        rc |= put_guest_lc(vcpu, 0, (u16 *)__LC_EXT_CPU_ADDR);
 354        rc |= write_guest_lc(vcpu, __LC_EXT_OLD_PSW,
 355                             &vcpu->arch.sie_block->gpsw, sizeof(psw_t));
 356        rc |= read_guest_lc(vcpu, __LC_EXT_NEW_PSW,
 357                            &vcpu->arch.sie_block->gpsw, sizeof(psw_t));
 358        clear_bit(IRQ_PEND_EXT_CPU_TIMER, &li->pending_irqs);
 359        return rc ? -EFAULT : 0;
 360}
 361
 362static int __must_check __deliver_ckc(struct kvm_vcpu *vcpu)
 363{
 364        struct kvm_s390_local_interrupt *li = &vcpu->arch.local_int;
 365        int rc;
 366
 367        trace_kvm_s390_deliver_interrupt(vcpu->vcpu_id, KVM_S390_INT_CLOCK_COMP,
 368                                         0, 0);
 369
 370        rc  = put_guest_lc(vcpu, EXT_IRQ_CLK_COMP,
 371                           (u16 __user *)__LC_EXT_INT_CODE);
 372        rc |= put_guest_lc(vcpu, 0, (u16 *)__LC_EXT_CPU_ADDR);
 373        rc |= write_guest_lc(vcpu, __LC_EXT_OLD_PSW,
 374                             &vcpu->arch.sie_block->gpsw, sizeof(psw_t));
 375        rc |= read_guest_lc(vcpu, __LC_EXT_NEW_PSW,
 376                            &vcpu->arch.sie_block->gpsw, sizeof(psw_t));
 377        clear_bit(IRQ_PEND_EXT_CLOCK_COMP, &li->pending_irqs);
 378        return rc ? -EFAULT : 0;
 379}
 380
 381static int __must_check __deliver_pfault_init(struct kvm_vcpu *vcpu)
 382{
 383        struct kvm_s390_local_interrupt *li = &vcpu->arch.local_int;
 384        struct kvm_s390_ext_info ext;
 385        int rc;
 386
 387        spin_lock(&li->lock);
 388        ext = li->irq.ext;
 389        clear_bit(IRQ_PEND_PFAULT_INIT, &li->pending_irqs);
 390        li->irq.ext.ext_params2 = 0;
 391        spin_unlock(&li->lock);
 392
 393        VCPU_EVENT(vcpu, 4, "deliver: pfault init token 0x%llx",
 394                   ext.ext_params2);
 395        trace_kvm_s390_deliver_interrupt(vcpu->vcpu_id,
 396                                         KVM_S390_INT_PFAULT_INIT,
 397                                         0, ext.ext_params2);
 398
 399        rc  = put_guest_lc(vcpu, EXT_IRQ_CP_SERVICE, (u16 *) __LC_EXT_INT_CODE);
 400        rc |= put_guest_lc(vcpu, PFAULT_INIT, (u16 *) __LC_EXT_CPU_ADDR);
 401        rc |= write_guest_lc(vcpu, __LC_EXT_OLD_PSW,
 402                             &vcpu->arch.sie_block->gpsw, sizeof(psw_t));
 403        rc |= read_guest_lc(vcpu, __LC_EXT_NEW_PSW,
 404                            &vcpu->arch.sie_block->gpsw, sizeof(psw_t));
 405        rc |= put_guest_lc(vcpu, ext.ext_params2, (u64 *) __LC_EXT_PARAMS2);
 406        return rc ? -EFAULT : 0;
 407}
 408
 409static int __write_machine_check(struct kvm_vcpu *vcpu,
 410                                 struct kvm_s390_mchk_info *mchk)
 411{
 412        unsigned long ext_sa_addr;
 413        freg_t fprs[NUM_FPRS];
 414        union mci mci;
 415        int rc;
 416
 417        mci.val = mchk->mcic;
 418        /* take care of lazy register loading */
 419        save_fpu_regs();
 420        save_access_regs(vcpu->run->s.regs.acrs);
 421
 422        /* Extended save area */
 423        rc = read_guest_lc(vcpu, __LC_VX_SAVE_AREA_ADDR, &ext_sa_addr,
 424                            sizeof(unsigned long));
 425        /* Only bits 0-53 are used for address formation */
 426        ext_sa_addr &= ~0x3ffUL;
 427        if (!rc && mci.vr && ext_sa_addr && test_kvm_facility(vcpu->kvm, 129)) {
 428                if (write_guest_abs(vcpu, ext_sa_addr, vcpu->run->s.regs.vrs,
 429                                    512))
 430                        mci.vr = 0;
 431        } else {
 432                mci.vr = 0;
 433        }
 434
 435        /* General interruption information */
 436        rc |= put_guest_lc(vcpu, 1, (u8 __user *) __LC_AR_MODE_ID);
 437        rc |= write_guest_lc(vcpu, __LC_MCK_OLD_PSW,
 438                             &vcpu->arch.sie_block->gpsw, sizeof(psw_t));
 439        rc |= read_guest_lc(vcpu, __LC_MCK_NEW_PSW,
 440                            &vcpu->arch.sie_block->gpsw, sizeof(psw_t));
 441        rc |= put_guest_lc(vcpu, mci.val, (u64 __user *) __LC_MCCK_CODE);
 442
 443        /* Register-save areas */
 444        if (MACHINE_HAS_VX) {
 445                convert_vx_to_fp(fprs, (__vector128 *) vcpu->run->s.regs.vrs);
 446                rc |= write_guest_lc(vcpu, __LC_FPREGS_SAVE_AREA, fprs, 128);
 447        } else {
 448                rc |= write_guest_lc(vcpu, __LC_FPREGS_SAVE_AREA,
 449                                     vcpu->run->s.regs.fprs, 128);
 450        }
 451        rc |= write_guest_lc(vcpu, __LC_GPREGS_SAVE_AREA,
 452                             vcpu->run->s.regs.gprs, 128);
 453        rc |= put_guest_lc(vcpu, current->thread.fpu.fpc,
 454                           (u32 __user *) __LC_FP_CREG_SAVE_AREA);
 455        rc |= put_guest_lc(vcpu, vcpu->arch.sie_block->todpr,
 456                           (u32 __user *) __LC_TOD_PROGREG_SAVE_AREA);
 457        rc |= put_guest_lc(vcpu, kvm_s390_get_cpu_timer(vcpu),
 458                           (u64 __user *) __LC_CPU_TIMER_SAVE_AREA);
 459        rc |= put_guest_lc(vcpu, vcpu->arch.sie_block->ckc >> 8,
 460                           (u64 __user *) __LC_CLOCK_COMP_SAVE_AREA);
 461        rc |= write_guest_lc(vcpu, __LC_AREGS_SAVE_AREA,
 462                             &vcpu->run->s.regs.acrs, 64);
 463        rc |= write_guest_lc(vcpu, __LC_CREGS_SAVE_AREA,
 464                             &vcpu->arch.sie_block->gcr, 128);
 465
 466        /* Extended interruption information */
 467        rc |= put_guest_lc(vcpu, mchk->ext_damage_code,
 468                           (u32 __user *) __LC_EXT_DAMAGE_CODE);
 469        rc |= put_guest_lc(vcpu, mchk->failing_storage_address,
 470                           (u64 __user *) __LC_MCCK_FAIL_STOR_ADDR);
 471        rc |= write_guest_lc(vcpu, __LC_PSW_SAVE_AREA, &mchk->fixed_logout,
 472                             sizeof(mchk->fixed_logout));
 473        return rc ? -EFAULT : 0;
 474}
 475
 476static int __must_check __deliver_machine_check(struct kvm_vcpu *vcpu)
 477{
 478        struct kvm_s390_float_interrupt *fi = &vcpu->kvm->arch.float_int;
 479        struct kvm_s390_local_interrupt *li = &vcpu->arch.local_int;
 480        struct kvm_s390_mchk_info mchk = {};
 481        int deliver = 0;
 482        int rc = 0;
 483
 484        spin_lock(&fi->lock);
 485        spin_lock(&li->lock);
 486        if (test_bit(IRQ_PEND_MCHK_EX, &li->pending_irqs) ||
 487            test_bit(IRQ_PEND_MCHK_REP, &li->pending_irqs)) {
 488                /*
 489                 * If there was an exigent machine check pending, then any
 490                 * repressible machine checks that might have been pending
 491                 * are indicated along with it, so always clear bits for
 492                 * repressible and exigent interrupts
 493                 */
 494                mchk = li->irq.mchk;
 495                clear_bit(IRQ_PEND_MCHK_EX, &li->pending_irqs);
 496                clear_bit(IRQ_PEND_MCHK_REP, &li->pending_irqs);
 497                memset(&li->irq.mchk, 0, sizeof(mchk));
 498                deliver = 1;
 499        }
 500        /*
 501         * We indicate floating repressible conditions along with
 502         * other pending conditions. Channel Report Pending and Channel
 503         * Subsystem damage are the only two and and are indicated by
 504         * bits in mcic and masked in cr14.
 505         */
 506        if (test_and_clear_bit(IRQ_PEND_MCHK_REP, &fi->pending_irqs)) {
 507                mchk.mcic |= fi->mchk.mcic;
 508                mchk.cr14 |= fi->mchk.cr14;
 509                memset(&fi->mchk, 0, sizeof(mchk));
 510                deliver = 1;
 511        }
 512        spin_unlock(&li->lock);
 513        spin_unlock(&fi->lock);
 514
 515        if (deliver) {
 516                VCPU_EVENT(vcpu, 3, "deliver: machine check mcic 0x%llx",
 517                           mchk.mcic);
 518                trace_kvm_s390_deliver_interrupt(vcpu->vcpu_id,
 519                                                 KVM_S390_MCHK,
 520                                                 mchk.cr14, mchk.mcic);
 521                rc = __write_machine_check(vcpu, &mchk);
 522        }
 523        return rc;
 524}
 525
 526static int __must_check __deliver_restart(struct kvm_vcpu *vcpu)
 527{
 528        struct kvm_s390_local_interrupt *li = &vcpu->arch.local_int;
 529        int rc;
 530
 531        VCPU_EVENT(vcpu, 3, "%s", "deliver: cpu restart");
 532        vcpu->stat.deliver_restart_signal++;
 533        trace_kvm_s390_deliver_interrupt(vcpu->vcpu_id, KVM_S390_RESTART, 0, 0);
 534
 535        rc  = write_guest_lc(vcpu,
 536                             offsetof(struct lowcore, restart_old_psw),
 537                             &vcpu->arch.sie_block->gpsw, sizeof(psw_t));
 538        rc |= read_guest_lc(vcpu, offsetof(struct lowcore, restart_psw),
 539                            &vcpu->arch.sie_block->gpsw, sizeof(psw_t));
 540        clear_bit(IRQ_PEND_RESTART, &li->pending_irqs);
 541        return rc ? -EFAULT : 0;
 542}
 543
 544static int __must_check __deliver_set_prefix(struct kvm_vcpu *vcpu)
 545{
 546        struct kvm_s390_local_interrupt *li = &vcpu->arch.local_int;
 547        struct kvm_s390_prefix_info prefix;
 548
 549        spin_lock(&li->lock);
 550        prefix = li->irq.prefix;
 551        li->irq.prefix.address = 0;
 552        clear_bit(IRQ_PEND_SET_PREFIX, &li->pending_irqs);
 553        spin_unlock(&li->lock);
 554
 555        vcpu->stat.deliver_prefix_signal++;
 556        trace_kvm_s390_deliver_interrupt(vcpu->vcpu_id,
 557                                         KVM_S390_SIGP_SET_PREFIX,
 558                                         prefix.address, 0);
 559
 560        kvm_s390_set_prefix(vcpu, prefix.address);
 561        return 0;
 562}
 563
 564static int __must_check __deliver_emergency_signal(struct kvm_vcpu *vcpu)
 565{
 566        struct kvm_s390_local_interrupt *li = &vcpu->arch.local_int;
 567        int rc;
 568        int cpu_addr;
 569
 570        spin_lock(&li->lock);
 571        cpu_addr = find_first_bit(li->sigp_emerg_pending, KVM_MAX_VCPUS);
 572        clear_bit(cpu_addr, li->sigp_emerg_pending);
 573        if (bitmap_empty(li->sigp_emerg_pending, KVM_MAX_VCPUS))
 574                clear_bit(IRQ_PEND_EXT_EMERGENCY, &li->pending_irqs);
 575        spin_unlock(&li->lock);
 576
 577        VCPU_EVENT(vcpu, 4, "%s", "deliver: sigp emerg");
 578        vcpu->stat.deliver_emergency_signal++;
 579        trace_kvm_s390_deliver_interrupt(vcpu->vcpu_id, KVM_S390_INT_EMERGENCY,
 580                                         cpu_addr, 0);
 581
 582        rc  = put_guest_lc(vcpu, EXT_IRQ_EMERGENCY_SIG,
 583                           (u16 *)__LC_EXT_INT_CODE);
 584        rc |= put_guest_lc(vcpu, cpu_addr, (u16 *)__LC_EXT_CPU_ADDR);
 585        rc |= write_guest_lc(vcpu, __LC_EXT_OLD_PSW,
 586                             &vcpu->arch.sie_block->gpsw, sizeof(psw_t));
 587        rc |= read_guest_lc(vcpu, __LC_EXT_NEW_PSW,
 588                            &vcpu->arch.sie_block->gpsw, sizeof(psw_t));
 589        return rc ? -EFAULT : 0;
 590}
 591
 592static int __must_check __deliver_external_call(struct kvm_vcpu *vcpu)
 593{
 594        struct kvm_s390_local_interrupt *li = &vcpu->arch.local_int;
 595        struct kvm_s390_extcall_info extcall;
 596        int rc;
 597
 598        spin_lock(&li->lock);
 599        extcall = li->irq.extcall;
 600        li->irq.extcall.code = 0;
 601        clear_bit(IRQ_PEND_EXT_EXTERNAL, &li->pending_irqs);
 602        spin_unlock(&li->lock);
 603
 604        VCPU_EVENT(vcpu, 4, "%s", "deliver: sigp ext call");
 605        vcpu->stat.deliver_external_call++;
 606        trace_kvm_s390_deliver_interrupt(vcpu->vcpu_id,
 607                                         KVM_S390_INT_EXTERNAL_CALL,
 608                                         extcall.code, 0);
 609
 610        rc  = put_guest_lc(vcpu, EXT_IRQ_EXTERNAL_CALL,
 611                           (u16 *)__LC_EXT_INT_CODE);
 612        rc |= put_guest_lc(vcpu, extcall.code, (u16 *)__LC_EXT_CPU_ADDR);
 613        rc |= write_guest_lc(vcpu, __LC_EXT_OLD_PSW,
 614                             &vcpu->arch.sie_block->gpsw, sizeof(psw_t));
 615        rc |= read_guest_lc(vcpu, __LC_EXT_NEW_PSW, &vcpu->arch.sie_block->gpsw,
 616                            sizeof(psw_t));
 617        return rc ? -EFAULT : 0;
 618}
 619
 620static int __must_check __deliver_prog(struct kvm_vcpu *vcpu)
 621{
 622        struct kvm_s390_local_interrupt *li = &vcpu->arch.local_int;
 623        struct kvm_s390_pgm_info pgm_info;
 624        int rc = 0, nullifying = false;
 625        u16 ilen;
 626
 627        spin_lock(&li->lock);
 628        pgm_info = li->irq.pgm;
 629        clear_bit(IRQ_PEND_PROG, &li->pending_irqs);
 630        memset(&li->irq.pgm, 0, sizeof(pgm_info));
 631        spin_unlock(&li->lock);
 632
 633        ilen = pgm_info.flags & KVM_S390_PGM_FLAGS_ILC_MASK;
 634        VCPU_EVENT(vcpu, 3, "deliver: program irq code 0x%x, ilen:%d",
 635                   pgm_info.code, ilen);
 636        vcpu->stat.deliver_program_int++;
 637        trace_kvm_s390_deliver_interrupt(vcpu->vcpu_id, KVM_S390_PROGRAM_INT,
 638                                         pgm_info.code, 0);
 639
 640        switch (pgm_info.code & ~PGM_PER) {
 641        case PGM_AFX_TRANSLATION:
 642        case PGM_ASX_TRANSLATION:
 643        case PGM_EX_TRANSLATION:
 644        case PGM_LFX_TRANSLATION:
 645        case PGM_LSTE_SEQUENCE:
 646        case PGM_LSX_TRANSLATION:
 647        case PGM_LX_TRANSLATION:
 648        case PGM_PRIMARY_AUTHORITY:
 649        case PGM_SECONDARY_AUTHORITY:
 650                nullifying = true;
 651                /* fall through */
 652        case PGM_SPACE_SWITCH:
 653                rc = put_guest_lc(vcpu, pgm_info.trans_exc_code,
 654                                  (u64 *)__LC_TRANS_EXC_CODE);
 655                break;
 656        case PGM_ALEN_TRANSLATION:
 657        case PGM_ALE_SEQUENCE:
 658        case PGM_ASTE_INSTANCE:
 659        case PGM_ASTE_SEQUENCE:
 660        case PGM_ASTE_VALIDITY:
 661        case PGM_EXTENDED_AUTHORITY:
 662                rc = put_guest_lc(vcpu, pgm_info.exc_access_id,
 663                                  (u8 *)__LC_EXC_ACCESS_ID);
 664                nullifying = true;
 665                break;
 666        case PGM_ASCE_TYPE:
 667        case PGM_PAGE_TRANSLATION:
 668        case PGM_REGION_FIRST_TRANS:
 669        case PGM_REGION_SECOND_TRANS:
 670        case PGM_REGION_THIRD_TRANS:
 671        case PGM_SEGMENT_TRANSLATION:
 672                rc = put_guest_lc(vcpu, pgm_info.trans_exc_code,
 673                                  (u64 *)__LC_TRANS_EXC_CODE);
 674                rc |= put_guest_lc(vcpu, pgm_info.exc_access_id,
 675                                   (u8 *)__LC_EXC_ACCESS_ID);
 676                rc |= put_guest_lc(vcpu, pgm_info.op_access_id,
 677                                   (u8 *)__LC_OP_ACCESS_ID);
 678                nullifying = true;
 679                break;
 680        case PGM_MONITOR:
 681                rc = put_guest_lc(vcpu, pgm_info.mon_class_nr,
 682                                  (u16 *)__LC_MON_CLASS_NR);
 683                rc |= put_guest_lc(vcpu, pgm_info.mon_code,
 684                                   (u64 *)__LC_MON_CODE);
 685                break;
 686        case PGM_VECTOR_PROCESSING:
 687        case PGM_DATA:
 688                rc = put_guest_lc(vcpu, pgm_info.data_exc_code,
 689                                  (u32 *)__LC_DATA_EXC_CODE);
 690                break;
 691        case PGM_PROTECTION:
 692                rc = put_guest_lc(vcpu, pgm_info.trans_exc_code,
 693                                  (u64 *)__LC_TRANS_EXC_CODE);
 694                rc |= put_guest_lc(vcpu, pgm_info.exc_access_id,
 695                                   (u8 *)__LC_EXC_ACCESS_ID);
 696                break;
 697        case PGM_STACK_FULL:
 698        case PGM_STACK_EMPTY:
 699        case PGM_STACK_SPECIFICATION:
 700        case PGM_STACK_TYPE:
 701        case PGM_STACK_OPERATION:
 702        case PGM_TRACE_TABEL:
 703        case PGM_CRYPTO_OPERATION:
 704                nullifying = true;
 705                break;
 706        }
 707
 708        if (pgm_info.code & PGM_PER) {
 709                rc |= put_guest_lc(vcpu, pgm_info.per_code,
 710                                   (u8 *) __LC_PER_CODE);
 711                rc |= put_guest_lc(vcpu, pgm_info.per_atmid,
 712                                   (u8 *)__LC_PER_ATMID);
 713                rc |= put_guest_lc(vcpu, pgm_info.per_address,
 714                                   (u64 *) __LC_PER_ADDRESS);
 715                rc |= put_guest_lc(vcpu, pgm_info.per_access_id,
 716                                   (u8 *) __LC_PER_ACCESS_ID);
 717        }
 718
 719        if (nullifying && !(pgm_info.flags & KVM_S390_PGM_FLAGS_NO_REWIND))
 720                kvm_s390_rewind_psw(vcpu, ilen);
 721
 722        /* bit 1+2 of the target are the ilc, so we can directly use ilen */
 723        rc |= put_guest_lc(vcpu, ilen, (u16 *) __LC_PGM_ILC);
 724        rc |= put_guest_lc(vcpu, vcpu->arch.sie_block->gbea,
 725                                 (u64 *) __LC_LAST_BREAK);
 726        rc |= put_guest_lc(vcpu, pgm_info.code,
 727                           (u16 *)__LC_PGM_INT_CODE);
 728        rc |= write_guest_lc(vcpu, __LC_PGM_OLD_PSW,
 729                             &vcpu->arch.sie_block->gpsw, sizeof(psw_t));
 730        rc |= read_guest_lc(vcpu, __LC_PGM_NEW_PSW,
 731                            &vcpu->arch.sie_block->gpsw, sizeof(psw_t));
 732        return rc ? -EFAULT : 0;
 733}
 734
 735static int __must_check __deliver_service(struct kvm_vcpu *vcpu)
 736{
 737        struct kvm_s390_float_interrupt *fi = &vcpu->kvm->arch.float_int;
 738        struct kvm_s390_ext_info ext;
 739        int rc = 0;
 740
 741        spin_lock(&fi->lock);
 742        if (!(test_bit(IRQ_PEND_EXT_SERVICE, &fi->pending_irqs))) {
 743                spin_unlock(&fi->lock);
 744                return 0;
 745        }
 746        ext = fi->srv_signal;
 747        memset(&fi->srv_signal, 0, sizeof(ext));
 748        clear_bit(IRQ_PEND_EXT_SERVICE, &fi->pending_irqs);
 749        spin_unlock(&fi->lock);
 750
 751        VCPU_EVENT(vcpu, 4, "deliver: sclp parameter 0x%x",
 752                   ext.ext_params);
 753        vcpu->stat.deliver_service_signal++;
 754        trace_kvm_s390_deliver_interrupt(vcpu->vcpu_id, KVM_S390_INT_SERVICE,
 755                                         ext.ext_params, 0);
 756
 757        rc  = put_guest_lc(vcpu, EXT_IRQ_SERVICE_SIG, (u16 *)__LC_EXT_INT_CODE);
 758        rc |= put_guest_lc(vcpu, 0, (u16 *)__LC_EXT_CPU_ADDR);
 759        rc |= write_guest_lc(vcpu, __LC_EXT_OLD_PSW,
 760                             &vcpu->arch.sie_block->gpsw, sizeof(psw_t));
 761        rc |= read_guest_lc(vcpu, __LC_EXT_NEW_PSW,
 762                            &vcpu->arch.sie_block->gpsw, sizeof(psw_t));
 763        rc |= put_guest_lc(vcpu, ext.ext_params,
 764                           (u32 *)__LC_EXT_PARAMS);
 765
 766        return rc ? -EFAULT : 0;
 767}
 768
 769static int __must_check __deliver_pfault_done(struct kvm_vcpu *vcpu)
 770{
 771        struct kvm_s390_float_interrupt *fi = &vcpu->kvm->arch.float_int;
 772        struct kvm_s390_interrupt_info *inti;
 773        int rc = 0;
 774
 775        spin_lock(&fi->lock);
 776        inti = list_first_entry_or_null(&fi->lists[FIRQ_LIST_PFAULT],
 777                                        struct kvm_s390_interrupt_info,
 778                                        list);
 779        if (inti) {
 780                list_del(&inti->list);
 781                fi->counters[FIRQ_CNTR_PFAULT] -= 1;
 782        }
 783        if (list_empty(&fi->lists[FIRQ_LIST_PFAULT]))
 784                clear_bit(IRQ_PEND_PFAULT_DONE, &fi->pending_irqs);
 785        spin_unlock(&fi->lock);
 786
 787        if (inti) {
 788                trace_kvm_s390_deliver_interrupt(vcpu->vcpu_id,
 789                                                 KVM_S390_INT_PFAULT_DONE, 0,
 790                                                 inti->ext.ext_params2);
 791                VCPU_EVENT(vcpu, 4, "deliver: pfault done token 0x%llx",
 792                           inti->ext.ext_params2);
 793
 794                rc  = put_guest_lc(vcpu, EXT_IRQ_CP_SERVICE,
 795                                (u16 *)__LC_EXT_INT_CODE);
 796                rc |= put_guest_lc(vcpu, PFAULT_DONE,
 797                                (u16 *)__LC_EXT_CPU_ADDR);
 798                rc |= write_guest_lc(vcpu, __LC_EXT_OLD_PSW,
 799                                &vcpu->arch.sie_block->gpsw,
 800                                sizeof(psw_t));
 801                rc |= read_guest_lc(vcpu, __LC_EXT_NEW_PSW,
 802                                &vcpu->arch.sie_block->gpsw,
 803                                sizeof(psw_t));
 804                rc |= put_guest_lc(vcpu, inti->ext.ext_params2,
 805                                (u64 *)__LC_EXT_PARAMS2);
 806                kfree(inti);
 807        }
 808        return rc ? -EFAULT : 0;
 809}
 810
 811static int __must_check __deliver_virtio(struct kvm_vcpu *vcpu)
 812{
 813        struct kvm_s390_float_interrupt *fi = &vcpu->kvm->arch.float_int;
 814        struct kvm_s390_interrupt_info *inti;
 815        int rc = 0;
 816
 817        spin_lock(&fi->lock);
 818        inti = list_first_entry_or_null(&fi->lists[FIRQ_LIST_VIRTIO],
 819                                        struct kvm_s390_interrupt_info,
 820                                        list);
 821        if (inti) {
 822                VCPU_EVENT(vcpu, 4,
 823                           "deliver: virtio parm: 0x%x,parm64: 0x%llx",
 824                           inti->ext.ext_params, inti->ext.ext_params2);
 825                vcpu->stat.deliver_virtio_interrupt++;
 826                trace_kvm_s390_deliver_interrupt(vcpu->vcpu_id,
 827                                inti->type,
 828                                inti->ext.ext_params,
 829                                inti->ext.ext_params2);
 830                list_del(&inti->list);
 831                fi->counters[FIRQ_CNTR_VIRTIO] -= 1;
 832        }
 833        if (list_empty(&fi->lists[FIRQ_LIST_VIRTIO]))
 834                clear_bit(IRQ_PEND_VIRTIO, &fi->pending_irqs);
 835        spin_unlock(&fi->lock);
 836
 837        if (inti) {
 838                rc  = put_guest_lc(vcpu, EXT_IRQ_CP_SERVICE,
 839                                (u16 *)__LC_EXT_INT_CODE);
 840                rc |= put_guest_lc(vcpu, VIRTIO_PARAM,
 841                                (u16 *)__LC_EXT_CPU_ADDR);
 842                rc |= write_guest_lc(vcpu, __LC_EXT_OLD_PSW,
 843                                &vcpu->arch.sie_block->gpsw,
 844                                sizeof(psw_t));
 845                rc |= read_guest_lc(vcpu, __LC_EXT_NEW_PSW,
 846                                &vcpu->arch.sie_block->gpsw,
 847                                sizeof(psw_t));
 848                rc |= put_guest_lc(vcpu, inti->ext.ext_params,
 849                                (u32 *)__LC_EXT_PARAMS);
 850                rc |= put_guest_lc(vcpu, inti->ext.ext_params2,
 851                                (u64 *)__LC_EXT_PARAMS2);
 852                kfree(inti);
 853        }
 854        return rc ? -EFAULT : 0;
 855}
 856
 857static int __must_check __deliver_io(struct kvm_vcpu *vcpu,
 858                                     unsigned long irq_type)
 859{
 860        struct list_head *isc_list;
 861        struct kvm_s390_float_interrupt *fi;
 862        struct kvm_s390_interrupt_info *inti = NULL;
 863        int rc = 0;
 864
 865        fi = &vcpu->kvm->arch.float_int;
 866
 867        spin_lock(&fi->lock);
 868        isc_list = &fi->lists[irq_type - IRQ_PEND_IO_ISC_0];
 869        inti = list_first_entry_or_null(isc_list,
 870                                        struct kvm_s390_interrupt_info,
 871                                        list);
 872        if (inti) {
 873                if (inti->type & KVM_S390_INT_IO_AI_MASK)
 874                        VCPU_EVENT(vcpu, 4, "%s", "deliver: I/O (AI)");
 875                else
 876                        VCPU_EVENT(vcpu, 4, "deliver: I/O %x ss %x schid %04x",
 877                        inti->io.subchannel_id >> 8,
 878                        inti->io.subchannel_id >> 1 & 0x3,
 879                        inti->io.subchannel_nr);
 880
 881                vcpu->stat.deliver_io_int++;
 882                trace_kvm_s390_deliver_interrupt(vcpu->vcpu_id,
 883                                inti->type,
 884                                ((__u32)inti->io.subchannel_id << 16) |
 885                                inti->io.subchannel_nr,
 886                                ((__u64)inti->io.io_int_parm << 32) |
 887                                inti->io.io_int_word);
 888                list_del(&inti->list);
 889                fi->counters[FIRQ_CNTR_IO] -= 1;
 890        }
 891        if (list_empty(isc_list))
 892                clear_bit(irq_type, &fi->pending_irqs);
 893        spin_unlock(&fi->lock);
 894
 895        if (inti) {
 896                rc  = put_guest_lc(vcpu, inti->io.subchannel_id,
 897                                (u16 *)__LC_SUBCHANNEL_ID);
 898                rc |= put_guest_lc(vcpu, inti->io.subchannel_nr,
 899                                (u16 *)__LC_SUBCHANNEL_NR);
 900                rc |= put_guest_lc(vcpu, inti->io.io_int_parm,
 901                                (u32 *)__LC_IO_INT_PARM);
 902                rc |= put_guest_lc(vcpu, inti->io.io_int_word,
 903                                (u32 *)__LC_IO_INT_WORD);
 904                rc |= write_guest_lc(vcpu, __LC_IO_OLD_PSW,
 905                                &vcpu->arch.sie_block->gpsw,
 906                                sizeof(psw_t));
 907                rc |= read_guest_lc(vcpu, __LC_IO_NEW_PSW,
 908                                &vcpu->arch.sie_block->gpsw,
 909                                sizeof(psw_t));
 910                kfree(inti);
 911        }
 912
 913        return rc ? -EFAULT : 0;
 914}
 915
 916typedef int (*deliver_irq_t)(struct kvm_vcpu *vcpu);
 917
 918static const deliver_irq_t deliver_irq_funcs[] = {
 919        [IRQ_PEND_MCHK_EX]        = __deliver_machine_check,
 920        [IRQ_PEND_MCHK_REP]       = __deliver_machine_check,
 921        [IRQ_PEND_PROG]           = __deliver_prog,
 922        [IRQ_PEND_EXT_EMERGENCY]  = __deliver_emergency_signal,
 923        [IRQ_PEND_EXT_EXTERNAL]   = __deliver_external_call,
 924        [IRQ_PEND_EXT_CLOCK_COMP] = __deliver_ckc,
 925        [IRQ_PEND_EXT_CPU_TIMER]  = __deliver_cpu_timer,
 926        [IRQ_PEND_RESTART]        = __deliver_restart,
 927        [IRQ_PEND_SET_PREFIX]     = __deliver_set_prefix,
 928        [IRQ_PEND_PFAULT_INIT]    = __deliver_pfault_init,
 929        [IRQ_PEND_EXT_SERVICE]    = __deliver_service,
 930        [IRQ_PEND_PFAULT_DONE]    = __deliver_pfault_done,
 931        [IRQ_PEND_VIRTIO]         = __deliver_virtio,
 932};
 933
 934/* Check whether an external call is pending (deliverable or not) */
 935int kvm_s390_ext_call_pending(struct kvm_vcpu *vcpu)
 936{
 937        struct kvm_s390_local_interrupt *li = &vcpu->arch.local_int;
 938
 939        if (!sclp.has_sigpif)
 940                return test_bit(IRQ_PEND_EXT_EXTERNAL, &li->pending_irqs);
 941
 942        return sca_ext_call_pending(vcpu, NULL);
 943}
 944
 945int kvm_s390_vcpu_has_irq(struct kvm_vcpu *vcpu, int exclude_stop)
 946{
 947        if (deliverable_irqs(vcpu))
 948                return 1;
 949
 950        if (kvm_cpu_has_pending_timer(vcpu))
 951                return 1;
 952
 953        /* external call pending and deliverable */
 954        if (kvm_s390_ext_call_pending(vcpu) &&
 955            !psw_extint_disabled(vcpu) &&
 956            (vcpu->arch.sie_block->gcr[0] & 0x2000ul))
 957                return 1;
 958
 959        if (!exclude_stop && kvm_s390_is_stop_irq_pending(vcpu))
 960                return 1;
 961        return 0;
 962}
 963
 964int kvm_cpu_has_pending_timer(struct kvm_vcpu *vcpu)
 965{
 966        return ckc_irq_pending(vcpu) || cpu_timer_irq_pending(vcpu);
 967}
 968
 969static u64 __calculate_sltime(struct kvm_vcpu *vcpu)
 970{
 971        u64 now, cputm, sltime = 0;
 972
 973        if (ckc_interrupts_enabled(vcpu)) {
 974                now = kvm_s390_get_tod_clock_fast(vcpu->kvm);
 975                sltime = tod_to_ns(vcpu->arch.sie_block->ckc - now);
 976                /* already expired or overflow? */
 977                if (!sltime || vcpu->arch.sie_block->ckc <= now)
 978                        return 0;
 979                if (cpu_timer_interrupts_enabled(vcpu)) {
 980                        cputm = kvm_s390_get_cpu_timer(vcpu);
 981                        /* already expired? */
 982                        if (cputm >> 63)
 983                                return 0;
 984                        return min(sltime, tod_to_ns(cputm));
 985                }
 986        } else if (cpu_timer_interrupts_enabled(vcpu)) {
 987                sltime = kvm_s390_get_cpu_timer(vcpu);
 988                /* already expired? */
 989                if (sltime >> 63)
 990                        return 0;
 991        }
 992        return sltime;
 993}
 994
 995int kvm_s390_handle_wait(struct kvm_vcpu *vcpu)
 996{
 997        u64 sltime;
 998
 999        vcpu->stat.exit_wait_state++;
1000
1001        /* fast path */
1002        if (kvm_arch_vcpu_runnable(vcpu))
1003                return 0;
1004
1005        if (psw_interrupts_disabled(vcpu)) {
1006                VCPU_EVENT(vcpu, 3, "%s", "disabled wait");
1007                return -EOPNOTSUPP; /* disabled wait */
1008        }
1009
1010        if (!ckc_interrupts_enabled(vcpu) &&
1011            !cpu_timer_interrupts_enabled(vcpu)) {
1012                VCPU_EVENT(vcpu, 3, "%s", "enabled wait w/o timer");
1013                __set_cpu_idle(vcpu);
1014                goto no_timer;
1015        }
1016
1017        sltime = __calculate_sltime(vcpu);
1018        if (!sltime)
1019                return 0;
1020
1021        __set_cpu_idle(vcpu);
1022        hrtimer_start(&vcpu->arch.ckc_timer, sltime, HRTIMER_MODE_REL);
1023        VCPU_EVENT(vcpu, 4, "enabled wait: %llu ns", sltime);
1024no_timer:
1025        srcu_read_unlock(&vcpu->kvm->srcu, vcpu->srcu_idx);
1026        kvm_vcpu_block(vcpu);
1027        __unset_cpu_idle(vcpu);
1028        vcpu->srcu_idx = srcu_read_lock(&vcpu->kvm->srcu);
1029
1030        hrtimer_cancel(&vcpu->arch.ckc_timer);
1031        return 0;
1032}
1033
1034void kvm_s390_vcpu_wakeup(struct kvm_vcpu *vcpu)
1035{
1036        /*
1037         * We cannot move this into the if, as the CPU might be already
1038         * in kvm_vcpu_block without having the waitqueue set (polling)
1039         */
1040        vcpu->valid_wakeup = true;
1041        if (swait_active(&vcpu->wq)) {
1042                /*
1043                 * The vcpu gave up the cpu voluntarily, mark it as a good
1044                 * yield-candidate.
1045                 */
1046                vcpu->preempted = true;
1047                swake_up(&vcpu->wq);
1048                vcpu->stat.halt_wakeup++;
1049        }
1050        /*
1051         * The VCPU might not be sleeping but is executing the VSIE. Let's
1052         * kick it, so it leaves the SIE to process the request.
1053         */
1054        kvm_s390_vsie_kick(vcpu);
1055}
1056
1057enum hrtimer_restart kvm_s390_idle_wakeup(struct hrtimer *timer)
1058{
1059        struct kvm_vcpu *vcpu;
1060        u64 sltime;
1061
1062        vcpu = container_of(timer, struct kvm_vcpu, arch.ckc_timer);
1063        sltime = __calculate_sltime(vcpu);
1064
1065        /*
1066         * If the monotonic clock runs faster than the tod clock we might be
1067         * woken up too early and have to go back to sleep to avoid deadlocks.
1068         */
1069        if (sltime && hrtimer_forward_now(timer, ns_to_ktime(sltime)))
1070                return HRTIMER_RESTART;
1071        kvm_s390_vcpu_wakeup(vcpu);
1072        return HRTIMER_NORESTART;
1073}
1074
1075void kvm_s390_clear_local_irqs(struct kvm_vcpu *vcpu)
1076{
1077        struct kvm_s390_local_interrupt *li = &vcpu->arch.local_int;
1078
1079        spin_lock(&li->lock);
1080        li->pending_irqs = 0;
1081        bitmap_zero(li->sigp_emerg_pending, KVM_MAX_VCPUS);
1082        memset(&li->irq, 0, sizeof(li->irq));
1083        spin_unlock(&li->lock);
1084
1085        sca_clear_ext_call(vcpu);
1086}
1087
1088int __must_check kvm_s390_deliver_pending_interrupts(struct kvm_vcpu *vcpu)
1089{
1090        struct kvm_s390_local_interrupt *li = &vcpu->arch.local_int;
1091        deliver_irq_t func;
1092        int rc = 0;
1093        unsigned long irq_type;
1094        unsigned long irqs;
1095
1096        __reset_intercept_indicators(vcpu);
1097
1098        /* pending ckc conditions might have been invalidated */
1099        clear_bit(IRQ_PEND_EXT_CLOCK_COMP, &li->pending_irqs);
1100        if (ckc_irq_pending(vcpu))
1101                set_bit(IRQ_PEND_EXT_CLOCK_COMP, &li->pending_irqs);
1102
1103        /* pending cpu timer conditions might have been invalidated */
1104        clear_bit(IRQ_PEND_EXT_CPU_TIMER, &li->pending_irqs);
1105        if (cpu_timer_irq_pending(vcpu))
1106                set_bit(IRQ_PEND_EXT_CPU_TIMER, &li->pending_irqs);
1107
1108        while ((irqs = deliverable_irqs(vcpu)) && !rc) {
1109                /* bits are in the order of interrupt priority */
1110                irq_type = find_first_bit(&irqs, IRQ_PEND_COUNT);
1111                if (is_ioirq(irq_type)) {
1112                        rc = __deliver_io(vcpu, irq_type);
1113                } else {
1114                        func = deliver_irq_funcs[irq_type];
1115                        if (!func) {
1116                                WARN_ON_ONCE(func == NULL);
1117                                clear_bit(irq_type, &li->pending_irqs);
1118                                continue;
1119                        }
1120                        rc = func(vcpu);
1121                }
1122        }
1123
1124        set_intercept_indicators(vcpu);
1125
1126        return rc;
1127}
1128
1129static int __inject_prog(struct kvm_vcpu *vcpu, struct kvm_s390_irq *irq)
1130{
1131        struct kvm_s390_local_interrupt *li = &vcpu->arch.local_int;
1132
1133        VCPU_EVENT(vcpu, 3, "inject: program irq code 0x%x", irq->u.pgm.code);
1134        trace_kvm_s390_inject_vcpu(vcpu->vcpu_id, KVM_S390_PROGRAM_INT,
1135                                   irq->u.pgm.code, 0);
1136
1137        if (!(irq->u.pgm.flags & KVM_S390_PGM_FLAGS_ILC_VALID)) {
1138                /* auto detection if no valid ILC was given */
1139                irq->u.pgm.flags &= ~KVM_S390_PGM_FLAGS_ILC_MASK;
1140                irq->u.pgm.flags |= kvm_s390_get_ilen(vcpu);
1141                irq->u.pgm.flags |= KVM_S390_PGM_FLAGS_ILC_VALID;
1142        }
1143
1144        if (irq->u.pgm.code == PGM_PER) {
1145                li->irq.pgm.code |= PGM_PER;
1146                li->irq.pgm.flags = irq->u.pgm.flags;
1147                /* only modify PER related information */
1148                li->irq.pgm.per_address = irq->u.pgm.per_address;
1149                li->irq.pgm.per_code = irq->u.pgm.per_code;
1150                li->irq.pgm.per_atmid = irq->u.pgm.per_atmid;
1151                li->irq.pgm.per_access_id = irq->u.pgm.per_access_id;
1152        } else if (!(irq->u.pgm.code & PGM_PER)) {
1153                li->irq.pgm.code = (li->irq.pgm.code & PGM_PER) |
1154                                   irq->u.pgm.code;
1155                li->irq.pgm.flags = irq->u.pgm.flags;
1156                /* only modify non-PER information */
1157                li->irq.pgm.trans_exc_code = irq->u.pgm.trans_exc_code;
1158                li->irq.pgm.mon_code = irq->u.pgm.mon_code;
1159                li->irq.pgm.data_exc_code = irq->u.pgm.data_exc_code;
1160                li->irq.pgm.mon_class_nr = irq->u.pgm.mon_class_nr;
1161                li->irq.pgm.exc_access_id = irq->u.pgm.exc_access_id;
1162                li->irq.pgm.op_access_id = irq->u.pgm.op_access_id;
1163        } else {
1164                li->irq.pgm = irq->u.pgm;
1165        }
1166        set_bit(IRQ_PEND_PROG, &li->pending_irqs);
1167        return 0;
1168}
1169
1170static int __inject_pfault_init(struct kvm_vcpu *vcpu, struct kvm_s390_irq *irq)
1171{
1172        struct kvm_s390_local_interrupt *li = &vcpu->arch.local_int;
1173
1174        VCPU_EVENT(vcpu, 4, "inject: pfault init parameter block at 0x%llx",
1175                   irq->u.ext.ext_params2);
1176        trace_kvm_s390_inject_vcpu(vcpu->vcpu_id, KVM_S390_INT_PFAULT_INIT,
1177                                   irq->u.ext.ext_params,
1178                                   irq->u.ext.ext_params2);
1179
1180        li->irq.ext = irq->u.ext;
1181        set_bit(IRQ_PEND_PFAULT_INIT, &li->pending_irqs);
1182        atomic_or(CPUSTAT_EXT_INT, li->cpuflags);
1183        return 0;
1184}
1185
1186static int __inject_extcall(struct kvm_vcpu *vcpu, struct kvm_s390_irq *irq)
1187{
1188        struct kvm_s390_local_interrupt *li = &vcpu->arch.local_int;
1189        struct kvm_s390_extcall_info *extcall = &li->irq.extcall;
1190        uint16_t src_id = irq->u.extcall.code;
1191
1192        VCPU_EVENT(vcpu, 4, "inject: external call source-cpu:%u",
1193                   src_id);
1194        trace_kvm_s390_inject_vcpu(vcpu->vcpu_id, KVM_S390_INT_EXTERNAL_CALL,
1195                                   src_id, 0);
1196
1197        /* sending vcpu invalid */
1198        if (kvm_get_vcpu_by_id(vcpu->kvm, src_id) == NULL)
1199                return -EINVAL;
1200
1201        if (sclp.has_sigpif)
1202                return sca_inject_ext_call(vcpu, src_id);
1203
1204        if (test_and_set_bit(IRQ_PEND_EXT_EXTERNAL, &li->pending_irqs))
1205                return -EBUSY;
1206        *extcall = irq->u.extcall;
1207        atomic_or(CPUSTAT_EXT_INT, li->cpuflags);
1208        return 0;
1209}
1210
1211static int __inject_set_prefix(struct kvm_vcpu *vcpu, struct kvm_s390_irq *irq)
1212{
1213        struct kvm_s390_local_interrupt *li = &vcpu->arch.local_int;
1214        struct kvm_s390_prefix_info *prefix = &li->irq.prefix;
1215
1216        VCPU_EVENT(vcpu, 3, "inject: set prefix to %x",
1217                   irq->u.prefix.address);
1218        trace_kvm_s390_inject_vcpu(vcpu->vcpu_id, KVM_S390_SIGP_SET_PREFIX,
1219                                   irq->u.prefix.address, 0);
1220
1221        if (!is_vcpu_stopped(vcpu))
1222                return -EBUSY;
1223
1224        *prefix = irq->u.prefix;
1225        set_bit(IRQ_PEND_SET_PREFIX, &li->pending_irqs);
1226        return 0;
1227}
1228
1229#define KVM_S390_STOP_SUPP_FLAGS (KVM_S390_STOP_FLAG_STORE_STATUS)
1230static int __inject_sigp_stop(struct kvm_vcpu *vcpu, struct kvm_s390_irq *irq)
1231{
1232        struct kvm_s390_local_interrupt *li = &vcpu->arch.local_int;
1233        struct kvm_s390_stop_info *stop = &li->irq.stop;
1234        int rc = 0;
1235
1236        trace_kvm_s390_inject_vcpu(vcpu->vcpu_id, KVM_S390_SIGP_STOP, 0, 0);
1237
1238        if (irq->u.stop.flags & ~KVM_S390_STOP_SUPP_FLAGS)
1239                return -EINVAL;
1240
1241        if (is_vcpu_stopped(vcpu)) {
1242                if (irq->u.stop.flags & KVM_S390_STOP_FLAG_STORE_STATUS)
1243                        rc = kvm_s390_store_status_unloaded(vcpu,
1244                                                KVM_S390_STORE_STATUS_NOADDR);
1245                return rc;
1246        }
1247
1248        if (test_and_set_bit(IRQ_PEND_SIGP_STOP, &li->pending_irqs))
1249                return -EBUSY;
1250        stop->flags = irq->u.stop.flags;
1251        __set_cpuflag(vcpu, CPUSTAT_STOP_INT);
1252        return 0;
1253}
1254
1255static int __inject_sigp_restart(struct kvm_vcpu *vcpu,
1256                                 struct kvm_s390_irq *irq)
1257{
1258        struct kvm_s390_local_interrupt *li = &vcpu->arch.local_int;
1259
1260        VCPU_EVENT(vcpu, 3, "%s", "inject: restart int");
1261        trace_kvm_s390_inject_vcpu(vcpu->vcpu_id, KVM_S390_RESTART, 0, 0);
1262
1263        set_bit(IRQ_PEND_RESTART, &li->pending_irqs);
1264        return 0;
1265}
1266
1267static int __inject_sigp_emergency(struct kvm_vcpu *vcpu,
1268                                   struct kvm_s390_irq *irq)
1269{
1270        struct kvm_s390_local_interrupt *li = &vcpu->arch.local_int;
1271
1272        VCPU_EVENT(vcpu, 4, "inject: emergency from cpu %u",
1273                   irq->u.emerg.code);
1274        trace_kvm_s390_inject_vcpu(vcpu->vcpu_id, KVM_S390_INT_EMERGENCY,
1275                                   irq->u.emerg.code, 0);
1276
1277        /* sending vcpu invalid */
1278        if (kvm_get_vcpu_by_id(vcpu->kvm, irq->u.emerg.code) == NULL)
1279                return -EINVAL;
1280
1281        set_bit(irq->u.emerg.code, li->sigp_emerg_pending);
1282        set_bit(IRQ_PEND_EXT_EMERGENCY, &li->pending_irqs);
1283        atomic_or(CPUSTAT_EXT_INT, li->cpuflags);
1284        return 0;
1285}
1286
1287static int __inject_mchk(struct kvm_vcpu *vcpu, struct kvm_s390_irq *irq)
1288{
1289        struct kvm_s390_local_interrupt *li = &vcpu->arch.local_int;
1290        struct kvm_s390_mchk_info *mchk = &li->irq.mchk;
1291
1292        VCPU_EVENT(vcpu, 3, "inject: machine check mcic 0x%llx",
1293                   irq->u.mchk.mcic);
1294        trace_kvm_s390_inject_vcpu(vcpu->vcpu_id, KVM_S390_MCHK, 0,
1295                                   irq->u.mchk.mcic);
1296
1297        /*
1298         * Because repressible machine checks can be indicated along with
1299         * exigent machine checks (PoP, Chapter 11, Interruption action)
1300         * we need to combine cr14, mcic and external damage code.
1301         * Failing storage address and the logout area should not be or'ed
1302         * together, we just indicate the last occurrence of the corresponding
1303         * machine check
1304         */
1305        mchk->cr14 |= irq->u.mchk.cr14;
1306        mchk->mcic |= irq->u.mchk.mcic;
1307        mchk->ext_damage_code |= irq->u.mchk.ext_damage_code;
1308        mchk->failing_storage_address = irq->u.mchk.failing_storage_address;
1309        memcpy(&mchk->fixed_logout, &irq->u.mchk.fixed_logout,
1310               sizeof(mchk->fixed_logout));
1311        if (mchk->mcic & MCHK_EX_MASK)
1312                set_bit(IRQ_PEND_MCHK_EX, &li->pending_irqs);
1313        else if (mchk->mcic & MCHK_REP_MASK)
1314                set_bit(IRQ_PEND_MCHK_REP,  &li->pending_irqs);
1315        return 0;
1316}
1317
1318static int __inject_ckc(struct kvm_vcpu *vcpu)
1319{
1320        struct kvm_s390_local_interrupt *li = &vcpu->arch.local_int;
1321
1322        VCPU_EVENT(vcpu, 3, "%s", "inject: clock comparator external");
1323        trace_kvm_s390_inject_vcpu(vcpu->vcpu_id, KVM_S390_INT_CLOCK_COMP,
1324                                   0, 0);
1325
1326        set_bit(IRQ_PEND_EXT_CLOCK_COMP, &li->pending_irqs);
1327        atomic_or(CPUSTAT_EXT_INT, li->cpuflags);
1328        return 0;
1329}
1330
1331static int __inject_cpu_timer(struct kvm_vcpu *vcpu)
1332{
1333        struct kvm_s390_local_interrupt *li = &vcpu->arch.local_int;
1334
1335        VCPU_EVENT(vcpu, 3, "%s", "inject: cpu timer external");
1336        trace_kvm_s390_inject_vcpu(vcpu->vcpu_id, KVM_S390_INT_CPU_TIMER,
1337                                   0, 0);
1338
1339        set_bit(IRQ_PEND_EXT_CPU_TIMER, &li->pending_irqs);
1340        atomic_or(CPUSTAT_EXT_INT, li->cpuflags);
1341        return 0;
1342}
1343
1344static struct kvm_s390_interrupt_info *get_io_int(struct kvm *kvm,
1345                                                  int isc, u32 schid)
1346{
1347        struct kvm_s390_float_interrupt *fi = &kvm->arch.float_int;
1348        struct list_head *isc_list = &fi->lists[FIRQ_LIST_IO_ISC_0 + isc];
1349        struct kvm_s390_interrupt_info *iter;
1350        u16 id = (schid & 0xffff0000U) >> 16;
1351        u16 nr = schid & 0x0000ffffU;
1352
1353        spin_lock(&fi->lock);
1354        list_for_each_entry(iter, isc_list, list) {
1355                if (schid && (id != iter->io.subchannel_id ||
1356                              nr != iter->io.subchannel_nr))
1357                        continue;
1358                /* found an appropriate entry */
1359                list_del_init(&iter->list);
1360                fi->counters[FIRQ_CNTR_IO] -= 1;
1361                if (list_empty(isc_list))
1362                        clear_bit(IRQ_PEND_IO_ISC_0 + isc, &fi->pending_irqs);
1363                spin_unlock(&fi->lock);
1364                return iter;
1365        }
1366        spin_unlock(&fi->lock);
1367        return NULL;
1368}
1369
1370/*
1371 * Dequeue and return an I/O interrupt matching any of the interruption
1372 * subclasses as designated by the isc mask in cr6 and the schid (if != 0).
1373 */
1374struct kvm_s390_interrupt_info *kvm_s390_get_io_int(struct kvm *kvm,
1375                                                    u64 isc_mask, u32 schid)
1376{
1377        struct kvm_s390_interrupt_info *inti = NULL;
1378        int isc;
1379
1380        for (isc = 0; isc <= MAX_ISC && !inti; isc++) {
1381                if (isc_mask & isc_to_isc_bits(isc))
1382                        inti = get_io_int(kvm, isc, schid);
1383        }
1384        return inti;
1385}
1386
1387#define SCCB_MASK 0xFFFFFFF8
1388#define SCCB_EVENT_PENDING 0x3
1389
1390static int __inject_service(struct kvm *kvm,
1391                             struct kvm_s390_interrupt_info *inti)
1392{
1393        struct kvm_s390_float_interrupt *fi = &kvm->arch.float_int;
1394
1395        spin_lock(&fi->lock);
1396        fi->srv_signal.ext_params |= inti->ext.ext_params & SCCB_EVENT_PENDING;
1397        /*
1398         * Early versions of the QEMU s390 bios will inject several
1399         * service interrupts after another without handling a
1400         * condition code indicating busy.
1401         * We will silently ignore those superfluous sccb values.
1402         * A future version of QEMU will take care of serialization
1403         * of servc requests
1404         */
1405        if (fi->srv_signal.ext_params & SCCB_MASK)
1406                goto out;
1407        fi->srv_signal.ext_params |= inti->ext.ext_params & SCCB_MASK;
1408        set_bit(IRQ_PEND_EXT_SERVICE, &fi->pending_irqs);
1409out:
1410        spin_unlock(&fi->lock);
1411        kfree(inti);
1412        return 0;
1413}
1414
1415static int __inject_virtio(struct kvm *kvm,
1416                            struct kvm_s390_interrupt_info *inti)
1417{
1418        struct kvm_s390_float_interrupt *fi = &kvm->arch.float_int;
1419
1420        spin_lock(&fi->lock);
1421        if (fi->counters[FIRQ_CNTR_VIRTIO] >= KVM_S390_MAX_VIRTIO_IRQS) {
1422                spin_unlock(&fi->lock);
1423                return -EBUSY;
1424        }
1425        fi->counters[FIRQ_CNTR_VIRTIO] += 1;
1426        list_add_tail(&inti->list, &fi->lists[FIRQ_LIST_VIRTIO]);
1427        set_bit(IRQ_PEND_VIRTIO, &fi->pending_irqs);
1428        spin_unlock(&fi->lock);
1429        return 0;
1430}
1431
1432static int __inject_pfault_done(struct kvm *kvm,
1433                                 struct kvm_s390_interrupt_info *inti)
1434{
1435        struct kvm_s390_float_interrupt *fi = &kvm->arch.float_int;
1436
1437        spin_lock(&fi->lock);
1438        if (fi->counters[FIRQ_CNTR_PFAULT] >=
1439                (ASYNC_PF_PER_VCPU * KVM_MAX_VCPUS)) {
1440                spin_unlock(&fi->lock);
1441                return -EBUSY;
1442        }
1443        fi->counters[FIRQ_CNTR_PFAULT] += 1;
1444        list_add_tail(&inti->list, &fi->lists[FIRQ_LIST_PFAULT]);
1445        set_bit(IRQ_PEND_PFAULT_DONE, &fi->pending_irqs);
1446        spin_unlock(&fi->lock);
1447        return 0;
1448}
1449
1450#define CR_PENDING_SUBCLASS 28
1451static int __inject_float_mchk(struct kvm *kvm,
1452                                struct kvm_s390_interrupt_info *inti)
1453{
1454        struct kvm_s390_float_interrupt *fi = &kvm->arch.float_int;
1455
1456        spin_lock(&fi->lock);
1457        fi->mchk.cr14 |= inti->mchk.cr14 & (1UL << CR_PENDING_SUBCLASS);
1458        fi->mchk.mcic |= inti->mchk.mcic;
1459        set_bit(IRQ_PEND_MCHK_REP, &fi->pending_irqs);
1460        spin_unlock(&fi->lock);
1461        kfree(inti);
1462        return 0;
1463}
1464
1465static int __inject_io(struct kvm *kvm, struct kvm_s390_interrupt_info *inti)
1466{
1467        struct kvm_s390_float_interrupt *fi;
1468        struct list_head *list;
1469        int isc;
1470
1471        fi = &kvm->arch.float_int;
1472        spin_lock(&fi->lock);
1473        if (fi->counters[FIRQ_CNTR_IO] >= KVM_S390_MAX_FLOAT_IRQS) {
1474                spin_unlock(&fi->lock);
1475                return -EBUSY;
1476        }
1477        fi->counters[FIRQ_CNTR_IO] += 1;
1478
1479        if (inti->type & KVM_S390_INT_IO_AI_MASK)
1480                VM_EVENT(kvm, 4, "%s", "inject: I/O (AI)");
1481        else
1482                VM_EVENT(kvm, 4, "inject: I/O %x ss %x schid %04x",
1483                        inti->io.subchannel_id >> 8,
1484                        inti->io.subchannel_id >> 1 & 0x3,
1485                        inti->io.subchannel_nr);
1486        isc = int_word_to_isc(inti->io.io_int_word);
1487        list = &fi->lists[FIRQ_LIST_IO_ISC_0 + isc];
1488        list_add_tail(&inti->list, list);
1489        set_bit(IRQ_PEND_IO_ISC_0 + isc, &fi->pending_irqs);
1490        spin_unlock(&fi->lock);
1491        return 0;
1492}
1493
1494/*
1495 * Find a destination VCPU for a floating irq and kick it.
1496 */
1497static void __floating_irq_kick(struct kvm *kvm, u64 type)
1498{
1499        struct kvm_s390_float_interrupt *fi = &kvm->arch.float_int;
1500        struct kvm_s390_local_interrupt *li;
1501        struct kvm_vcpu *dst_vcpu;
1502        int sigcpu, online_vcpus, nr_tries = 0;
1503
1504        online_vcpus = atomic_read(&kvm->online_vcpus);
1505        if (!online_vcpus)
1506                return;
1507
1508        /* find idle VCPUs first, then round robin */
1509        sigcpu = find_first_bit(fi->idle_mask, online_vcpus);
1510        if (sigcpu == online_vcpus) {
1511                do {
1512                        sigcpu = fi->next_rr_cpu;
1513                        fi->next_rr_cpu = (fi->next_rr_cpu + 1) % online_vcpus;
1514                        /* avoid endless loops if all vcpus are stopped */
1515                        if (nr_tries++ >= online_vcpus)
1516                                return;
1517                } while (is_vcpu_stopped(kvm_get_vcpu(kvm, sigcpu)));
1518        }
1519        dst_vcpu = kvm_get_vcpu(kvm, sigcpu);
1520
1521        /* make the VCPU drop out of the SIE, or wake it up if sleeping */
1522        li = &dst_vcpu->arch.local_int;
1523        spin_lock(&li->lock);
1524        switch (type) {
1525        case KVM_S390_MCHK:
1526                atomic_or(CPUSTAT_STOP_INT, li->cpuflags);
1527                break;
1528        case KVM_S390_INT_IO_MIN...KVM_S390_INT_IO_MAX:
1529                atomic_or(CPUSTAT_IO_INT, li->cpuflags);
1530                break;
1531        default:
1532                atomic_or(CPUSTAT_EXT_INT, li->cpuflags);
1533                break;
1534        }
1535        spin_unlock(&li->lock);
1536        kvm_s390_vcpu_wakeup(dst_vcpu);
1537}
1538
1539static int __inject_vm(struct kvm *kvm, struct kvm_s390_interrupt_info *inti)
1540{
1541        u64 type = READ_ONCE(inti->type);
1542        int rc;
1543
1544        switch (type) {
1545        case KVM_S390_MCHK:
1546                rc = __inject_float_mchk(kvm, inti);
1547                break;
1548        case KVM_S390_INT_VIRTIO:
1549                rc = __inject_virtio(kvm, inti);
1550                break;
1551        case KVM_S390_INT_SERVICE:
1552                rc = __inject_service(kvm, inti);
1553                break;
1554        case KVM_S390_INT_PFAULT_DONE:
1555                rc = __inject_pfault_done(kvm, inti);
1556                break;
1557        case KVM_S390_INT_IO_MIN...KVM_S390_INT_IO_MAX:
1558                rc = __inject_io(kvm, inti);
1559                break;
1560        default:
1561                rc = -EINVAL;
1562        }
1563        if (rc)
1564                return rc;
1565
1566        __floating_irq_kick(kvm, type);
1567        return 0;
1568}
1569
1570int kvm_s390_inject_vm(struct kvm *kvm,
1571                       struct kvm_s390_interrupt *s390int)
1572{
1573        struct kvm_s390_interrupt_info *inti;
1574        int rc;
1575
1576        inti = kzalloc(sizeof(*inti), GFP_KERNEL);
1577        if (!inti)
1578                return -ENOMEM;
1579
1580        inti->type = s390int->type;
1581        switch (inti->type) {
1582        case KVM_S390_INT_VIRTIO:
1583                VM_EVENT(kvm, 5, "inject: virtio parm:%x,parm64:%llx",
1584                         s390int->parm, s390int->parm64);
1585                inti->ext.ext_params = s390int->parm;
1586                inti->ext.ext_params2 = s390int->parm64;
1587                break;
1588        case KVM_S390_INT_SERVICE:
1589                VM_EVENT(kvm, 4, "inject: sclp parm:%x", s390int->parm);
1590                inti->ext.ext_params = s390int->parm;
1591                break;
1592        case KVM_S390_INT_PFAULT_DONE:
1593                inti->ext.ext_params2 = s390int->parm64;
1594                break;
1595        case KVM_S390_MCHK:
1596                VM_EVENT(kvm, 3, "inject: machine check mcic 0x%llx",
1597                         s390int->parm64);
1598                inti->mchk.cr14 = s390int->parm; /* upper bits are not used */
1599                inti->mchk.mcic = s390int->parm64;
1600                break;
1601        case KVM_S390_INT_IO_MIN...KVM_S390_INT_IO_MAX:
1602                inti->io.subchannel_id = s390int->parm >> 16;
1603                inti->io.subchannel_nr = s390int->parm & 0x0000ffffu;
1604                inti->io.io_int_parm = s390int->parm64 >> 32;
1605                inti->io.io_int_word = s390int->parm64 & 0x00000000ffffffffull;
1606                break;
1607        default:
1608                kfree(inti);
1609                return -EINVAL;
1610        }
1611        trace_kvm_s390_inject_vm(s390int->type, s390int->parm, s390int->parm64,
1612                                 2);
1613
1614        rc = __inject_vm(kvm, inti);
1615        if (rc)
1616                kfree(inti);
1617        return rc;
1618}
1619
1620int kvm_s390_reinject_io_int(struct kvm *kvm,
1621                              struct kvm_s390_interrupt_info *inti)
1622{
1623        return __inject_vm(kvm, inti);
1624}
1625
1626int s390int_to_s390irq(struct kvm_s390_interrupt *s390int,
1627                       struct kvm_s390_irq *irq)
1628{
1629        irq->type = s390int->type;
1630        switch (irq->type) {
1631        case KVM_S390_PROGRAM_INT:
1632                if (s390int->parm & 0xffff0000)
1633                        return -EINVAL;
1634                irq->u.pgm.code = s390int->parm;
1635                break;
1636        case KVM_S390_SIGP_SET_PREFIX:
1637                irq->u.prefix.address = s390int->parm;
1638                break;
1639        case KVM_S390_SIGP_STOP:
1640                irq->u.stop.flags = s390int->parm;
1641                break;
1642        case KVM_S390_INT_EXTERNAL_CALL:
1643                if (s390int->parm & 0xffff0000)
1644                        return -EINVAL;
1645                irq->u.extcall.code = s390int->parm;
1646                break;
1647        case KVM_S390_INT_EMERGENCY:
1648                if (s390int->parm & 0xffff0000)
1649                        return -EINVAL;
1650                irq->u.emerg.code = s390int->parm;
1651                break;
1652        case KVM_S390_MCHK:
1653                irq->u.mchk.mcic = s390int->parm64;
1654                break;
1655        }
1656        return 0;
1657}
1658
1659int kvm_s390_is_stop_irq_pending(struct kvm_vcpu *vcpu)
1660{
1661        struct kvm_s390_local_interrupt *li = &vcpu->arch.local_int;
1662
1663        return test_bit(IRQ_PEND_SIGP_STOP, &li->pending_irqs);
1664}
1665
1666void kvm_s390_clear_stop_irq(struct kvm_vcpu *vcpu)
1667{
1668        struct kvm_s390_local_interrupt *li = &vcpu->arch.local_int;
1669
1670        spin_lock(&li->lock);
1671        li->irq.stop.flags = 0;
1672        clear_bit(IRQ_PEND_SIGP_STOP, &li->pending_irqs);
1673        spin_unlock(&li->lock);
1674}
1675
1676static int do_inject_vcpu(struct kvm_vcpu *vcpu, struct kvm_s390_irq *irq)
1677{
1678        int rc;
1679
1680        switch (irq->type) {
1681        case KVM_S390_PROGRAM_INT:
1682                rc = __inject_prog(vcpu, irq);
1683                break;
1684        case KVM_S390_SIGP_SET_PREFIX:
1685                rc = __inject_set_prefix(vcpu, irq);
1686                break;
1687        case KVM_S390_SIGP_STOP:
1688                rc = __inject_sigp_stop(vcpu, irq);
1689                break;
1690        case KVM_S390_RESTART:
1691                rc = __inject_sigp_restart(vcpu, irq);
1692                break;
1693        case KVM_S390_INT_CLOCK_COMP:
1694                rc = __inject_ckc(vcpu);
1695                break;
1696        case KVM_S390_INT_CPU_TIMER:
1697                rc = __inject_cpu_timer(vcpu);
1698                break;
1699        case KVM_S390_INT_EXTERNAL_CALL:
1700                rc = __inject_extcall(vcpu, irq);
1701                break;
1702        case KVM_S390_INT_EMERGENCY:
1703                rc = __inject_sigp_emergency(vcpu, irq);
1704                break;
1705        case KVM_S390_MCHK:
1706                rc = __inject_mchk(vcpu, irq);
1707                break;
1708        case KVM_S390_INT_PFAULT_INIT:
1709                rc = __inject_pfault_init(vcpu, irq);
1710                break;
1711        case KVM_S390_INT_VIRTIO:
1712        case KVM_S390_INT_SERVICE:
1713        case KVM_S390_INT_IO_MIN...KVM_S390_INT_IO_MAX:
1714        default:
1715                rc = -EINVAL;
1716        }
1717
1718        return rc;
1719}
1720
1721int kvm_s390_inject_vcpu(struct kvm_vcpu *vcpu, struct kvm_s390_irq *irq)
1722{
1723        struct kvm_s390_local_interrupt *li = &vcpu->arch.local_int;
1724        int rc;
1725
1726        spin_lock(&li->lock);
1727        rc = do_inject_vcpu(vcpu, irq);
1728        spin_unlock(&li->lock);
1729        if (!rc)
1730                kvm_s390_vcpu_wakeup(vcpu);
1731        return rc;
1732}
1733
1734static inline void clear_irq_list(struct list_head *_list)
1735{
1736        struct kvm_s390_interrupt_info *inti, *n;
1737
1738        list_for_each_entry_safe(inti, n, _list, list) {
1739                list_del(&inti->list);
1740                kfree(inti);
1741        }
1742}
1743
1744static void inti_to_irq(struct kvm_s390_interrupt_info *inti,
1745                       struct kvm_s390_irq *irq)
1746{
1747        irq->type = inti->type;
1748        switch (inti->type) {
1749        case KVM_S390_INT_PFAULT_INIT:
1750        case KVM_S390_INT_PFAULT_DONE:
1751        case KVM_S390_INT_VIRTIO:
1752                irq->u.ext = inti->ext;
1753                break;
1754        case KVM_S390_INT_IO_MIN...KVM_S390_INT_IO_MAX:
1755                irq->u.io = inti->io;
1756                break;
1757        }
1758}
1759
1760void kvm_s390_clear_float_irqs(struct kvm *kvm)
1761{
1762        struct kvm_s390_float_interrupt *fi = &kvm->arch.float_int;
1763        int i;
1764
1765        spin_lock(&fi->lock);
1766        fi->pending_irqs = 0;
1767        memset(&fi->srv_signal, 0, sizeof(fi->srv_signal));
1768        memset(&fi->mchk, 0, sizeof(fi->mchk));
1769        for (i = 0; i < FIRQ_LIST_COUNT; i++)
1770                clear_irq_list(&fi->lists[i]);
1771        for (i = 0; i < FIRQ_MAX_COUNT; i++)
1772                fi->counters[i] = 0;
1773        spin_unlock(&fi->lock);
1774};
1775
1776static int get_all_floating_irqs(struct kvm *kvm, u8 __user *usrbuf, u64 len)
1777{
1778        struct kvm_s390_interrupt_info *inti;
1779        struct kvm_s390_float_interrupt *fi;
1780        struct kvm_s390_irq *buf;
1781        struct kvm_s390_irq *irq;
1782        int max_irqs;
1783        int ret = 0;
1784        int n = 0;
1785        int i;
1786
1787        if (len > KVM_S390_FLIC_MAX_BUFFER || len == 0)
1788                return -EINVAL;
1789
1790        /*
1791         * We are already using -ENOMEM to signal
1792         * userspace it may retry with a bigger buffer,
1793         * so we need to use something else for this case
1794         */
1795        buf = vzalloc(len);
1796        if (!buf)
1797                return -ENOBUFS;
1798
1799        max_irqs = len / sizeof(struct kvm_s390_irq);
1800
1801        fi = &kvm->arch.float_int;
1802        spin_lock(&fi->lock);
1803        for (i = 0; i < FIRQ_LIST_COUNT; i++) {
1804                list_for_each_entry(inti, &fi->lists[i], list) {
1805                        if (n == max_irqs) {
1806                                /* signal userspace to try again */
1807                                ret = -ENOMEM;
1808                                goto out;
1809                        }
1810                        inti_to_irq(inti, &buf[n]);
1811                        n++;
1812                }
1813        }
1814        if (test_bit(IRQ_PEND_EXT_SERVICE, &fi->pending_irqs)) {
1815                if (n == max_irqs) {
1816                        /* signal userspace to try again */
1817                        ret = -ENOMEM;
1818                        goto out;
1819                }
1820                irq = (struct kvm_s390_irq *) &buf[n];
1821                irq->type = KVM_S390_INT_SERVICE;
1822                irq->u.ext = fi->srv_signal;
1823                n++;
1824        }
1825        if (test_bit(IRQ_PEND_MCHK_REP, &fi->pending_irqs)) {
1826                if (n == max_irqs) {
1827                                /* signal userspace to try again */
1828                                ret = -ENOMEM;
1829                                goto out;
1830                }
1831                irq = (struct kvm_s390_irq *) &buf[n];
1832                irq->type = KVM_S390_MCHK;
1833                irq->u.mchk = fi->mchk;
1834                n++;
1835}
1836
1837out:
1838        spin_unlock(&fi->lock);
1839        if (!ret && n > 0) {
1840                if (copy_to_user(usrbuf, buf, sizeof(struct kvm_s390_irq) * n))
1841                        ret = -EFAULT;
1842        }
1843        vfree(buf);
1844
1845        return ret < 0 ? ret : n;
1846}
1847
1848static int flic_get_attr(struct kvm_device *dev, struct kvm_device_attr *attr)
1849{
1850        int r;
1851
1852        switch (attr->group) {
1853        case KVM_DEV_FLIC_GET_ALL_IRQS:
1854                r = get_all_floating_irqs(dev->kvm, (u8 __user *) attr->addr,
1855                                          attr->attr);
1856                break;
1857        default:
1858                r = -EINVAL;
1859        }
1860
1861        return r;
1862}
1863
1864static inline int copy_irq_from_user(struct kvm_s390_interrupt_info *inti,
1865                                     u64 addr)
1866{
1867        struct kvm_s390_irq __user *uptr = (struct kvm_s390_irq __user *) addr;
1868        void *target = NULL;
1869        void __user *source;
1870        u64 size;
1871
1872        if (get_user(inti->type, (u64 __user *)addr))
1873                return -EFAULT;
1874
1875        switch (inti->type) {
1876        case KVM_S390_INT_PFAULT_INIT:
1877        case KVM_S390_INT_PFAULT_DONE:
1878        case KVM_S390_INT_VIRTIO:
1879        case KVM_S390_INT_SERVICE:
1880                target = (void *) &inti->ext;
1881                source = &uptr->u.ext;
1882                size = sizeof(inti->ext);
1883                break;
1884        case KVM_S390_INT_IO_MIN...KVM_S390_INT_IO_MAX:
1885                target = (void *) &inti->io;
1886                source = &uptr->u.io;
1887                size = sizeof(inti->io);
1888                break;
1889        case KVM_S390_MCHK:
1890                target = (void *) &inti->mchk;
1891                source = &uptr->u.mchk;
1892                size = sizeof(inti->mchk);
1893                break;
1894        default:
1895                return -EINVAL;
1896        }
1897
1898        if (copy_from_user(target, source, size))
1899                return -EFAULT;
1900
1901        return 0;
1902}
1903
1904static int enqueue_floating_irq(struct kvm_device *dev,
1905                                struct kvm_device_attr *attr)
1906{
1907        struct kvm_s390_interrupt_info *inti = NULL;
1908        int r = 0;
1909        int len = attr->attr;
1910
1911        if (len % sizeof(struct kvm_s390_irq) != 0)
1912                return -EINVAL;
1913        else if (len > KVM_S390_FLIC_MAX_BUFFER)
1914                return -EINVAL;
1915
1916        while (len >= sizeof(struct kvm_s390_irq)) {
1917                inti = kzalloc(sizeof(*inti), GFP_KERNEL);
1918                if (!inti)
1919                        return -ENOMEM;
1920
1921                r = copy_irq_from_user(inti, attr->addr);
1922                if (r) {
1923                        kfree(inti);
1924                        return r;
1925                }
1926                r = __inject_vm(dev->kvm, inti);
1927                if (r) {
1928                        kfree(inti);
1929                        return r;
1930                }
1931                len -= sizeof(struct kvm_s390_irq);
1932                attr->addr += sizeof(struct kvm_s390_irq);
1933        }
1934
1935        return r;
1936}
1937
1938static struct s390_io_adapter *get_io_adapter(struct kvm *kvm, unsigned int id)
1939{
1940        if (id >= MAX_S390_IO_ADAPTERS)
1941                return NULL;
1942        return kvm->arch.adapters[id];
1943}
1944
1945static int register_io_adapter(struct kvm_device *dev,
1946                               struct kvm_device_attr *attr)
1947{
1948        struct s390_io_adapter *adapter;
1949        struct kvm_s390_io_adapter adapter_info;
1950
1951        if (copy_from_user(&adapter_info,
1952                           (void __user *)attr->addr, sizeof(adapter_info)))
1953                return -EFAULT;
1954
1955        if ((adapter_info.id >= MAX_S390_IO_ADAPTERS) ||
1956            (dev->kvm->arch.adapters[adapter_info.id] != NULL))
1957                return -EINVAL;
1958
1959        adapter = kzalloc(sizeof(*adapter), GFP_KERNEL);
1960        if (!adapter)
1961                return -ENOMEM;
1962
1963        INIT_LIST_HEAD(&adapter->maps);
1964        init_rwsem(&adapter->maps_lock);
1965        atomic_set(&adapter->nr_maps, 0);
1966        adapter->id = adapter_info.id;
1967        adapter->isc = adapter_info.isc;
1968        adapter->maskable = adapter_info.maskable;
1969        adapter->masked = false;
1970        adapter->swap = adapter_info.swap;
1971        dev->kvm->arch.adapters[adapter->id] = adapter;
1972
1973        return 0;
1974}
1975
1976int kvm_s390_mask_adapter(struct kvm *kvm, unsigned int id, bool masked)
1977{
1978        int ret;
1979        struct s390_io_adapter *adapter = get_io_adapter(kvm, id);
1980
1981        if (!adapter || !adapter->maskable)
1982                return -EINVAL;
1983        ret = adapter->masked;
1984        adapter->masked = masked;
1985        return ret;
1986}
1987
1988static int kvm_s390_adapter_map(struct kvm *kvm, unsigned int id, __u64 addr)
1989{
1990        struct s390_io_adapter *adapter = get_io_adapter(kvm, id);
1991        struct s390_map_info *map;
1992        int ret;
1993
1994        if (!adapter || !addr)
1995                return -EINVAL;
1996
1997        map = kzalloc(sizeof(*map), GFP_KERNEL);
1998        if (!map) {
1999                ret = -ENOMEM;
2000                goto out;
2001        }
2002        INIT_LIST_HEAD(&map->list);
2003        map->guest_addr = addr;
2004        map->addr = gmap_translate(kvm->arch.gmap, addr);
2005        if (map->addr == -EFAULT) {
2006                ret = -EFAULT;
2007                goto out;
2008        }
2009        ret = get_user_pages_fast(map->addr, 1, 1, &map->page);
2010        if (ret < 0)
2011                goto out;
2012        BUG_ON(ret != 1);
2013        down_write(&adapter->maps_lock);
2014        if (atomic_inc_return(&adapter->nr_maps) < MAX_S390_ADAPTER_MAPS) {
2015                list_add_tail(&map->list, &adapter->maps);
2016                ret = 0;
2017        } else {
2018                put_page(map->page);
2019                ret = -EINVAL;
2020        }
2021        up_write(&adapter->maps_lock);
2022out:
2023        if (ret)
2024                kfree(map);
2025        return ret;
2026}
2027
2028static int kvm_s390_adapter_unmap(struct kvm *kvm, unsigned int id, __u64 addr)
2029{
2030        struct s390_io_adapter *adapter = get_io_adapter(kvm, id);
2031        struct s390_map_info *map, *tmp;
2032        int found = 0;
2033
2034        if (!adapter || !addr)
2035                return -EINVAL;
2036
2037        down_write(&adapter->maps_lock);
2038        list_for_each_entry_safe(map, tmp, &adapter->maps, list) {
2039                if (map->guest_addr == addr) {
2040                        found = 1;
2041                        atomic_dec(&adapter->nr_maps);
2042                        list_del(&map->list);
2043                        put_page(map->page);
2044                        kfree(map);
2045                        break;
2046                }
2047        }
2048        up_write(&adapter->maps_lock);
2049
2050        return found ? 0 : -EINVAL;
2051}
2052
2053void kvm_s390_destroy_adapters(struct kvm *kvm)
2054{
2055        int i;
2056        struct s390_map_info *map, *tmp;
2057
2058        for (i = 0; i < MAX_S390_IO_ADAPTERS; i++) {
2059                if (!kvm->arch.adapters[i])
2060                        continue;
2061                list_for_each_entry_safe(map, tmp,
2062                                         &kvm->arch.adapters[i]->maps, list) {
2063                        list_del(&map->list);
2064                        put_page(map->page);
2065                        kfree(map);
2066                }
2067                kfree(kvm->arch.adapters[i]);
2068        }
2069}
2070
2071static int modify_io_adapter(struct kvm_device *dev,
2072                             struct kvm_device_attr *attr)
2073{
2074        struct kvm_s390_io_adapter_req req;
2075        struct s390_io_adapter *adapter;
2076        int ret;
2077
2078        if (copy_from_user(&req, (void __user *)attr->addr, sizeof(req)))
2079                return -EFAULT;
2080
2081        adapter = get_io_adapter(dev->kvm, req.id);
2082        if (!adapter)
2083                return -EINVAL;
2084        switch (req.type) {
2085        case KVM_S390_IO_ADAPTER_MASK:
2086                ret = kvm_s390_mask_adapter(dev->kvm, req.id, req.mask);
2087                if (ret > 0)
2088                        ret = 0;
2089                break;
2090        case KVM_S390_IO_ADAPTER_MAP:
2091                ret = kvm_s390_adapter_map(dev->kvm, req.id, req.addr);
2092                break;
2093        case KVM_S390_IO_ADAPTER_UNMAP:
2094                ret = kvm_s390_adapter_unmap(dev->kvm, req.id, req.addr);
2095                break;
2096        default:
2097                ret = -EINVAL;
2098        }
2099
2100        return ret;
2101}
2102
2103static int clear_io_irq(struct kvm *kvm, struct kvm_device_attr *attr)
2104
2105{
2106        const u64 isc_mask = 0xffUL << 24; /* all iscs set */
2107        u32 schid;
2108
2109        if (attr->flags)
2110                return -EINVAL;
2111        if (attr->attr != sizeof(schid))
2112                return -EINVAL;
2113        if (copy_from_user(&schid, (void __user *) attr->addr, sizeof(schid)))
2114                return -EFAULT;
2115        kfree(kvm_s390_get_io_int(kvm, isc_mask, schid));
2116        /*
2117         * If userspace is conforming to the architecture, we can have at most
2118         * one pending I/O interrupt per subchannel, so this is effectively a
2119         * clear all.
2120         */
2121        return 0;
2122}
2123
2124static int flic_set_attr(struct kvm_device *dev, struct kvm_device_attr *attr)
2125{
2126        int r = 0;
2127        unsigned int i;
2128        struct kvm_vcpu *vcpu;
2129
2130        switch (attr->group) {
2131        case KVM_DEV_FLIC_ENQUEUE:
2132                r = enqueue_floating_irq(dev, attr);
2133                break;
2134        case KVM_DEV_FLIC_CLEAR_IRQS:
2135                kvm_s390_clear_float_irqs(dev->kvm);
2136                break;
2137        case KVM_DEV_FLIC_APF_ENABLE:
2138                dev->kvm->arch.gmap->pfault_enabled = 1;
2139                break;
2140        case KVM_DEV_FLIC_APF_DISABLE_WAIT:
2141                dev->kvm->arch.gmap->pfault_enabled = 0;
2142                /*
2143                 * Make sure no async faults are in transition when
2144                 * clearing the queues. So we don't need to worry
2145                 * about late coming workers.
2146                 */
2147                synchronize_srcu(&dev->kvm->srcu);
2148                kvm_for_each_vcpu(i, vcpu, dev->kvm)
2149                        kvm_clear_async_pf_completion_queue(vcpu);
2150                break;
2151        case KVM_DEV_FLIC_ADAPTER_REGISTER:
2152                r = register_io_adapter(dev, attr);
2153                break;
2154        case KVM_DEV_FLIC_ADAPTER_MODIFY:
2155                r = modify_io_adapter(dev, attr);
2156                break;
2157        case KVM_DEV_FLIC_CLEAR_IO_IRQ:
2158                r = clear_io_irq(dev->kvm, attr);
2159                break;
2160        default:
2161                r = -EINVAL;
2162        }
2163
2164        return r;
2165}
2166
2167static int flic_has_attr(struct kvm_device *dev,
2168                             struct kvm_device_attr *attr)
2169{
2170        switch (attr->group) {
2171        case KVM_DEV_FLIC_GET_ALL_IRQS:
2172        case KVM_DEV_FLIC_ENQUEUE:
2173        case KVM_DEV_FLIC_CLEAR_IRQS:
2174        case KVM_DEV_FLIC_APF_ENABLE:
2175        case KVM_DEV_FLIC_APF_DISABLE_WAIT:
2176        case KVM_DEV_FLIC_ADAPTER_REGISTER:
2177        case KVM_DEV_FLIC_ADAPTER_MODIFY:
2178        case KVM_DEV_FLIC_CLEAR_IO_IRQ:
2179                return 0;
2180        }
2181        return -ENXIO;
2182}
2183
2184static int flic_create(struct kvm_device *dev, u32 type)
2185{
2186        if (!dev)
2187                return -EINVAL;
2188        if (dev->kvm->arch.flic)
2189                return -EINVAL;
2190        dev->kvm->arch.flic = dev;
2191        return 0;
2192}
2193
2194static void flic_destroy(struct kvm_device *dev)
2195{
2196        dev->kvm->arch.flic = NULL;
2197        kfree(dev);
2198}
2199
2200/* s390 floating irq controller (flic) */
2201struct kvm_device_ops kvm_flic_ops = {
2202        .name = "kvm-flic",
2203        .get_attr = flic_get_attr,
2204        .set_attr = flic_set_attr,
2205        .has_attr = flic_has_attr,
2206        .create = flic_create,
2207        .destroy = flic_destroy,
2208};
2209
2210static unsigned long get_ind_bit(__u64 addr, unsigned long bit_nr, bool swap)
2211{
2212        unsigned long bit;
2213
2214        bit = bit_nr + (addr % PAGE_SIZE) * 8;
2215
2216        return swap ? (bit ^ (BITS_PER_LONG - 1)) : bit;
2217}
2218
2219static struct s390_map_info *get_map_info(struct s390_io_adapter *adapter,
2220                                          u64 addr)
2221{
2222        struct s390_map_info *map;
2223
2224        if (!adapter)
2225                return NULL;
2226
2227        list_for_each_entry(map, &adapter->maps, list) {
2228                if (map->guest_addr == addr)
2229                        return map;
2230        }
2231        return NULL;
2232}
2233
2234static int adapter_indicators_set(struct kvm *kvm,
2235                                  struct s390_io_adapter *adapter,
2236                                  struct kvm_s390_adapter_int *adapter_int)
2237{
2238        unsigned long bit;
2239        int summary_set, idx;
2240        struct s390_map_info *info;
2241        void *map;
2242
2243        info = get_map_info(adapter, adapter_int->ind_addr);
2244        if (!info)
2245                return -1;
2246        map = page_address(info->page);
2247        bit = get_ind_bit(info->addr, adapter_int->ind_offset, adapter->swap);
2248        set_bit(bit, map);
2249        idx = srcu_read_lock(&kvm->srcu);
2250        mark_page_dirty(kvm, info->guest_addr >> PAGE_SHIFT);
2251        set_page_dirty_lock(info->page);
2252        info = get_map_info(adapter, adapter_int->summary_addr);
2253        if (!info) {
2254                srcu_read_unlock(&kvm->srcu, idx);
2255                return -1;
2256        }
2257        map = page_address(info->page);
2258        bit = get_ind_bit(info->addr, adapter_int->summary_offset,
2259                          adapter->swap);
2260        summary_set = test_and_set_bit(bit, map);
2261        mark_page_dirty(kvm, info->guest_addr >> PAGE_SHIFT);
2262        set_page_dirty_lock(info->page);
2263        srcu_read_unlock(&kvm->srcu, idx);
2264        return summary_set ? 0 : 1;
2265}
2266
2267/*
2268 * < 0 - not injected due to error
2269 * = 0 - coalesced, summary indicator already active
2270 * > 0 - injected interrupt
2271 */
2272static int set_adapter_int(struct kvm_kernel_irq_routing_entry *e,
2273                           struct kvm *kvm, int irq_source_id, int level,
2274                           bool line_status)
2275{
2276        int ret;
2277        struct s390_io_adapter *adapter;
2278
2279        /* We're only interested in the 0->1 transition. */
2280        if (!level)
2281                return 0;
2282        adapter = get_io_adapter(kvm, e->adapter.adapter_id);
2283        if (!adapter)
2284                return -1;
2285        down_read(&adapter->maps_lock);
2286        ret = adapter_indicators_set(kvm, adapter, &e->adapter);
2287        up_read(&adapter->maps_lock);
2288        if ((ret > 0) && !adapter->masked) {
2289                struct kvm_s390_interrupt s390int = {
2290                        .type = KVM_S390_INT_IO(1, 0, 0, 0),
2291                        .parm = 0,
2292                        .parm64 = (adapter->isc << 27) | 0x80000000,
2293                };
2294                ret = kvm_s390_inject_vm(kvm, &s390int);
2295                if (ret == 0)
2296                        ret = 1;
2297        }
2298        return ret;
2299}
2300
2301int kvm_set_routing_entry(struct kvm *kvm,
2302                          struct kvm_kernel_irq_routing_entry *e,
2303                          const struct kvm_irq_routing_entry *ue)
2304{
2305        int ret;
2306
2307        switch (ue->type) {
2308        case KVM_IRQ_ROUTING_S390_ADAPTER:
2309                e->set = set_adapter_int;
2310                e->adapter.summary_addr = ue->u.adapter.summary_addr;
2311                e->adapter.ind_addr = ue->u.adapter.ind_addr;
2312                e->adapter.summary_offset = ue->u.adapter.summary_offset;
2313                e->adapter.ind_offset = ue->u.adapter.ind_offset;
2314                e->adapter.adapter_id = ue->u.adapter.adapter_id;
2315                ret = 0;
2316                break;
2317        default:
2318                ret = -EINVAL;
2319        }
2320
2321        return ret;
2322}
2323
2324int kvm_set_msi(struct kvm_kernel_irq_routing_entry *e, struct kvm *kvm,
2325                int irq_source_id, int level, bool line_status)
2326{
2327        return -EINVAL;
2328}
2329
2330int kvm_s390_set_irq_state(struct kvm_vcpu *vcpu, void __user *irqstate, int len)
2331{
2332        struct kvm_s390_local_interrupt *li = &vcpu->arch.local_int;
2333        struct kvm_s390_irq *buf;
2334        int r = 0;
2335        int n;
2336
2337        buf = vmalloc(len);
2338        if (!buf)
2339                return -ENOMEM;
2340
2341        if (copy_from_user((void *) buf, irqstate, len)) {
2342                r = -EFAULT;
2343                goto out_free;
2344        }
2345
2346        /*
2347         * Don't allow setting the interrupt state
2348         * when there are already interrupts pending
2349         */
2350        spin_lock(&li->lock);
2351        if (li->pending_irqs) {
2352                r = -EBUSY;
2353                goto out_unlock;
2354        }
2355
2356        for (n = 0; n < len / sizeof(*buf); n++) {
2357                r = do_inject_vcpu(vcpu, &buf[n]);
2358                if (r)
2359                        break;
2360        }
2361
2362out_unlock:
2363        spin_unlock(&li->lock);
2364out_free:
2365        vfree(buf);
2366
2367        return r;
2368}
2369
2370static void store_local_irq(struct kvm_s390_local_interrupt *li,
2371                            struct kvm_s390_irq *irq,
2372                            unsigned long irq_type)
2373{
2374        switch (irq_type) {
2375        case IRQ_PEND_MCHK_EX:
2376        case IRQ_PEND_MCHK_REP:
2377                irq->type = KVM_S390_MCHK;
2378                irq->u.mchk = li->irq.mchk;
2379                break;
2380        case IRQ_PEND_PROG:
2381                irq->type = KVM_S390_PROGRAM_INT;
2382                irq->u.pgm = li->irq.pgm;
2383                break;
2384        case IRQ_PEND_PFAULT_INIT:
2385                irq->type = KVM_S390_INT_PFAULT_INIT;
2386                irq->u.ext = li->irq.ext;
2387                break;
2388        case IRQ_PEND_EXT_EXTERNAL:
2389                irq->type = KVM_S390_INT_EXTERNAL_CALL;
2390                irq->u.extcall = li->irq.extcall;
2391                break;
2392        case IRQ_PEND_EXT_CLOCK_COMP:
2393                irq->type = KVM_S390_INT_CLOCK_COMP;
2394                break;
2395        case IRQ_PEND_EXT_CPU_TIMER:
2396                irq->type = KVM_S390_INT_CPU_TIMER;
2397                break;
2398        case IRQ_PEND_SIGP_STOP:
2399                irq->type = KVM_S390_SIGP_STOP;
2400                irq->u.stop = li->irq.stop;
2401                break;
2402        case IRQ_PEND_RESTART:
2403                irq->type = KVM_S390_RESTART;
2404                break;
2405        case IRQ_PEND_SET_PREFIX:
2406                irq->type = KVM_S390_SIGP_SET_PREFIX;
2407                irq->u.prefix = li->irq.prefix;
2408                break;
2409        }
2410}
2411
2412int kvm_s390_get_irq_state(struct kvm_vcpu *vcpu, __u8 __user *buf, int len)
2413{
2414        int scn;
2415        unsigned long sigp_emerg_pending[BITS_TO_LONGS(KVM_MAX_VCPUS)];
2416        struct kvm_s390_local_interrupt *li = &vcpu->arch.local_int;
2417        unsigned long pending_irqs;
2418        struct kvm_s390_irq irq;
2419        unsigned long irq_type;
2420        int cpuaddr;
2421        int n = 0;
2422
2423        spin_lock(&li->lock);
2424        pending_irqs = li->pending_irqs;
2425        memcpy(&sigp_emerg_pending, &li->sigp_emerg_pending,
2426               sizeof(sigp_emerg_pending));
2427        spin_unlock(&li->lock);
2428
2429        for_each_set_bit(irq_type, &pending_irqs, IRQ_PEND_COUNT) {
2430                memset(&irq, 0, sizeof(irq));
2431                if (irq_type == IRQ_PEND_EXT_EMERGENCY)
2432                        continue;
2433                if (n + sizeof(irq) > len)
2434                        return -ENOBUFS;
2435                store_local_irq(&vcpu->arch.local_int, &irq, irq_type);
2436                if (copy_to_user(&buf[n], &irq, sizeof(irq)))
2437                        return -EFAULT;
2438                n += sizeof(irq);
2439        }
2440
2441        if (test_bit(IRQ_PEND_EXT_EMERGENCY, &pending_irqs)) {
2442                for_each_set_bit(cpuaddr, sigp_emerg_pending, KVM_MAX_VCPUS) {
2443                        memset(&irq, 0, sizeof(irq));
2444                        if (n + sizeof(irq) > len)
2445                                return -ENOBUFS;
2446                        irq.type = KVM_S390_INT_EMERGENCY;
2447                        irq.u.emerg.code = cpuaddr;
2448                        if (copy_to_user(&buf[n], &irq, sizeof(irq)))
2449                                return -EFAULT;
2450                        n += sizeof(irq);
2451                }
2452        }
2453
2454        if (sca_ext_call_pending(vcpu, &scn)) {
2455                if (n + sizeof(irq) > len)
2456                        return -ENOBUFS;
2457                memset(&irq, 0, sizeof(irq));
2458                irq.type = KVM_S390_INT_EXTERNAL_CALL;
2459                irq.u.extcall.code = scn;
2460                if (copy_to_user(&buf[n], &irq, sizeof(irq)))
2461                        return -EFAULT;
2462                n += sizeof(irq);
2463        }
2464
2465        return n;
2466}
2467