Lines Matching refs:kirqfd
858 static void irqfd_deactivate(struct privcmd_kernel_irqfd *kirqfd) in irqfd_deactivate() argument
862 list_del_init(&kirqfd->list); in irqfd_deactivate()
863 queue_work(irqfd_cleanup_wq, &kirqfd->shutdown); in irqfd_deactivate()
868 struct privcmd_kernel_irqfd *kirqfd = in irqfd_shutdown() local
872 eventfd_ctx_remove_wait_queue(kirqfd->eventfd, &kirqfd->wait, &cnt); in irqfd_shutdown()
873 eventfd_ctx_put(kirqfd->eventfd); in irqfd_shutdown()
874 kfree(kirqfd); in irqfd_shutdown()
877 static void irqfd_inject(struct privcmd_kernel_irqfd *kirqfd) in irqfd_inject() argument
882 eventfd_ctx_do_read(kirqfd->eventfd, &cnt); in irqfd_inject()
885 rc = HYPERVISOR_dm_op(kirqfd->dom, 1, &kirqfd->xbufs); in irqfd_inject()
889 if (rc && !kirqfd->error) { in irqfd_inject()
891 kirqfd->dom); in irqfd_inject()
894 kirqfd->error = rc; in irqfd_inject()
900 struct privcmd_kernel_irqfd *kirqfd = in irqfd_wakeup() local
905 irqfd_inject(kirqfd); in irqfd_wakeup()
909 irqfd_deactivate(kirqfd); in irqfd_wakeup()
919 struct privcmd_kernel_irqfd *kirqfd = in irqfd_poll_func() local
922 add_wait_queue_priority(wqh, &kirqfd->wait); in irqfd_poll_func()
927 struct privcmd_kernel_irqfd *kirqfd, *tmp; in privcmd_irqfd_assign() local
933 kirqfd = kzalloc(sizeof(*kirqfd) + irqfd->size, GFP_KERNEL); in privcmd_irqfd_assign()
934 if (!kirqfd) in privcmd_irqfd_assign()
936 dm_op = kirqfd + 1; in privcmd_irqfd_assign()
943 kirqfd->xbufs.size = irqfd->size; in privcmd_irqfd_assign()
944 set_xen_guest_handle(kirqfd->xbufs.h, dm_op); in privcmd_irqfd_assign()
945 kirqfd->dom = irqfd->dom; in privcmd_irqfd_assign()
946 INIT_WORK(&kirqfd->shutdown, irqfd_shutdown); in privcmd_irqfd_assign()
954 kirqfd->eventfd = eventfd_ctx_fileget(f.file); in privcmd_irqfd_assign()
955 if (IS_ERR(kirqfd->eventfd)) { in privcmd_irqfd_assign()
956 ret = PTR_ERR(kirqfd->eventfd); in privcmd_irqfd_assign()
964 init_waitqueue_func_entry(&kirqfd->wait, irqfd_wakeup); in privcmd_irqfd_assign()
965 init_poll_funcptr(&kirqfd->pt, irqfd_poll_func); in privcmd_irqfd_assign()
970 if (kirqfd->eventfd == tmp->eventfd) { in privcmd_irqfd_assign()
977 list_add_tail(&kirqfd->list, &irqfds_list); in privcmd_irqfd_assign()
984 events = vfs_poll(f.file, &kirqfd->pt); in privcmd_irqfd_assign()
986 irqfd_inject(kirqfd); in privcmd_irqfd_assign()
996 eventfd_ctx_put(kirqfd->eventfd); in privcmd_irqfd_assign()
1002 kfree(kirqfd); in privcmd_irqfd_assign()
1008 struct privcmd_kernel_irqfd *kirqfd; in privcmd_irqfd_deassign() local
1017 list_for_each_entry(kirqfd, &irqfds_list, list) { in privcmd_irqfd_deassign()
1018 if (kirqfd->eventfd == eventfd) { in privcmd_irqfd_deassign()
1019 irqfd_deactivate(kirqfd); in privcmd_irqfd_deassign()
1071 struct privcmd_kernel_irqfd *kirqfd, *tmp; in privcmd_irqfd_exit() local
1075 list_for_each_entry_safe(kirqfd, tmp, &irqfds_list, list) in privcmd_irqfd_exit()
1076 irqfd_deactivate(kirqfd); in privcmd_irqfd_exit()