Commit fe991a76 authored by Jens Axboe's avatar Jens Axboe
Browse files

io_uring: move POLLFREE handling to separate function



We really don't care about this at all in terms of performance. Outside
of having it already be marked unlikely(), shove it into a separate
__cold function.

Signed-off-by: default avatarJens Axboe <axboe@kernel.dk>
parent 795bbbc8
Loading
Loading
Loading
Loading
+27 −23
Original line number Diff line number Diff line
@@ -325,14 +325,8 @@ static void io_poll_cancel_req(struct io_kiocb *req)

#define IO_ASYNC_POLL_COMMON	(EPOLLONESHOT | EPOLLPRI)

static int io_poll_wake(struct wait_queue_entry *wait, unsigned mode, int sync,
			void *key)
static __cold int io_pollfree_wake(struct io_kiocb *req, struct io_poll *poll)
{
	struct io_kiocb *req = wqe_to_req(wait);
	struct io_poll *poll = container_of(wait, struct io_poll, wait);
	__poll_t mask = key_to_poll(key);

	if (unlikely(mask & POLLFREE)) {
	io_poll_mark_cancelled(req);
	/* we have to kick tw in case it's not already */
	io_poll_execute(req, 0);
@@ -356,6 +350,16 @@ static int io_poll_wake(struct wait_queue_entry *wait, unsigned mode, int sync,
	return 1;
}

static int io_poll_wake(struct wait_queue_entry *wait, unsigned mode, int sync,
			void *key)
{
	struct io_kiocb *req = wqe_to_req(wait);
	struct io_poll *poll = container_of(wait, struct io_poll, wait);
	__poll_t mask = key_to_poll(key);

	if (unlikely(mask & POLLFREE))
		return io_pollfree_wake(req, poll);

	/* for instances that support it check for an event match first */
	if (mask && !(mask & (poll->events & ~IO_ASYNC_POLL_COMMON)))
		return 0;