| /linux/drivers/virt/acrn/ |
| H A D | irqfd.c | 39 static void acrn_irqfd_inject(struct hsm_irqfd *irqfd) in acrn_irqfd_inject() argument 41 struct acrn_vm *vm = irqfd->vm; in acrn_irqfd_inject() 43 acrn_msi_inject(vm, irqfd->msi.msi_addr, in acrn_irqfd_inject() 44 irqfd->msi.msi_data); in acrn_irqfd_inject() 47 static void hsm_irqfd_shutdown(struct hsm_irqfd *irqfd) in hsm_irqfd_shutdown() argument 51 lockdep_assert_held(&irqfd->vm->irqfds_lock); in hsm_irqfd_shutdown() 54 list_del_init(&irqfd->list); in hsm_irqfd_shutdown() 55 eventfd_ctx_remove_wait_queue(irqfd->eventfd, &irqfd->wait, &cnt); in hsm_irqfd_shutdown() 56 eventfd_ctx_put(irqfd->eventfd); in hsm_irqfd_shutdown() 57 kfree(irqfd); in hsm_irqfd_shutdown() [all …]
|
| H A D | hsm.c | 120 struct acrn_irqfd irqfd; in acrn_dev_ioctl() local 412 if (copy_from_user(&irqfd, (void __user *)ioctl_param, in acrn_dev_ioctl() 413 sizeof(irqfd))) in acrn_dev_ioctl() 415 ret = acrn_irqfd_config(vm, &irqfd); in acrn_dev_ioctl()
|
| H A D | Makefile | 3 acrn-y := hsm.o vm.o mm.o ioreq.o ioeventfd.o irqfd.o
|
| /linux/drivers/hv/ |
| H A D | mshv_eventfd.c | 81 struct mshv_irqfd *irqfd; in mshv_irqfd_resampler_ack() local 90 hlist_for_each_entry_srcu(irqfd, &resampler->rsmplr_irqfd_list, in mshv_irqfd_resampler_ack() 93 if (hv_should_clear_interrupt(irqfd->irqfd_lapic_irq.lapic_control.interrupt_type)) in mshv_irqfd_resampler_ack() 96 eventfd_signal(irqfd->irqfd_resamplefd); in mshv_irqfd_resampler_ack() 154 static int mshv_try_assert_irq_fast(struct mshv_irqfd *irqfd) in mshv_try_assert_irq_fast() argument 156 struct mshv_partition *partition = irqfd->irqfd_partn; in mshv_try_assert_irq_fast() 157 struct mshv_lapic_irq *irq = &irqfd->irqfd_lapic_irq; in mshv_try_assert_irq_fast() 189 static int mshv_try_assert_irq_fast(struct mshv_irqfd *irqfd) in mshv_try_assert_irq_fast() argument 195 static void mshv_assert_irq_slow(struct mshv_irqfd *irqfd) in mshv_assert_irq_slow() argument 197 struct mshv_partition *partition = irqfd->irqfd_partn; in mshv_assert_irq_slow() [all …]
|
| /linux/virt/kvm/ |
| H A D | eventfd.c | 44 struct kvm_kernel_irqfd *irqfd = in irqfd_inject() local 46 struct kvm *kvm = irqfd->kvm; in irqfd_inject() 48 if (!irqfd->resampler) { in irqfd_inject() 49 kvm_set_irq(kvm, KVM_USERSPACE_IRQ_SOURCE_ID, irqfd->gsi, 1, in irqfd_inject() 51 kvm_set_irq(kvm, KVM_USERSPACE_IRQ_SOURCE_ID, irqfd->gsi, 0, in irqfd_inject() 55 irqfd->gsi, 1, false); in irqfd_inject() 60 struct kvm_kernel_irqfd *irqfd; in irqfd_resampler_notify() local 62 list_for_each_entry_srcu(irqfd, &resampler->list, resampler_link, in irqfd_resampler_notify() 64 eventfd_signal(irqfd->resamplefd); in irqfd_resampler_notify() 92 irqfd_resampler_shutdown(struct kvm_kernel_irqfd *irqfd) in irqfd_resampler_shutdown() argument [all …]
|
| /linux/arch/um/drivers/ |
| H A D | vfio_user.c | 150 static int vfio_set_irqs(int device, int start, int count, int *irqfd) in vfio_set_irqs() argument 153 int argsz = sizeof(*irq_set) + sizeof(*irqfd) * count; in vfio_set_irqs() 165 memcpy(irq_set->data, irqfd, sizeof(*irqfd) * count); in vfio_set_irqs() 226 dev->irqfd = uml_kmalloc(sizeof(int) * dev->irq_count, UM_GFP_KERNEL); in uml_vfio_user_setup_device() 227 if (!dev->irqfd) { in uml_vfio_user_setup_device() 232 memset(dev->irqfd, -1, sizeof(int) * dev->irq_count); in uml_vfio_user_setup_device() 234 err = vfio_set_irqs(dev->device, 0, dev->irq_count, dev->irqfd); in uml_vfio_user_setup_device() 241 kfree(dev->irqfd); in uml_vfio_user_setup_device() 251 kfree(dev->irqfd); in uml_vfio_user_teardown_device() 258 int irqfd; in uml_vfio_user_activate_irq() local [all …]
|
| H A D | vfio_kern.c | 165 int irqfd = dev->udev.irqfd[index]; in uml_vfio_interrupt() local 171 r = os_read_file(irqfd, &v, sizeof(v)); in uml_vfio_interrupt() 183 int err, irqfd; in uml_vfio_activate_irq() local 188 irqfd = uml_vfio_user_activate_irq(&dev->udev, index); in uml_vfio_activate_irq() 189 if (irqfd < 0) in uml_vfio_activate_irq() 190 return irqfd; in uml_vfio_activate_irq() 192 ctx->irq = um_request_irq(UM_IRQ_ALLOC, irqfd, IRQ_READ, in uml_vfio_activate_irq() 200 err = add_sigio_fd(irqfd); in uml_vfio_activate_irq() 219 ignore_sigio_fd(dev->udev.irqfd[index]); in uml_vfio_deactivate_irq()
|
| H A D | vfio_user.h | 14 int32_t *irqfd; member
|
| /linux/arch/x86/kvm/ |
| H A D | irq.c | 426 static int kvm_pi_update_irte(struct kvm_kernel_irqfd *irqfd, in kvm_pi_update_irte() argument 429 unsigned int host_irq = irqfd->producer->irq; in kvm_pi_update_irte() 430 struct kvm *kvm = irqfd->kvm; in kvm_pi_update_irte() 458 if (!irqfd->irq_bypass_vcpu && !vcpu) in kvm_pi_update_irte() 461 r = kvm_x86_call(pi_update_irte)(irqfd, irqfd->kvm, host_irq, irqfd->gsi, in kvm_pi_update_irte() 464 WARN_ON_ONCE(irqfd->irq_bypass_vcpu && !vcpu); in kvm_pi_update_irte() 465 irqfd->irq_bypass_vcpu = NULL; in kvm_pi_update_irte() 469 irqfd->irq_bypass_vcpu = vcpu; in kvm_pi_update_irte() 471 trace_kvm_pi_irte_update(host_irq, vcpu, irqfd->gsi, irq.vector, !!vcpu); in kvm_pi_update_irte() 478 struct kvm_kernel_irqfd *irqfd = in kvm_arch_irq_bypass_add_producer() local [all …]
|
| /linux/drivers/vfio/ |
| H A D | virqfd.c | 135 CLASS(fd, irqfd)(fd); in vfio_virqfd_enable() 136 if (fd_empty(irqfd)) { in vfio_virqfd_enable() 141 ctx = eventfd_ctx_fileget(fd_file(irqfd)); in vfio_virqfd_enable() 173 events = vfs_poll(fd_file(irqfd), &virqfd->pt); in vfio_virqfd_enable()
|
| /linux/drivers/xen/ |
| H A D | privcmd.c | 976 static int privcmd_irqfd_assign(struct privcmd_irqfd *irqfd) in privcmd_irqfd_assign() argument 984 CLASS(fd, f)(irqfd->fd); in privcmd_irqfd_assign() 986 kirqfd = kzalloc(sizeof(*kirqfd) + irqfd->size, GFP_KERNEL); in privcmd_irqfd_assign() 991 if (copy_from_user(dm_op, u64_to_user_ptr(irqfd->dm_op), irqfd->size)) { in privcmd_irqfd_assign() 996 kirqfd->xbufs.size = irqfd->size; in privcmd_irqfd_assign() 998 kirqfd->dom = irqfd->dom; in privcmd_irqfd_assign() 1052 static int privcmd_irqfd_deassign(struct privcmd_irqfd *irqfd) in privcmd_irqfd_deassign() argument 1058 eventfd = eventfd_ctx_fdget(irqfd->fd); in privcmd_irqfd_deassign() 1088 struct privcmd_irqfd irqfd; in privcmd_ioctl_irqfd() local 1090 if (copy_from_user(&irqfd, udata, sizeof(irqfd))) in privcmd_ioctl_irqfd() [all …]
|
| H A D | Kconfig | 274 bool "Xen Ioeventfd and irqfd support" 277 Using the ioeventfd / irqfd mechanism a virtio backend running in a
|
| /linux/arch/x86/kvm/svm/ |
| H A D | avic.c | 872 static void svm_ir_list_del(struct kvm_kernel_irqfd *irqfd) in svm_ir_list_del() argument 874 struct kvm_vcpu *vcpu = irqfd->irq_bypass_vcpu; in svm_ir_list_del() 881 list_del(&irqfd->vcpu_list); in svm_ir_list_del() 885 int avic_pi_update_irte(struct kvm_kernel_irqfd *irqfd, struct kvm *kvm, in avic_pi_update_irte() argument 893 svm_ir_list_del(irqfd); in avic_pi_update_irte() 949 irqfd->irq_bypass_data = pi_data.ir_data; in avic_pi_update_irte() 950 list_add(&irqfd->vcpu_list, &svm->ir_list); in avic_pi_update_irte() 989 struct kvm_kernel_irqfd *irqfd; in avic_update_iommu_vcpu_affinity() local 1000 list_for_each_entry(irqfd, &svm->ir_list, vcpu_list) { in avic_update_iommu_vcpu_affinity() 1001 void *data = irqfd->irq_bypass_data; in avic_update_iommu_vcpu_affinity()
|
| H A D | svm.h | 913 int avic_pi_update_irte(struct kvm_kernel_irqfd *irqfd, struct kvm *kvm,
|
| /linux/arch/arm64/kvm/ |
| H A D | arm.c | 2895 struct kvm_kernel_irqfd *irqfd = in kvm_arch_irq_bypass_add_producer() local 2897 struct kvm_kernel_irq_routing_entry *irq_entry = &irqfd->irq_entry; in kvm_arch_irq_bypass_add_producer() 2906 return kvm_vgic_v4_set_forwarding(irqfd->kvm, prod->irq, in kvm_arch_irq_bypass_add_producer() 2907 &irqfd->irq_entry); in kvm_arch_irq_bypass_add_producer() 2913 struct kvm_kernel_irqfd *irqfd = in kvm_arch_irq_bypass_del_producer() local 2915 struct kvm_kernel_irq_routing_entry *irq_entry = &irqfd->irq_entry; in kvm_arch_irq_bypass_del_producer() 2920 kvm_vgic_v4_unset_forwarding(irqfd->kvm, prod->irq); in kvm_arch_irq_bypass_del_producer() 2923 void kvm_arch_update_irqfd_routing(struct kvm_kernel_irqfd *irqfd, in kvm_arch_update_irqfd_routing() argument 2939 return kvm_vgic_v4_unset_forwarding(irqfd->kvm, irqfd->producer->irq); in kvm_arch_update_irqfd_routing() 2944 struct kvm_kernel_irqfd *irqfd = in kvm_arch_irq_bypass_stop() local [all …]
|
| /linux/arch/x86/kvm/vmx/ |
| H A D | posted_intr.h | 17 int vmx_pi_update_irte(struct kvm_kernel_irqfd *irqfd, struct kvm *kvm,
|
| H A D | posted_intr.c | 305 int vmx_pi_update_irte(struct kvm_kernel_irqfd *irqfd, struct kvm *kvm, in vmx_pi_update_irte() argument
|
| /linux/arch/loongarch/kvm/ |
| H A D | Makefile | 24 kvm-y += irqfd.o
|
| /linux/arch/powerpc/kvm/ |
| H A D | powerpc.c | 855 struct kvm_kernel_irqfd *irqfd = in kvm_arch_irq_bypass_add_producer() local 857 struct kvm *kvm = irqfd->kvm; in kvm_arch_irq_bypass_add_producer() 868 struct kvm_kernel_irqfd *irqfd = in kvm_arch_irq_bypass_del_producer() local 870 struct kvm *kvm = irqfd->kvm; in kvm_arch_irq_bypass_del_producer()
|
| /linux/tools/testing/selftests/kvm/include/ |
| H A D | kvm_util.h | 542 struct kvm_irqfd irqfd = { in __kvm_irqfd() local 549 return __vm_ioctl(vm, KVM_IRQFD, &irqfd); in __kvm_irqfd()
|
| /linux/arch/x86/include/asm/ |
| H A D | kvm_host.h | 1940 int (*pi_update_irte)(struct kvm_kernel_irqfd *irqfd, struct kvm *kvm,
|
| /linux/include/linux/ |
| H A D | kvm_host.h | 2426 void kvm_arch_update_irqfd_routing(struct kvm_kernel_irqfd *irqfd,
|
| /linux/Documentation/virt/kvm/ |
| H A D | api.rst | 3191 the guest using the specified gsi pin. The irqfd is removed using 3196 mechanism allowing emulation of level-triggered, irqfd-based 3205 irqfd. The KVM_IRQFD_FLAG_RESAMPLE is only necessary on assignment
|