Lines Matching refs:kirqfd

860 static void irqfd_deactivate(struct privcmd_kernel_irqfd *kirqfd)  in irqfd_deactivate()  argument
864 list_del_init(&kirqfd->list); in irqfd_deactivate()
865 queue_work(irqfd_cleanup_wq, &kirqfd->shutdown); in irqfd_deactivate()
870 struct privcmd_kernel_irqfd *kirqfd = in irqfd_shutdown() local
877 eventfd_ctx_remove_wait_queue(kirqfd->eventfd, &kirqfd->wait, &cnt); in irqfd_shutdown()
878 eventfd_ctx_put(kirqfd->eventfd); in irqfd_shutdown()
879 kfree(kirqfd); in irqfd_shutdown()
882 static void irqfd_inject(struct privcmd_kernel_irqfd *kirqfd) in irqfd_inject() argument
887 eventfd_ctx_do_read(kirqfd->eventfd, &cnt); in irqfd_inject()
890 rc = HYPERVISOR_dm_op(kirqfd->dom, 1, &kirqfd->xbufs); in irqfd_inject()
894 if (rc && !kirqfd->error) { in irqfd_inject()
896 kirqfd->dom); in irqfd_inject()
899 kirqfd->error = rc; in irqfd_inject()
905 struct privcmd_kernel_irqfd *kirqfd = in irqfd_wakeup() local
910 irqfd_inject(kirqfd); in irqfd_wakeup()
916 irqfd_deactivate(kirqfd); in irqfd_wakeup()
926 struct privcmd_kernel_irqfd *kirqfd = in irqfd_poll_func() local
929 add_wait_queue_priority(wqh, &kirqfd->wait); in irqfd_poll_func()
934 struct privcmd_kernel_irqfd *kirqfd, *tmp; in privcmd_irqfd_assign() local
941 kirqfd = kzalloc(sizeof(*kirqfd) + irqfd->size, GFP_KERNEL); in privcmd_irqfd_assign()
942 if (!kirqfd) in privcmd_irqfd_assign()
944 dm_op = kirqfd + 1; in privcmd_irqfd_assign()
951 kirqfd->xbufs.size = irqfd->size; in privcmd_irqfd_assign()
952 set_xen_guest_handle(kirqfd->xbufs.h, dm_op); in privcmd_irqfd_assign()
953 kirqfd->dom = irqfd->dom; in privcmd_irqfd_assign()
954 INIT_WORK(&kirqfd->shutdown, irqfd_shutdown); in privcmd_irqfd_assign()
962 kirqfd->eventfd = eventfd_ctx_fileget(f.file); in privcmd_irqfd_assign()
963 if (IS_ERR(kirqfd->eventfd)) { in privcmd_irqfd_assign()
964 ret = PTR_ERR(kirqfd->eventfd); in privcmd_irqfd_assign()
972 init_waitqueue_func_entry(&kirqfd->wait, irqfd_wakeup); in privcmd_irqfd_assign()
973 init_poll_funcptr(&kirqfd->pt, irqfd_poll_func); in privcmd_irqfd_assign()
978 if (kirqfd->eventfd == tmp->eventfd) { in privcmd_irqfd_assign()
986 list_add_tail(&kirqfd->list, &irqfds_list); in privcmd_irqfd_assign()
993 events = vfs_poll(f.file, &kirqfd->pt); in privcmd_irqfd_assign()
995 irqfd_inject(kirqfd); in privcmd_irqfd_assign()
1007 eventfd_ctx_put(kirqfd->eventfd); in privcmd_irqfd_assign()
1013 kfree(kirqfd); in privcmd_irqfd_assign()
1019 struct privcmd_kernel_irqfd *kirqfd; in privcmd_irqfd_deassign() local
1029 list_for_each_entry(kirqfd, &irqfds_list, list) { in privcmd_irqfd_deassign()
1030 if (kirqfd->eventfd == eventfd) { in privcmd_irqfd_deassign()
1031 irqfd_deactivate(kirqfd); in privcmd_irqfd_deassign()
1083 struct privcmd_kernel_irqfd *kirqfd, *tmp; in privcmd_irqfd_exit() local
1088 list_for_each_entry_safe(kirqfd, tmp, &irqfds_list, list) in privcmd_irqfd_exit()
1089 irqfd_deactivate(kirqfd); in privcmd_irqfd_exit()