Hello, Included patch adds O_ASYNC support for uverbs event handling.
Signed-off-by: Gleb Natapov <[EMAIL PROTECTED]> Index: trunk/src/linux-kernel/infiniband/core/uverbs_main.c =================================================================== --- trunk/src/linux-kernel/infiniband/core/uverbs_main.c (revision 2810) +++ trunk/src/linux-kernel/infiniband/core/uverbs_main.c (working copy) @@ -258,10 +258,28 @@ spin_unlock_irq(&file->lock); } +static int ib_uverbs_event_async (int fd, struct file *filp, int on) +{ + int ret; + struct ib_uverbs_event_file *file = filp->private_data; + + if (!file) + return -EBADFD; + + if ((ret = fasync_helper(fd, filp, on, &file->fasync)) < 0) + return ret; + + if (on) + ret = f_setown(filp, current->pid, 0); + + return ret; +} + static int ib_uverbs_event_close(struct inode *inode, struct file *filp) { struct ib_uverbs_event_file *file = filp->private_data; + ib_uverbs_event_async (-1, filp, 0); ib_uverbs_event_release(file); kref_put(&file->uverbs_file->ref, ib_uverbs_release_file); @@ -277,7 +295,8 @@ */ .read = ib_uverbs_event_read, .poll = ib_uverbs_event_poll, - .release = ib_uverbs_event_close + .release = ib_uverbs_event_close, + .fasync = ib_uverbs_event_async }; void ib_uverbs_comp_handler(struct ib_cq *cq, void *cq_context) @@ -317,6 +336,7 @@ spin_unlock_irqrestore(&file->async_file.lock, flags); wake_up_interruptible(&file->async_file.poll_wait); + kill_fasync (&file->async_file.fasync, SIGIO, POLL_IN); } void ib_uverbs_cq_event_handler(struct ib_event *event, void *context_ptr) @@ -351,6 +371,7 @@ INIT_LIST_HEAD(&file->event_list); init_waitqueue_head(&file->poll_wait); file->uverbs_file = uverbs_file; + file->fasync = NULL; file->fd = get_unused_fd(); if (file->fd < 0) Index: trunk/src/linux-kernel/infiniband/core/uverbs.h =================================================================== --- trunk/src/linux-kernel/infiniband/core/uverbs.h (revision 2810) +++ trunk/src/linux-kernel/infiniband/core/uverbs.h (working copy) @@ -62,6 +62,7 @@ int fd; int is_async; wait_queue_head_t poll_wait; + struct fasync_struct *fasync; struct list_head event_list; }; -- Gleb. _______________________________________________ openib-general mailing list openib-general@openib.org http://openib.org/mailman/listinfo/openib-general To unsubscribe, please visit http://openib.org/mailman/listinfo/openib-general