Lines Matching refs:inti
852 struct kvm_s390_interrupt_info *inti; in __deliver_pfault_done() local
856 inti = list_first_entry_or_null(&fi->lists[FIRQ_LIST_PFAULT], in __deliver_pfault_done()
859 if (inti) { in __deliver_pfault_done()
860 list_del(&inti->list); in __deliver_pfault_done()
867 if (inti) { in __deliver_pfault_done()
870 inti->ext.ext_params2); in __deliver_pfault_done()
872 inti->ext.ext_params2); in __deliver_pfault_done()
884 rc |= put_guest_lc(vcpu, inti->ext.ext_params2, in __deliver_pfault_done()
886 kfree(inti); in __deliver_pfault_done()
894 struct kvm_s390_interrupt_info *inti; in __deliver_virtio() local
898 inti = list_first_entry_or_null(&fi->lists[FIRQ_LIST_VIRTIO], in __deliver_virtio()
901 if (inti) { in __deliver_virtio()
904 inti->ext.ext_params, inti->ext.ext_params2); in __deliver_virtio()
907 inti->type, in __deliver_virtio()
908 inti->ext.ext_params, in __deliver_virtio()
909 inti->ext.ext_params2); in __deliver_virtio()
910 list_del(&inti->list); in __deliver_virtio()
917 if (inti) { in __deliver_virtio()
928 rc |= put_guest_lc(vcpu, inti->ext.ext_params, in __deliver_virtio()
930 rc |= put_guest_lc(vcpu, inti->ext.ext_params2, in __deliver_virtio()
932 kfree(inti); in __deliver_virtio()
959 struct kvm_s390_interrupt_info *inti = NULL; in __deliver_io() local
969 inti = list_first_entry_or_null(isc_list, in __deliver_io()
972 if (inti) { in __deliver_io()
973 if (inti->type & KVM_S390_INT_IO_AI_MASK) in __deliver_io()
977 inti->io.subchannel_id >> 8, in __deliver_io()
978 inti->io.subchannel_id >> 1 & 0x3, in __deliver_io()
979 inti->io.subchannel_nr); in __deliver_io()
983 inti->type, in __deliver_io()
984 ((__u32)inti->io.subchannel_id << 16) | in __deliver_io()
985 inti->io.subchannel_nr, in __deliver_io()
986 ((__u64)inti->io.io_int_parm << 32) | in __deliver_io()
987 inti->io.io_int_word); in __deliver_io()
988 list_del(&inti->list); in __deliver_io()
995 if (inti) { in __deliver_io()
996 rc = __do_deliver_io(vcpu, &(inti->io)); in __deliver_io()
997 kfree(inti); in __deliver_io()
1524 struct kvm_s390_interrupt_info *inti = NULL; in get_top_io_int() local
1527 for (isc = 0; isc <= MAX_ISC && !inti; isc++) { in get_top_io_int()
1529 inti = get_io_int(kvm, isc, schid); in get_top_io_int()
1531 return inti; in get_top_io_int()
1570 struct kvm_s390_interrupt_info *inti, *tmp_inti; in kvm_s390_get_io_int() local
1573 inti = get_top_io_int(kvm, isc_mask, schid); in kvm_s390_get_io_int()
1580 if (!inti) in kvm_s390_get_io_int()
1585 if (int_word_to_isc(inti->io.io_int_word) <= isc) { in kvm_s390_get_io_int()
1591 tmp_inti = kzalloc(sizeof(*inti), GFP_KERNEL); in kvm_s390_get_io_int()
1595 if (inti) in kvm_s390_get_io_int()
1596 kvm_s390_reinject_io_int(kvm, inti); in kvm_s390_get_io_int()
1597 inti = tmp_inti; in kvm_s390_get_io_int()
1601 return inti; in kvm_s390_get_io_int()
1608 struct kvm_s390_interrupt_info *inti) in __inject_service() argument
1614 fi->srv_signal.ext_params |= inti->ext.ext_params & SCCB_EVENT_PENDING; in __inject_service()
1625 fi->srv_signal.ext_params |= inti->ext.ext_params & SCCB_MASK; in __inject_service()
1629 kfree(inti); in __inject_service()
1634 struct kvm_s390_interrupt_info *inti) in __inject_virtio() argument
1645 list_add_tail(&inti->list, &fi->lists[FIRQ_LIST_VIRTIO]); in __inject_virtio()
1652 struct kvm_s390_interrupt_info *inti) in __inject_pfault_done() argument
1664 list_add_tail(&inti->list, &fi->lists[FIRQ_LIST_PFAULT]); in __inject_pfault_done()
1672 struct kvm_s390_interrupt_info *inti) in __inject_float_mchk() argument
1678 fi->mchk.cr14 |= inti->mchk.cr14 & (1UL << CR_PENDING_SUBCLASS); in __inject_float_mchk()
1679 fi->mchk.mcic |= inti->mchk.mcic; in __inject_float_mchk()
1682 kfree(inti); in __inject_float_mchk()
1686 static int __inject_io(struct kvm *kvm, struct kvm_s390_interrupt_info *inti) in __inject_io() argument
1693 isc = int_word_to_isc(inti->io.io_int_word); in __inject_io()
1695 if (kvm->arch.gisa && inti->type & KVM_S390_INT_IO_AI_MASK) { in __inject_io()
1698 kfree(inti); in __inject_io()
1710 if (inti->type & KVM_S390_INT_IO_AI_MASK) in __inject_io()
1714 inti->io.subchannel_id >> 8, in __inject_io()
1715 inti->io.subchannel_id >> 1 & 0x3, in __inject_io()
1716 inti->io.subchannel_nr); in __inject_io()
1718 list_add_tail(&inti->list, list); in __inject_io()
1766 static int __inject_vm(struct kvm *kvm, struct kvm_s390_interrupt_info *inti) in __inject_vm() argument
1768 u64 type = READ_ONCE(inti->type); in __inject_vm()
1773 rc = __inject_float_mchk(kvm, inti); in __inject_vm()
1776 rc = __inject_virtio(kvm, inti); in __inject_vm()
1779 rc = __inject_service(kvm, inti); in __inject_vm()
1782 rc = __inject_pfault_done(kvm, inti); in __inject_vm()
1785 rc = __inject_io(kvm, inti); in __inject_vm()
1800 struct kvm_s390_interrupt_info *inti; in kvm_s390_inject_vm() local
1803 inti = kzalloc(sizeof(*inti), GFP_KERNEL); in kvm_s390_inject_vm()
1804 if (!inti) in kvm_s390_inject_vm()
1807 inti->type = s390int->type; in kvm_s390_inject_vm()
1808 switch (inti->type) { in kvm_s390_inject_vm()
1812 inti->ext.ext_params = s390int->parm; in kvm_s390_inject_vm()
1813 inti->ext.ext_params2 = s390int->parm64; in kvm_s390_inject_vm()
1817 inti->ext.ext_params = s390int->parm; in kvm_s390_inject_vm()
1820 inti->ext.ext_params2 = s390int->parm64; in kvm_s390_inject_vm()
1825 inti->mchk.cr14 = s390int->parm; /* upper bits are not used */ in kvm_s390_inject_vm()
1826 inti->mchk.mcic = s390int->parm64; in kvm_s390_inject_vm()
1829 inti->io.subchannel_id = s390int->parm >> 16; in kvm_s390_inject_vm()
1830 inti->io.subchannel_nr = s390int->parm & 0x0000ffffu; in kvm_s390_inject_vm()
1831 inti->io.io_int_parm = s390int->parm64 >> 32; in kvm_s390_inject_vm()
1832 inti->io.io_int_word = s390int->parm64 & 0x00000000ffffffffull; in kvm_s390_inject_vm()
1835 kfree(inti); in kvm_s390_inject_vm()
1841 rc = __inject_vm(kvm, inti); in kvm_s390_inject_vm()
1843 kfree(inti); in kvm_s390_inject_vm()
1848 struct kvm_s390_interrupt_info *inti) in kvm_s390_reinject_io_int() argument
1850 return __inject_vm(kvm, inti); in kvm_s390_reinject_io_int()
1963 struct kvm_s390_interrupt_info *inti, *n; in clear_irq_list() local
1965 list_for_each_entry_safe(inti, n, _list, list) { in clear_irq_list()
1966 list_del(&inti->list); in clear_irq_list()
1967 kfree(inti); in clear_irq_list()
1971 static void inti_to_irq(struct kvm_s390_interrupt_info *inti, in inti_to_irq() argument
1974 irq->type = inti->type; in inti_to_irq()
1975 switch (inti->type) { in inti_to_irq()
1979 irq->u.ext = inti->ext; in inti_to_irq()
1982 irq->u.io = inti->io; in inti_to_irq()
2006 struct kvm_s390_interrupt_info *inti; in get_all_floating_irqs() local
2048 list_for_each_entry(inti, &fi->lists[i], list) { in get_all_floating_irqs()
2054 inti_to_irq(inti, &buf[n]); in get_all_floating_irqs()
2134 static inline int copy_irq_from_user(struct kvm_s390_interrupt_info *inti, in copy_irq_from_user() argument
2142 if (get_user(inti->type, (u64 __user *)addr)) in copy_irq_from_user()
2145 switch (inti->type) { in copy_irq_from_user()
2150 target = (void *) &inti->ext; in copy_irq_from_user()
2152 size = sizeof(inti->ext); in copy_irq_from_user()
2155 target = (void *) &inti->io; in copy_irq_from_user()
2157 size = sizeof(inti->io); in copy_irq_from_user()
2160 target = (void *) &inti->mchk; in copy_irq_from_user()
2162 size = sizeof(inti->mchk); in copy_irq_from_user()
2177 struct kvm_s390_interrupt_info *inti = NULL; in enqueue_floating_irq() local
2187 inti = kzalloc(sizeof(*inti), GFP_KERNEL); in enqueue_floating_irq()
2188 if (!inti) in enqueue_floating_irq()
2191 r = copy_irq_from_user(inti, attr->addr); in enqueue_floating_irq()
2193 kfree(inti); in enqueue_floating_irq()
2196 r = __inject_vm(dev->kvm, inti); in enqueue_floating_irq()
2198 kfree(inti); in enqueue_floating_irq()
2688 struct kvm_s390_interrupt_info inti; in kvm_s390_reinject_machine_check() local
2703 mchk = mci.ck ? &inti.mchk : &irq.u.mchk; in kvm_s390_reinject_machine_check()
2710 inti.type = KVM_S390_MCHK; in kvm_s390_reinject_machine_check()
2711 rc = __inject_vm(vcpu->kvm, &inti); in kvm_s390_reinject_machine_check()