Lines Matching refs:virqfd

41 static void virqfd_deactivate(struct virqfd *virqfd)  in virqfd_deactivate()  argument
43 queue_work(vfio_irqfd_cleanup_wq, &virqfd->shutdown); in virqfd_deactivate()
48 struct virqfd *virqfd = container_of(wait, struct virqfd, wait); in virqfd_wakeup() local
53 if ((!virqfd->handler || in virqfd_wakeup()
54 virqfd->handler(virqfd->opaque, virqfd->data)) && in virqfd_wakeup()
55 virqfd->thread) in virqfd_wakeup()
56 schedule_work(&virqfd->inject); in virqfd_wakeup()
70 if (*(virqfd->pvirqfd) == virqfd) { in virqfd_wakeup()
71 *(virqfd->pvirqfd) = NULL; in virqfd_wakeup()
72 virqfd_deactivate(virqfd); in virqfd_wakeup()
84 struct virqfd *virqfd = container_of(pt, struct virqfd, pt); in virqfd_ptable_queue_proc() local
85 add_wait_queue(wqh, &virqfd->wait); in virqfd_ptable_queue_proc()
90 struct virqfd *virqfd = container_of(work, struct virqfd, shutdown); in virqfd_shutdown() local
93 eventfd_ctx_remove_wait_queue(virqfd->eventfd, &virqfd->wait, &cnt); in virqfd_shutdown()
94 flush_work(&virqfd->inject); in virqfd_shutdown()
95 eventfd_ctx_put(virqfd->eventfd); in virqfd_shutdown()
97 kfree(virqfd); in virqfd_shutdown()
102 struct virqfd *virqfd = container_of(work, struct virqfd, inject); in virqfd_inject() local
103 if (virqfd->thread) in virqfd_inject()
104 virqfd->thread(virqfd->opaque, virqfd->data); in virqfd_inject()
110 void *data, struct virqfd **pvirqfd, int fd) in vfio_virqfd_enable()
114 struct virqfd *virqfd; in vfio_virqfd_enable() local
118 virqfd = kzalloc(sizeof(*virqfd), GFP_KERNEL); in vfio_virqfd_enable()
119 if (!virqfd) in vfio_virqfd_enable()
122 virqfd->pvirqfd = pvirqfd; in vfio_virqfd_enable()
123 virqfd->opaque = opaque; in vfio_virqfd_enable()
124 virqfd->handler = handler; in vfio_virqfd_enable()
125 virqfd->thread = thread; in vfio_virqfd_enable()
126 virqfd->data = data; in vfio_virqfd_enable()
128 INIT_WORK(&virqfd->shutdown, virqfd_shutdown); in vfio_virqfd_enable()
129 INIT_WORK(&virqfd->inject, virqfd_inject); in vfio_virqfd_enable()
143 virqfd->eventfd = ctx; in vfio_virqfd_enable()
158 *pvirqfd = virqfd; in vfio_virqfd_enable()
166 init_waitqueue_func_entry(&virqfd->wait, virqfd_wakeup); in vfio_virqfd_enable()
167 init_poll_funcptr(&virqfd->pt, virqfd_ptable_queue_proc); in vfio_virqfd_enable()
169 events = irqfd.file->f_op->poll(irqfd.file, &virqfd->pt); in vfio_virqfd_enable()
177 schedule_work(&virqfd->inject); in vfio_virqfd_enable()
192 kfree(virqfd); in vfio_virqfd_enable()
198 void vfio_virqfd_disable(struct virqfd **pvirqfd) in vfio_virqfd_disable()