]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
selftests: iou-zcrx: defer listen() until after zcrx setup
authorDragos Tatulea <dtatulea@nvidia.com>
Thu, 11 Jun 2026 16:03:41 +0000 (19:03 +0300)
committerJakub Kicinski <kuba@kernel.org>
Sat, 13 Jun 2026 00:28:07 +0000 (17:28 -0700)
The server binds the queues for zero-copy after listen(). If the client
does a connect() during this time it can fail with EHOSTUNREACH on
a cold system. This was encountered with the mlx5 driver where binding
the .ndo_queue_start() is a slow operation during which no packets
can be exchanged.

This change moves listen() after queue binding, when the test server is
fully operational.

Signed-off-by: Dragos Tatulea <dtatulea@nvidia.com>
Reviewed-by: Cosmin Ratiu <cratiu@nvidia.com>
Link: https://patch.msgid.link/20260611160341.3697227-2-dtatulea@nvidia.com
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
tools/testing/selftests/drivers/net/hw/iou-zcrx.c

index 240d13dbc54e7710755cda8ce78cc45e8ec04a1c..f6a8fc5fac2418e49aee2c18745713b5003c0773 100644 (file)
@@ -351,9 +351,6 @@ static void run_server(void)
        if (ret < 0)
                error(1, 0, "bind()");
 
-       if (listen(fd, 1024) < 0)
-               error(1, 0, "listen()");
-
        flags |= IORING_SETUP_COOP_TASKRUN;
        flags |= IORING_SETUP_SINGLE_ISSUER;
        flags |= IORING_SETUP_DEFER_TASKRUN;
@@ -366,6 +363,9 @@ static void run_server(void)
        if (cfg_dry_run)
                return;
 
+       if (listen(fd, 1024) < 0)
+               error(1, 0, "listen()");
+
        add_accept(&ring, fd);
 
        tstop = gettimeofday_ms() + 5000;