]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
selftests/xsk: restore shared_umem after POLL_TXQ_FULL
authorTushar Vyavahare <tushar.vyavahare@intel.com>
Tue, 16 Jun 2026 15:49:54 +0000 (21:19 +0530)
committerJakub Kicinski <kuba@kernel.org>
Tue, 23 Jun 2026 20:40:45 +0000 (13:40 -0700)
POLL_TXQ_FULL temporarily disables shared_umem on TX to exercise the
TX timeout path in isolation.

With shared_umem enabled, TX setup expects RX UMEM to be initialized
first and fails with: "RX UMEM is not initialized before shared-UMEM TX
setup".

Save and restore shared_umem around POLL_TXQ_FULL execution, and restore
it on both success and pkt_stream_replace() failure paths.

Also add an in-code comment explaining why shared_umem is temporarily
disabled in this test.

This keeps timeout setup local and prevents cross-test state leakage.

Signed-off-by: Tushar Vyavahare <tushar.vyavahare@intel.com>
Reviewed-by: Jason Xing <kerneljasonxing@gmail.com>
Acked-by: Maciej Fijalkowski <maciej.fijalkowski@intel.com>
Tested-by: Maciej Fijalkowski <maciej.fijalkowski@intel.com>
Link: https://patch.msgid.link/20260616154955.1492560-4-tushar.vyavahare@intel.com
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
tools/testing/selftests/bpf/prog_tests/test_xsk.c

index d4702d2aac5e1a2cf69928614d03cf0e8fa5d4e2..6eb9096d084c018d46dabb5554381322288d4220 100644 (file)
@@ -2226,13 +2226,28 @@ int testapp_xdp_shared_umem(struct test_spec *test)
 
 int testapp_poll_txq_tmout(struct test_spec *test)
 {
+       bool shared_umem = test->ifobj_tx->shared_umem;
+       int ret;
+
        test->poll_tmout = true;
+       /*
+        * POLL_TXQ_FULL exercises TX timeout setup in isolation.
+        * Keep TX out of shared-UMEM mode here so TX setup does not require
+        * RX UMEM to be initialized first.
+        */
+       test->ifobj_tx->shared_umem = false;
        test->ifobj_tx->use_poll = true;
        /* create invalid frame by set umem frame_size and pkt length equal to 2048 */
        test->ifobj_tx->xsk->umem->frame_size = 2048;
-       if (pkt_stream_replace(test, 2 * DEFAULT_PKT_CNT, 2048))
+       if (pkt_stream_replace(test, 2 * DEFAULT_PKT_CNT, 2048)) {
+               test->ifobj_tx->shared_umem = shared_umem;
                return TEST_FAILURE;
-       return testapp_validate_traffic_single_thread(test, test->ifobj_tx);
+       }
+
+       ret = testapp_validate_traffic_single_thread(test, test->ifobj_tx);
+       test->ifobj_tx->shared_umem = shared_umem;
+
+       return ret;
 }
 
 int testapp_poll_rxq_tmout(struct test_spec *test)