History

io-uring: add sqpoll support for napi busy poll

This adds the sqpoll support to the io-uring napi.

Stefan Roesch committed 3 years ago

Commit ff183d41 parent 8d0c12a3 files · +33 −1Browse files

Unified · Split

3 files
  1. io_uring/napi.c +24 −0
  2. io_uring/napi.h +5 −1
  3. io_uring/sqpoll.c +4 −0
io_uring/napi.c+24−0
@@ -252,4 +252,28 @@ void __io_napi_busy_loop(struct io_ring_ctx *ctx, struct io_wait_queue *iowq) · 251 unmodified lines
252252 io_napi_blocking_busy_loop(ctx, iowq);
253253 }
254254
255+/*
256+ * io_napi_sqpoll_busy_poll() - busy poll loop for sqpoll
257+ * @ctx: pointer to io-uring context structure
258+ *
259+ * Splice of the napi list and execute the napi busy poll loop.
260+ */
261+int io_napi_sqpoll_busy_poll(struct io_ring_ctx *ctx)
262+{
263+ LIST_HEAD(napi_list);
264+ bool is_stale = false;
265+
266+ if (!READ_ONCE(ctx->napi_busy_poll_to))
267+ return 0;
268+ if (list_empty_careful(&ctx->napi_list))
269+ return 0;
270+
271+ rcu_read_lock();
272+ is_stale = __io_napi_do_busy_loop(ctx, NULL);
273+ rcu_read_unlock();
274+
275+ io_napi_remove_stale(ctx, is_stale);
276+ return 1;
277+}
278+
255279 #endif
io_uring/napi.h+5−1
@@ -17,6 +17,7 @@ void __io_napi_add(struct io_ring_ctx *ctx, struct socket *sock); · 16 unmodified lines
1717 void __io_napi_adjust_timeout(struct io_ring_ctx *ctx,
1818 struct io_wait_queue *iowq, struct timespec64 *ts);
1919 void __io_napi_busy_loop(struct io_ring_ctx *ctx, struct io_wait_queue *iowq);
20+int io_napi_sqpoll_busy_poll(struct io_ring_ctx *ctx);
2021
2122 static inline bool io_napi(struct io_ring_ctx *ctx)
2223 {
@@ -83,7 +84,10 @@ static inline void io_napi_busy_loop(struct io_ring_ctx *ctx, · 60 unmodified lines
8384 struct io_wait_queue *iowq)
8485 {
8586 }
86−
87+static inline int io_napi_sqpoll_busy_poll(struct io_ring_ctx *ctx)
88+{
89+ return 0;
90+}
8791 #endif /* CONFIG_NET_RX_BUSY_POLL */
8892
8993 #endif
io_uring/sqpoll.c+4−0
@@ -15,6 +15,7 @@ · 14 unmodified lines
1515 #include <uapi/linux/io_uring.h>
1616
1717 #include "io_uring.h"
18+#include "napi.h"
1819 #include "sqpoll.h"
1920
2021 #define IORING_SQPOLL_CAP_ENTRIES_VALUE 8
@@ -194,6 +195,9 @@ static int __io_sq_thread(struct io_ring_ctx *ctx, bool cap_entries) · 173 unmodified lines
194195 ret = io_submit_sqes(ctx, to_submit);
195196 mutex_unlock(&ctx->uring_lock);
196197
198+ if (io_napi(ctx))
199+ ret += io_napi_sqpoll_busy_poll(ctx);
200+
197201 if (to_submit && wq_has_sleeper(&ctx->sqo_sq_wait))
198202 wake_up(&ctx->sqo_sq_wait);
199203 if (creds)

Keyboard shortcuts

General

Show keyboard shortcuts
?
Focus the current search
/

Issues and pull requests

Open filters
f

Issues, pull requests and Inbox

Select next item
j↓
Select previous item
k↑
Open selected item
Enter
Dismiss filters or clear selection
Esc

Repository code

Go to file
t