Lines Matching refs:inti

644 	struct kvm_s390_interrupt_info *inti;  in __deliver_pfault_done()  local
648 inti = list_first_entry_or_null(&fi->lists[FIRQ_LIST_PFAULT], in __deliver_pfault_done()
651 if (inti) { in __deliver_pfault_done()
654 inti->ext.ext_params2); in __deliver_pfault_done()
655 list_del(&inti->list); in __deliver_pfault_done()
662 if (inti) { in __deliver_pfault_done()
673 rc |= put_guest_lc(vcpu, inti->ext.ext_params2, in __deliver_pfault_done()
675 kfree(inti); in __deliver_pfault_done()
683 struct kvm_s390_interrupt_info *inti; in __deliver_virtio() local
687 inti = list_first_entry_or_null(&fi->lists[FIRQ_LIST_VIRTIO], in __deliver_virtio()
690 if (inti) { in __deliver_virtio()
693 inti->ext.ext_params, inti->ext.ext_params2); in __deliver_virtio()
696 inti->type, in __deliver_virtio()
697 inti->ext.ext_params, in __deliver_virtio()
698 inti->ext.ext_params2); in __deliver_virtio()
699 list_del(&inti->list); in __deliver_virtio()
706 if (inti) { in __deliver_virtio()
717 rc |= put_guest_lc(vcpu, inti->ext.ext_params, in __deliver_virtio()
719 rc |= put_guest_lc(vcpu, inti->ext.ext_params2, in __deliver_virtio()
721 kfree(inti); in __deliver_virtio()
731 struct kvm_s390_interrupt_info *inti = NULL; in __deliver_io() local
738 inti = list_first_entry_or_null(isc_list, in __deliver_io()
741 if (inti) { in __deliver_io()
742 VCPU_EVENT(vcpu, 4, "interrupt: I/O %llx", inti->type); in __deliver_io()
745 inti->type, in __deliver_io()
746 ((__u32)inti->io.subchannel_id << 16) | in __deliver_io()
747 inti->io.subchannel_nr, in __deliver_io()
748 ((__u64)inti->io.io_int_parm << 32) | in __deliver_io()
749 inti->io.io_int_word); in __deliver_io()
750 list_del(&inti->list); in __deliver_io()
757 if (inti) { in __deliver_io()
758 rc = put_guest_lc(vcpu, inti->io.subchannel_id, in __deliver_io()
760 rc |= put_guest_lc(vcpu, inti->io.subchannel_nr, in __deliver_io()
762 rc |= put_guest_lc(vcpu, inti->io.io_int_parm, in __deliver_io()
764 rc |= put_guest_lc(vcpu, inti->io.io_int_word, in __deliver_io()
772 kfree(inti); in __deliver_io()
1236 struct kvm_s390_interrupt_info *inti = NULL; in kvm_s390_get_io_int() local
1239 for (isc = 0; isc <= MAX_ISC && !inti; isc++) { in kvm_s390_get_io_int()
1241 inti = get_io_int(kvm, isc, schid); in kvm_s390_get_io_int()
1243 return inti; in kvm_s390_get_io_int()
1250 struct kvm_s390_interrupt_info *inti) in __inject_service() argument
1255 fi->srv_signal.ext_params |= inti->ext.ext_params & SCCB_EVENT_PENDING; in __inject_service()
1266 fi->srv_signal.ext_params |= inti->ext.ext_params & SCCB_MASK; in __inject_service()
1270 kfree(inti); in __inject_service()
1275 struct kvm_s390_interrupt_info *inti) in __inject_virtio() argument
1285 list_add_tail(&inti->list, &fi->lists[FIRQ_LIST_VIRTIO]); in __inject_virtio()
1292 struct kvm_s390_interrupt_info *inti) in __inject_pfault_done() argument
1303 list_add_tail(&inti->list, &fi->lists[FIRQ_LIST_PFAULT]); in __inject_pfault_done()
1311 struct kvm_s390_interrupt_info *inti) in __inject_float_mchk() argument
1316 fi->mchk.cr14 |= inti->mchk.cr14 & (1UL << CR_PENDING_SUBCLASS); in __inject_float_mchk()
1317 fi->mchk.mcic |= inti->mchk.mcic; in __inject_float_mchk()
1320 kfree(inti); in __inject_float_mchk()
1324 static int __inject_io(struct kvm *kvm, struct kvm_s390_interrupt_info *inti) in __inject_io() argument
1338 isc = int_word_to_isc(inti->io.io_int_word); in __inject_io()
1340 list_add_tail(&inti->list, list); in __inject_io()
1346 static int __inject_vm(struct kvm *kvm, struct kvm_s390_interrupt_info *inti) in __inject_vm() argument
1352 u64 type = READ_ONCE(inti->type); in __inject_vm()
1359 rc = __inject_float_mchk(kvm, inti); in __inject_vm()
1362 rc = __inject_virtio(kvm, inti); in __inject_vm()
1365 rc = __inject_service(kvm, inti); in __inject_vm()
1368 rc = __inject_pfault_done(kvm, inti); in __inject_vm()
1371 rc = __inject_io(kvm, inti); in __inject_vm()
1410 struct kvm_s390_interrupt_info *inti; in kvm_s390_inject_vm() local
1413 inti = kzalloc(sizeof(*inti), GFP_KERNEL); in kvm_s390_inject_vm()
1414 if (!inti) in kvm_s390_inject_vm()
1417 inti->type = s390int->type; in kvm_s390_inject_vm()
1418 switch (inti->type) { in kvm_s390_inject_vm()
1422 inti->ext.ext_params = s390int->parm; in kvm_s390_inject_vm()
1423 inti->ext.ext_params2 = s390int->parm64; in kvm_s390_inject_vm()
1427 inti->ext.ext_params = s390int->parm; in kvm_s390_inject_vm()
1430 inti->ext.ext_params2 = s390int->parm64; in kvm_s390_inject_vm()
1435 inti->mchk.cr14 = s390int->parm; /* upper bits are not used */ in kvm_s390_inject_vm()
1436 inti->mchk.mcic = s390int->parm64; in kvm_s390_inject_vm()
1439 if (inti->type & IOINT_AI_MASK) in kvm_s390_inject_vm()
1446 inti->io.subchannel_id = s390int->parm >> 16; in kvm_s390_inject_vm()
1447 inti->io.subchannel_nr = s390int->parm & 0x0000ffffu; in kvm_s390_inject_vm()
1448 inti->io.io_int_parm = s390int->parm64 >> 32; in kvm_s390_inject_vm()
1449 inti->io.io_int_word = s390int->parm64 & 0x00000000ffffffffull; in kvm_s390_inject_vm()
1452 kfree(inti); in kvm_s390_inject_vm()
1458 rc = __inject_vm(kvm, inti); in kvm_s390_inject_vm()
1460 kfree(inti); in kvm_s390_inject_vm()
1465 struct kvm_s390_interrupt_info *inti) in kvm_s390_reinject_io_int() argument
1467 return __inject_vm(kvm, inti); in kvm_s390_reinject_io_int()
1582 struct kvm_s390_interrupt_info *inti, *n; in clear_irq_list() local
1584 list_for_each_entry_safe(inti, n, _list, list) { in clear_irq_list()
1585 list_del(&inti->list); in clear_irq_list()
1586 kfree(inti); in clear_irq_list()
1590 static void inti_to_irq(struct kvm_s390_interrupt_info *inti, in inti_to_irq() argument
1593 irq->type = inti->type; in inti_to_irq()
1594 switch (inti->type) { in inti_to_irq()
1598 irq->u.ext = inti->ext; in inti_to_irq()
1601 irq->u.io = inti->io; in inti_to_irq()
1624 struct kvm_s390_interrupt_info *inti; in get_all_floating_irqs() local
1650 list_for_each_entry(inti, &fi->lists[i], list) { in get_all_floating_irqs()
1656 inti_to_irq(inti, &buf[n]); in get_all_floating_irqs()
1710 static inline int copy_irq_from_user(struct kvm_s390_interrupt_info *inti, in copy_irq_from_user() argument
1718 if (get_user(inti->type, (u64 __user *)addr)) in copy_irq_from_user()
1721 switch (inti->type) { in copy_irq_from_user()
1726 target = (void *) &inti->ext; in copy_irq_from_user()
1728 size = sizeof(inti->ext); in copy_irq_from_user()
1731 target = (void *) &inti->io; in copy_irq_from_user()
1733 size = sizeof(inti->io); in copy_irq_from_user()
1736 target = (void *) &inti->mchk; in copy_irq_from_user()
1738 size = sizeof(inti->mchk); in copy_irq_from_user()
1753 struct kvm_s390_interrupt_info *inti = NULL; in enqueue_floating_irq() local
1763 inti = kzalloc(sizeof(*inti), GFP_KERNEL); in enqueue_floating_irq()
1764 if (!inti) in enqueue_floating_irq()
1767 r = copy_irq_from_user(inti, attr->addr); in enqueue_floating_irq()
1769 kfree(inti); in enqueue_floating_irq()
1772 r = __inject_vm(dev->kvm, inti); in enqueue_floating_irq()
1774 kfree(inti); in enqueue_floating_irq()