oh! That's not obvious at all from the man page (io_uring_enter.2)
If the io_uring instance was configured for polling, by specifying IORING_SETUP_IOPOLL in the
call to io_uring_setup(2), then min_complete has a slightly different meaning. Passing a
value of 0 instructs the kernel to return any events which are already complete, without
blocking. If min_complete is a non-zero value, the kernel will still return immediately if
any completion events are available. If no event completions are available, then the call
will poll either until one or more completions become available, or until the process has ex‐
ceeded its scheduler time slice.
... Well, TIL -- thanks! and the NAPI patch you pointed at looks interesting too.
If the io_uring instance was configured for polling, by specifying IORING_SETUP_IOPOLL in the call to io_uring_setup(2), then min_complete has a slightly different meaning. Passing a value of 0 instructs the kernel to return any events which are already complete, without blocking. If min_complete is a non-zero value, the kernel will still return immediately if any completion events are available. If no event completions are available, then the call will poll either until one or more completions become available, or until the process has ex‐ ceeded its scheduler time slice.
... Well, TIL -- thanks! and the NAPI patch you pointed at looks interesting too.