Lines Matching refs:virqfd

33 struct virqfd {
43 struct virqfd **pvirqfd;
63 static void virqfd_deactivate(struct virqfd *virqfd)
65 queue_work(vfio_irqfd_cleanup_wq, &virqfd->shutdown);
70 struct virqfd *virqfd = container_of(wait, struct virqfd, wait);
75 if ((!virqfd->handler ||
76 virqfd->handler(virqfd->vdev, virqfd->data)) &&
77 virqfd->thread)
78 schedule_work(&virqfd->inject);
83 spin_lock_irqsave(&virqfd->vdev->irqlock, flags);
86 * The eventfd is closing, if the virqfd has not yet been
89 * with kvm irqfds, we know we won't race against the virqfd
92 if (*(virqfd->pvirqfd) == virqfd) {
93 *(virqfd->pvirqfd) = NULL;
94 virqfd_deactivate(virqfd);
97 spin_unlock_irqrestore(&virqfd->vdev->irqlock, flags);
106 struct virqfd *virqfd = container_of(pt, struct virqfd, pt);
107 add_wait_queue(wqh, &virqfd->wait);
112 struct virqfd *virqfd = container_of(work, struct virqfd, shutdown);
115 eventfd_ctx_remove_wait_queue(virqfd->eventfd, &virqfd->wait, &cnt);
116 flush_work(&virqfd->inject);
117 eventfd_ctx_put(virqfd->eventfd);
119 kfree(virqfd);
124 struct virqfd *virqfd = container_of(work, struct virqfd, inject);
125 if (virqfd->thread)
126 virqfd->thread(virqfd->vdev, virqfd->data);
132 void *data, struct virqfd **pvirqfd, int fd)
136 struct virqfd *virqfd;
140 virqfd = kzalloc(sizeof(*virqfd), GFP_KERNEL);
141 if (!virqfd)
144 virqfd->pvirqfd = pvirqfd;
145 virqfd->vdev = vdev;
146 virqfd->handler = handler;
147 virqfd->thread = thread;
148 virqfd->data = data;
150 INIT_WORK(&virqfd->shutdown, virqfd_shutdown);
151 INIT_WORK(&virqfd->inject, virqfd_inject);
165 virqfd->eventfd = ctx;
170 * we update the pointer to the virqfd under lock to avoid
171 * pushing multiple jobs to release the same virqfd.
180 *pvirqfd = virqfd;
188 init_waitqueue_func_entry(&virqfd->wait, virqfd_wakeup);
189 init_poll_funcptr(&virqfd->pt, virqfd_ptable_queue_proc);
191 events = irqfd.file->f_op->poll(irqfd.file, &virqfd->pt);
199 schedule_work(&virqfd->inject);
214 kfree(virqfd);
220 struct virqfd **pvirqfd)