Lines Matching refs:irqfd

41 static void acrn_irqfd_inject(struct hsm_irqfd *irqfd)  in acrn_irqfd_inject()  argument
43 struct acrn_vm *vm = irqfd->vm; in acrn_irqfd_inject()
45 acrn_msi_inject(vm, irqfd->msi.msi_addr, in acrn_irqfd_inject()
46 irqfd->msi.msi_data); in acrn_irqfd_inject()
49 static void hsm_irqfd_shutdown(struct hsm_irqfd *irqfd) in hsm_irqfd_shutdown() argument
53 lockdep_assert_held(&irqfd->vm->irqfds_lock); in hsm_irqfd_shutdown()
56 list_del_init(&irqfd->list); in hsm_irqfd_shutdown()
57 eventfd_ctx_remove_wait_queue(irqfd->eventfd, &irqfd->wait, &cnt); in hsm_irqfd_shutdown()
58 eventfd_ctx_put(irqfd->eventfd); in hsm_irqfd_shutdown()
59 kfree(irqfd); in hsm_irqfd_shutdown()
64 struct hsm_irqfd *irqfd; in hsm_irqfd_shutdown_work() local
67 irqfd = container_of(work, struct hsm_irqfd, shutdown); in hsm_irqfd_shutdown_work()
68 vm = irqfd->vm; in hsm_irqfd_shutdown_work()
70 if (!list_empty(&irqfd->list)) in hsm_irqfd_shutdown_work()
71 hsm_irqfd_shutdown(irqfd); in hsm_irqfd_shutdown_work()
80 struct hsm_irqfd *irqfd; in hsm_irqfd_wakeup() local
83 irqfd = container_of(wait, struct hsm_irqfd, wait); in hsm_irqfd_wakeup()
84 vm = irqfd->vm; in hsm_irqfd_wakeup()
87 acrn_irqfd_inject(irqfd); in hsm_irqfd_wakeup()
91 queue_work(vm->irqfd_wq, &irqfd->shutdown); in hsm_irqfd_wakeup()
99 struct hsm_irqfd *irqfd; in hsm_irqfd_poll_func() local
101 irqfd = container_of(pt, struct hsm_irqfd, pt); in hsm_irqfd_poll_func()
102 add_wait_queue(wqh, &irqfd->wait); in hsm_irqfd_poll_func()
113 struct hsm_irqfd *irqfd, *tmp; in acrn_irqfd_assign() local
118 irqfd = kzalloc(sizeof(*irqfd), GFP_KERNEL); in acrn_irqfd_assign()
119 if (!irqfd) in acrn_irqfd_assign()
122 irqfd->vm = vm; in acrn_irqfd_assign()
123 memcpy(&irqfd->msi, &args->msi, sizeof(args->msi)); in acrn_irqfd_assign()
124 INIT_LIST_HEAD(&irqfd->list); in acrn_irqfd_assign()
125 INIT_WORK(&irqfd->shutdown, hsm_irqfd_shutdown_work); in acrn_irqfd_assign()
139 irqfd->eventfd = eventfd; in acrn_irqfd_assign()
145 init_waitqueue_func_entry(&irqfd->wait, hsm_irqfd_wakeup); in acrn_irqfd_assign()
146 init_poll_funcptr(&irqfd->pt, hsm_irqfd_poll_func); in acrn_irqfd_assign()
150 if (irqfd->eventfd != tmp->eventfd) in acrn_irqfd_assign()
156 list_add_tail(&irqfd->list, &vm->irqfds); in acrn_irqfd_assign()
160 events = vfs_poll(f.file, &irqfd->pt); in acrn_irqfd_assign()
163 acrn_irqfd_inject(irqfd); in acrn_irqfd_assign()
173 kfree(irqfd); in acrn_irqfd_assign()
180 struct hsm_irqfd *irqfd, *tmp; in acrn_irqfd_deassign() local
188 list_for_each_entry_safe(irqfd, tmp, &vm->irqfds, list) { in acrn_irqfd_deassign()
189 if (irqfd->eventfd == eventfd) { in acrn_irqfd_deassign()
190 hsm_irqfd_shutdown(irqfd); in acrn_irqfd_deassign()
226 struct hsm_irqfd *irqfd, *next; in acrn_irqfd_deinit() local
231 list_for_each_entry_safe(irqfd, next, &vm->irqfds, list) in acrn_irqfd_deinit()
232 hsm_irqfd_shutdown(irqfd); in acrn_irqfd_deinit()