From nobody Sun Feb 8 07:20:27 2026 Received: from mail-pl1-f173.google.com (mail-pl1-f173.google.com [209.85.214.173]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 9896E230BF8; Fri, 25 Apr 2025 07:11:52 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.214.173 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1745565114; cv=none; b=qEbkZHT60VOEYtG1Ps8V2BL9ssjvg3v3K6oQiBd7f/W2h6/Oh0FPyTPSd6v4gXu/ZrxDNl+o+OYe7BxouYExgMRgAYU4yCPP4EsFw4lrmnTrqspnhhrvK85SAd4Hdrl31S26zwpAaXAViHFLoq7YOYFPqNOhQd+wPxmqkTio3KU= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1745565114; c=relaxed/simple; bh=mAFnFm9FlcZV4NvoQvjfbcmlE0Ubh8CcyejzVeGNsbs=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=RK7568Solv/Mo5loyldkEXRXaNOkFihqJmiqAwBwGI5QOYgkcxZvdd9D5dOtK7kIhgRdRnmPn5kMyFVXh8LZUEQWaMWwOa9wpKaVbCcptZfwOURIFGZ5U7NGasxChnRVlO76tMI+hqNTZT+xHTxi0io7emra843/X4U7FIIYu5g= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=Jyvfo3jk; arc=none smtp.client-ip=209.85.214.173 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="Jyvfo3jk" Received: by mail-pl1-f173.google.com with SMTP id d9443c01a7336-2240b4de12bso29699775ad.2; Fri, 25 Apr 2025 00:11:52 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1745565112; x=1746169912; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=+JOGRgGKufTsNtNc5oEXqegFkT9LBJnCqXIPnSP+xEU=; b=Jyvfo3jkns6Wdgy+fKJr8zFyZ0RxXf7atdv9WCDaBntg1jXnwcbA5eRJmItSRhEnxG PH9M69vydG/5ls8tlsr8y0cp9qYnTbMYHo2mHTQdJ8/hMiMGAt1VXmcObUpe/0EIR99A tjHLyOWNNnHj1tCFeU288zTlA1oikK2gmJI3KS4DE24bEaZkwuUzubrP2YlxmDRaIPBp nqeoHg6q7XKIPwpPD/sTOoDDOThLMrjm7S3uQaBSoK7HoSaPrnMwYE4davHb427H4Vwb 7HephE3gQ7LnF3M6XVQqUyJszLY5dAGlrp5CoiCYv1EGslnixcAMyGdSN4JhQz2ADTYE h4Ag== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1745565112; x=1746169912; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=+JOGRgGKufTsNtNc5oEXqegFkT9LBJnCqXIPnSP+xEU=; b=L5TqnjcgRmcBYA3llWpndki/1IGBcTrF1MwRLldW/EFd5wHCDgt/kjm0wdIZ0tRCNS sy7vkMIukbeyzn0JPnYiLAxA3g4c/+V/sA3w/VucDbAPlAfGBQWrv2Trc61HcTQRx4ar XVdn4bMSAagUGLrP8/7n5inFZSFsBK7CnRaAr69JBNDr1UJEdW+dU8CIkUq5I6M2/ofB diFv6C03yVIVSvDsGoQzVGBjVn7wr5rtP1dqbAFLq+GkDTmi4UpkvF5E4nfFaCuibO9f G+KqPJY+yN+nxE8ZUOTgQ/bc9qaDtUKC+OcWNeyeKVD1B83GLtewIN+GqlrezCMK2Ylp 20VA== X-Forwarded-Encrypted: i=1; AJvYcCU56xzYoB9OdA8ayuB7Bo2onFvwcimXoGyPPJ83pNHtGMRAVxFQI1SZXN7wc9rqBZbE9XM=@vger.kernel.org, AJvYcCV8BvKuPdEsVFcbngySPm1juBDTUwrhQfPJUJGFjnnzyfcA/u2P3PhhghoYUeXCBVKZhUDAyJOm@vger.kernel.org, AJvYcCWWpVnYHCcaDQSZnXw4yCEEY6yXnMWxLSrUgJ5H8F1+ROkvkzq1n5GiArjK3PTWzdSQ6RLGvT7hH00s/Pfc@vger.kernel.org X-Gm-Message-State: AOJu0YyObC9IpfyHcrQDxE2t/46h4Ss5h4CKpib4yGAS3GumLGhnF6l9 5WQ7ISgL5w2kxiZhMsn/rhw146fOqf/k/55OTgHRKpsbD1snx4ED X-Gm-Gg: ASbGnctHyIiODyfvwBzCK0hAzXZXSggjii9pMvrjQN3h2AgJmg+olgyrnvhSoou37fJ 020nH5OWsLIiGjdK9lu6DIarFaDFgCxDp44/6AZviC+sEjvFO5UhobQ3BBaz7/7dT2/Yl4xzYXp 7AHwZ02obe1TZ8AtrZMZ4iAedoGd45Xz80+I/ZmlX1RER3iarKk/Gv5mYjTrFR/3ArleCXAWEVT M+VEuF21zG4aW1ApuMnXTDSfpHp+as/47ul04Hf3pVCSnl/OknFTuGEKNCD2ZVew589bGUY/Nmx 5cGg9cu5yMjT9h/3mJ9W8pYyDnLZIhF6DtWtFa5WGUOQRTRLIlm+Evyv X-Google-Smtp-Source: AGHT+IElAol3//I0LM/LyoucdlPuB7fBU0sANzkXGvmGVaSDn+awApeht13o+Gsd2p3PLalBkVxYgw== X-Received: by 2002:a17:902:d501:b0:224:5a8:ba29 with SMTP id d9443c01a7336-22dbf6409eemr20756635ad.43.1745565111782; Fri, 25 Apr 2025 00:11:51 -0700 (PDT) Received: from minh.192.168.1.1 ([2001:ee0:4f0e:fb30:1c5b:42af:3362:3840]) by smtp.googlemail.com with ESMTPSA id d9443c01a7336-22db51028basm25322425ad.196.2025.04.25.00.11.46 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 25 Apr 2025 00:11:51 -0700 (PDT) From: Bui Quang Minh To: virtualization@lists.linux.dev Cc: "Michael S. Tsirkin" , Jason Wang , Xuan Zhuo , Andrew Lunn , Eric Dumazet , Jakub Kicinski , Paolo Abeni , Alexei Starovoitov , Daniel Borkmann , Jesper Dangaard Brouer , John Fastabend , =?UTF-8?q?Eugenio=20P=C3=A9rez?= , "David S. Miller" , netdev@vger.kernel.org, linux-kernel@vger.kernel.org, bpf@vger.kernel.org, Bui Quang Minh Subject: [PATCH v6 1/4] selftests: net: move xdp_helper to net/lib Date: Fri, 25 Apr 2025 14:10:15 +0700 Message-ID: <20250425071018.36078-2-minhquangbui99@gmail.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250425071018.36078-1-minhquangbui99@gmail.com> References: <20250425071018.36078-1-minhquangbui99@gmail.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Move xdp_helper to net/lib to make it easier for other selftests to use the helper. Signed-off-by: Bui Quang Minh Acked-by: Michael S. Tsirkin --- tools/testing/selftests/drivers/net/.gitignore | 1 - tools/testing/selftests/drivers/net/Makefile | 1 - tools/testing/selftests/drivers/net/napi_id_helper.c | 2 +- tools/testing/selftests/drivers/net/queues.py | 4 ++-- tools/testing/selftests/net/lib/.gitignore | 1 + tools/testing/selftests/net/lib/Makefile | 1 + tools/testing/selftests/{drivers/net =3D> net/lib}/ksft.h | 0 tools/testing/selftests/{drivers/net =3D> net/lib}/xdp_helper.c | 0 8 files changed, 5 insertions(+), 5 deletions(-) rename tools/testing/selftests/{drivers/net =3D> net/lib}/ksft.h (100%) rename tools/testing/selftests/{drivers/net =3D> net/lib}/xdp_helper.c (10= 0%) diff --git a/tools/testing/selftests/drivers/net/.gitignore b/tools/testing= /selftests/drivers/net/.gitignore index 72d2124fd513..d634d8395d90 100644 --- a/tools/testing/selftests/drivers/net/.gitignore +++ b/tools/testing/selftests/drivers/net/.gitignore @@ -1,3 +1,2 @@ # SPDX-License-Identifier: GPL-2.0-only napi_id_helper -xdp_helper diff --git a/tools/testing/selftests/drivers/net/Makefile b/tools/testing/s= elftests/drivers/net/Makefile index 47247c2ef948..17db31aa58c9 100644 --- a/tools/testing/selftests/drivers/net/Makefile +++ b/tools/testing/selftests/drivers/net/Makefile @@ -8,7 +8,6 @@ TEST_INCLUDES :=3D $(wildcard lib/py/*.py) \ =20 TEST_GEN_FILES :=3D \ napi_id_helper \ - xdp_helper \ # end of TEST_GEN_FILES =20 TEST_PROGS :=3D \ diff --git a/tools/testing/selftests/drivers/net/napi_id_helper.c b/tools/t= esting/selftests/drivers/net/napi_id_helper.c index 7e8e7d373b61..eecd610c2109 100644 --- a/tools/testing/selftests/drivers/net/napi_id_helper.c +++ b/tools/testing/selftests/drivers/net/napi_id_helper.c @@ -8,7 +8,7 @@ #include #include =20 -#include "ksft.h" +#include "../../net/lib/ksft.h" =20 int main(int argc, char *argv[]) { diff --git a/tools/testing/selftests/drivers/net/queues.py b/tools/testing/= selftests/drivers/net/queues.py index 06abd3f233e1..236005290a33 100755 --- a/tools/testing/selftests/drivers/net/queues.py +++ b/tools/testing/selftests/drivers/net/queues.py @@ -26,13 +26,13 @@ def nl_get_queues(cfg, nl, qtype=3D'rx'): =20 def check_xsk(cfg, nl, xdp_queue_id=3D0) -> None: # Probe for support - xdp =3D cmd(f'{cfg.test_dir / "xdp_helper"} - -', fail=3DFalse) + xdp =3D cmd(f'{cfg.net_lib_dir / "xdp_helper"} - -', fail=3DFalse) if xdp.ret =3D=3D 255: raise KsftSkipEx('AF_XDP unsupported') elif xdp.ret > 0: raise KsftFailEx('unable to create AF_XDP socket') =20 - with bkg(f'{cfg.test_dir / "xdp_helper"} {cfg.ifindex} {xdp_queue_id}', + with bkg(f'{cfg.net_lib_dir / "xdp_helper"} {cfg.ifindex} {xdp_queue_i= d}', ksft_wait=3D3): =20 rx =3D tx =3D False diff --git a/tools/testing/selftests/net/lib/.gitignore b/tools/testing/sel= ftests/net/lib/.gitignore index 1ebc6187f421..bbc97d6bf556 100644 --- a/tools/testing/selftests/net/lib/.gitignore +++ b/tools/testing/selftests/net/lib/.gitignore @@ -1,2 +1,3 @@ # SPDX-License-Identifier: GPL-2.0-only csum +xdp_helper diff --git a/tools/testing/selftests/net/lib/Makefile b/tools/testing/selft= ests/net/lib/Makefile index c22623b9a2a5..88c4bc461459 100644 --- a/tools/testing/selftests/net/lib/Makefile +++ b/tools/testing/selftests/net/lib/Makefile @@ -10,6 +10,7 @@ TEST_FILES +=3D ../../../../net/ynl =20 TEST_GEN_FILES +=3D csum TEST_GEN_FILES +=3D $(patsubst %.c,%.o,$(wildcard *.bpf.c)) +TEST_GEN_FILES +=3D xdp_helper =20 TEST_INCLUDES :=3D $(wildcard py/*.py sh/*.sh) =20 diff --git a/tools/testing/selftests/drivers/net/ksft.h b/tools/testing/sel= ftests/net/lib/ksft.h similarity index 100% rename from tools/testing/selftests/drivers/net/ksft.h rename to tools/testing/selftests/net/lib/ksft.h diff --git a/tools/testing/selftests/drivers/net/xdp_helper.c b/tools/testi= ng/selftests/net/lib/xdp_helper.c similarity index 100% rename from tools/testing/selftests/drivers/net/xdp_helper.c rename to tools/testing/selftests/net/lib/xdp_helper.c --=20 2.43.0 From nobody Sun Feb 8 07:20:27 2026 Received: from mail-pl1-f181.google.com (mail-pl1-f181.google.com [209.85.214.181]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 5A8FA231A55; Fri, 25 Apr 2025 07:11:58 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.214.181 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1745565119; cv=none; b=fy9baytJ4eSnFGgqwFG+RsY0i7G1x2nXROEEJFFhphH/Z3q9BEOHriNK/gvjhaul424jWVfMI9/jQkJYvmO2YBk0qQl4B0bBc7Stt5nLg3oOXy83vriCzA46pMjXBcbT5ZDRXokvoqPZ4nB4OlLN/m6LhB4ye3T5AlDo/sWy50I= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1745565119; c=relaxed/simple; bh=HEECyfZinc+wH1214D5sqHe2jbzMGQUAA//2Fpca0iU=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=p8NPXFkxMUYGevJTYMHahZoEu4HsLhzmfAfIEuuxK05XnL4zTMZYOSzQY5VfTTpwF8ulmlhjULdCXWy1Vxlp7mXZNaMQX37uSuloiLvH7t2Vuf8b/Z/EoFpao1NfWKVTG4PBwQMhRS9R0o9EhhjQf1Belzk8oJ9KldXR6mMky04= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=aSE5Wk7g; arc=none smtp.client-ip=209.85.214.181 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="aSE5Wk7g" Received: by mail-pl1-f181.google.com with SMTP id d9443c01a7336-22401f4d35aso23437345ad.2; Fri, 25 Apr 2025 00:11:58 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1745565117; x=1746169917; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=LGgNXuFLvWdU6d7kOZ4c8+NmxWqqCA2URptaw+zqZE4=; b=aSE5Wk7gfETGS74gq9ERVmdwYHRum9FtP54DL9L3vPSi7YQtkmwXa86YtLWjgbK6mY YxQPbdCbadHHS1VbhcW+0Gz3CjGHgDT346yrZhKhgnZMC3kiYhs2f+KDsmz82qSk5pDi wyz6Y0haafafkho+e+nOpHdNXkciZ7+AbeCnn1exX8xY82lzDfl9r1FQAy2neLsdXsrL XZWsRIia1TPVoav6JxqCCIrtlR/ElRFX4qEULcaKSJGdqOEHuy+kxiTRkXzLwk+bPkK4 Mj/35ivAApanOE+aECmADEsSp2zIH+sS6xADTnCWO3/+KHi+PaVEWCnfl/p+PkTdn90p +s8A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1745565117; x=1746169917; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=LGgNXuFLvWdU6d7kOZ4c8+NmxWqqCA2URptaw+zqZE4=; b=JZN/KivYy2F9Sbq3/lkK+IDUfvSCE5tOINeeVJmf5zj6pWyuRrYuOrS7gn0dt74s6I cqVGje5bL0FmUFm5AhwyVKp5v5+RjeARiRJGf1RApi4Wy9g3mWAHUo28MXaXxCOfhjfv Go8XwHC/D35sghRUKoFKiNyt17DarK10aq59uQUMLXuX4dlSqxuJN5Pra/1R4ZAgiAzR vosDRCZtZWJtJjnpGScCweuSGz/BKbtZay6Hjh4EBa1/oKu6GfxMKYnrlToHcZjogjx/ AjjgeLZBXn7XpCKblAsI15mbxWqOsri/IAotxme/qqwr2KmIhQ1vT78XsFY0OR9uqFAL n4cQ== X-Forwarded-Encrypted: i=1; AJvYcCVH+/UhInUKeYCpOYliVrhouTux9KBnGAbpbQiTfajc9n4XyTHqDl0F3edNYxIbRTC4Kr4=@vger.kernel.org, AJvYcCVY47bERyRXW/YfGrcBppfn1B0vD13LyYlDOJ5CH3j7mhZMkerpWO6mKz7Q2N1CUVULUizeHQ59@vger.kernel.org, AJvYcCXfZLrpeV61CBNFW1f3A5wcbaWLNcTafWbfj23CqVAN76YjcEiEopxFBxh9aDqPaX7qnIE06TBQzsXGpHH/@vger.kernel.org X-Gm-Message-State: AOJu0Yyr+LxrtaPsnIOm8BEqjv8BZuJK3rI8+CYdBPsZx+blNYz65Z5t 73d1m46wQBYNOccu6/KLERxrH+bYIyaj18L8kszf+NG/alNWW3E2 X-Gm-Gg: ASbGncuEMbeo5o9sVd35sSrRIo/QWu0koxeq4FhHnYL50N+p4CJ1GAGwfT+u3la3ep2 hDWZPUkREV06OPZE4LoUbp7hwNW/fSShG5YVVMvPzy9YvHP7UhAJ9DMMprxZXiKArR4EVVlWVLI Lmzr6NWJtA/cpeK1w9HWAHUfmYCRoG5WDqHxjtigwsJFcyB2Qj6dArSjQ2iXIEHJcpqigsejNSl Qi1bgrjecnTUWKLDS6Ld1FQyckOwrzqPhgdlLQjo8ecf9Bjp821ocNKgm3B8/JEj7BD5nufnNyW yMUFTYsjY8lyaOy4V3qqSj41V/SwTkaUY+mQ+mL6IllrsUYumjNCRTsqHXD5UMtKFGU= X-Google-Smtp-Source: AGHT+IFpuBEDWJ4Jdf5U2gn8bRZq3DJLbe8GQt+jgcamP/LZqySE7mAq8G00x6oy8xUhODZjxUMyRQ== X-Received: by 2002:a17:903:2987:b0:223:f408:c3cf with SMTP id d9443c01a7336-22dbf5eaa52mr19859965ad.21.1745565117500; Fri, 25 Apr 2025 00:11:57 -0700 (PDT) Received: from minh.192.168.1.1 ([2001:ee0:4f0e:fb30:1c5b:42af:3362:3840]) by smtp.googlemail.com with ESMTPSA id d9443c01a7336-22db51028basm25322425ad.196.2025.04.25.00.11.52 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 25 Apr 2025 00:11:57 -0700 (PDT) From: Bui Quang Minh To: virtualization@lists.linux.dev Cc: "Michael S. Tsirkin" , Jason Wang , Xuan Zhuo , Andrew Lunn , Eric Dumazet , Jakub Kicinski , Paolo Abeni , Alexei Starovoitov , Daniel Borkmann , Jesper Dangaard Brouer , John Fastabend , =?UTF-8?q?Eugenio=20P=C3=A9rez?= , "David S. Miller" , netdev@vger.kernel.org, linux-kernel@vger.kernel.org, bpf@vger.kernel.org, Bui Quang Minh Subject: [PATCH v6 2/4] selftests: net: add flag to force zerocopy mode in xdp_helper Date: Fri, 25 Apr 2025 14:10:16 +0700 Message-ID: <20250425071018.36078-3-minhquangbui99@gmail.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250425071018.36078-1-minhquangbui99@gmail.com> References: <20250425071018.36078-1-minhquangbui99@gmail.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" This commit adds an optional -z flag to xdp_helper. When this flag is provided, the XDP socket binding is forced to be in zerocopy mode. Signed-off-by: Bui Quang Minh Acked-by: Michael S. Tsirkin --- tools/testing/selftests/net/lib/xdp_helper.c | 19 +++++++++++++++++-- 1 file changed, 17 insertions(+), 2 deletions(-) diff --git a/tools/testing/selftests/net/lib/xdp_helper.c b/tools/testing/s= elftests/net/lib/xdp_helper.c index d5bb8ac33efa..6327863cafa6 100644 --- a/tools/testing/selftests/net/lib/xdp_helper.c +++ b/tools/testing/selftests/net/lib/xdp_helper.c @@ -17,6 +17,12 @@ #define NUM_DESC (UMEM_SZ / 2048) =20 =20 +static void print_usage(const char *bin) +{ + fprintf(stderr, "Usage: %s ifindex queue_id [-z]\n\n" + "where:\n\t-z: force zerocopy mode", bin); +} + /* this is a simple helper program that creates an XDP socket and does the * minimum necessary to get bind() to succeed. * @@ -36,8 +42,8 @@ int main(int argc, char **argv) int sock_fd; int queue; =20 - if (argc !=3D 3) { - fprintf(stderr, "Usage: %s ifindex queue_id\n", argv[0]); + if (argc !=3D 3 && argc !=3D 4) { + print_usage(argv[0]); return 1; } =20 @@ -87,6 +93,15 @@ int main(int argc, char **argv) sxdp.sxdp_queue_id =3D queue; sxdp.sxdp_flags =3D 0; =20 + if (argc > 3) { + if (!strcmp(argv[3], "-z")) { + sxdp.sxdp_flags =3D XDP_ZEROCOPY; + } else { + print_usage(argv[0]); + return 1; + } + } + if (bind(sock_fd, (struct sockaddr *)&sxdp, sizeof(sxdp)) !=3D 0) { munmap(umem_area, UMEM_SZ); perror("bind failed"); --=20 2.43.0 From nobody Sun Feb 8 07:20:27 2026 Received: from mail-pj1-f54.google.com (mail-pj1-f54.google.com [209.85.216.54]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 903AC231A55; Fri, 25 Apr 2025 07:12:03 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.216.54 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1745565125; cv=none; b=UQZrN2FWeX3s8iSHipsDLnvzaaKtS1OIG/t6PRlviwNt54aHONGN8D0ZYf5ZfkTZckU8Zp6gvy3vYfBivAjMmXb2SZjVNBFNZWQPglR0k/ThlQSdpLjlcKzF3OVqItNfZ3rDM6OqChtKzX4qwf/ivNWRTan1crEZd6kj3wolZDc= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1745565125; c=relaxed/simple; bh=fbFQYkrN1XH+y7ZVmfRanb5zZ2ao2S6rtD9w9lEiSmo=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=oGCv4gW21W/8owJ7ug8so0TtWJ0MA3CsmVx9+8e0uRdkwbxmJajFz7HpyUHcARJOvlwict6VzNNtM5vpYm5lmdtC4/X6cHZfJbY93kQH9wMD6etDxev0G4BMchJZkztsgTMVjCcJi6nj0rHG1W3aCRjNp7qqMtLN06tffTC+4pc= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=BP+ukEfr; arc=none smtp.client-ip=209.85.216.54 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="BP+ukEfr" Received: by mail-pj1-f54.google.com with SMTP id 98e67ed59e1d1-3018e2d042bso1341806a91.2; Fri, 25 Apr 2025 00:12:03 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1745565123; x=1746169923; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=+lldMq3GuKsNS7Tmp5QkmsxzmnppZ1kmVjOK5AIUcWk=; b=BP+ukEfr7/nydIyscoTYSGuqnEYOUp5vqz38LQ4C4PyL9AYDc6U/b16ZKwSiIkbn25 pkQGpM646T6QPsx9PROgMl/CZmjZkcZfBEDOGy3eUgudNyvhqwjDesYzIQevI5J9fvgB dXLJd/ZpaVJqPV5uz2UQUdu3uNZgDmqWDPceXsLj041tskjtIO5mhtnooO87rVzCN5RN sK5OxJU2ffVzx34V2ELcqgzaeMJyTIRospUFB4h/Tbg0TmIKmqhfO+XqIko7nWEmfp37 jAhiEkct5nzSWaKsWZVJzfdC8a/jZrvJBEkzCin55ad7MohS4hBScSIBB4/VIXlzds6o vYhA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1745565123; x=1746169923; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=+lldMq3GuKsNS7Tmp5QkmsxzmnppZ1kmVjOK5AIUcWk=; b=f1yHQhuaAB7/4tR6JUdwnmsJ5ONTSyaoLRJAI89nj0FthCucxf/Mc1AtTJ18AkS6Ak KqAgmWWypxSubPN3mvVMySaFCmlV1+0hK5DWi0QZKD8cwehVfJl6WkEH051SCkRYcpX7 sunY8cQzUnKMl9AkwdlmdKgXbPcMtldq1FoYL2c/rymn6bc1L2I74ADkjINa7at76y/7 5RHy16CIH8Ll2o/RX/vjLILAFEIume7zMlnEN9D2TPU3qBJb5IZutFfLRFpMchh/eAVS heyYqKfPy7ysO76u2t7JhZvprIQ6I9aRINrQBVpkxfpQ5KNvSfqJkU3T2plZg7Od+mJ7 n/3w== X-Forwarded-Encrypted: i=1; AJvYcCVoTwXUFDR5D0drr6CtyaFfxVVXyILV+HaUOmTPPQDl2YRxT2nIpj7eVuIeoFhcLqLWFcCMTYaM@vger.kernel.org, AJvYcCWvhNT6uvEJxbgXd1rvqD6dExIKI6kNYQXwgIWydYSasbXna3aZ2t59e9vW8l2o50OnDvs=@vger.kernel.org, AJvYcCX/dZb6L5wbhDR6TJWn4sSSHRBUvsATHEFifdpAseSgMlCl5C/L32Cck8HnU8+Z7tQZ3X4jA2jL8myLxNeB@vger.kernel.org X-Gm-Message-State: AOJu0YypERSq/GGVFAMM4yBHFhJv07mpUP8EbFnlNuMXggVoA65XONAW McwbgfFzc+3Teq8AhaV5Eu3F0H9ZZo74c5V9AzZXQJcSboRHws8Q X-Gm-Gg: ASbGncu6u2m2nEHRGVVynqWXox5GiqCYXufLiWorXMUquM7X9Xu6I/TOHzf5mVhc1Zg 07e5OoDIyaCGqhdyYqurTjmBHuDncCI6vKRdVsTjPQBRB4JHKL+jG7qH0dpHR+75fqbMvP5F7SS ZkaMBp7Xv+WFPS8qQ8rYTFjc8t7c7qM+OrxVjEOYxeuzkxfaUnKE9CPYbeSHeBwa19sbA4+7Wzd z+lprLuh31t/ehOuPg7ucfY1jXgCx1VJxREJOk6GsZ31MNC/5jNUUNriutQ0WiOF/jOoMVFjZKE nuxpxxE+TiSy2I7RykDHBrexPtm7bn5AvqJG1kaN5Cv67We+saSP3Non X-Google-Smtp-Source: AGHT+IGOLflJPiM1kAIV4XAg02lYJ1F9ADWNr/7fQCvJe3nlEDTR3ljD5CXGvcCmPzqN9F2GvEwZqw== X-Received: by 2002:a17:90a:bb8f:b0:305:5f32:d9f0 with SMTP id 98e67ed59e1d1-309f8db391amr1240737a91.19.1745565122928; Fri, 25 Apr 2025 00:12:02 -0700 (PDT) Received: from minh.192.168.1.1 ([2001:ee0:4f0e:fb30:1c5b:42af:3362:3840]) by smtp.googlemail.com with ESMTPSA id d9443c01a7336-22db51028basm25322425ad.196.2025.04.25.00.11.57 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 25 Apr 2025 00:12:02 -0700 (PDT) From: Bui Quang Minh To: virtualization@lists.linux.dev Cc: "Michael S. Tsirkin" , Jason Wang , Xuan Zhuo , Andrew Lunn , Eric Dumazet , Jakub Kicinski , Paolo Abeni , Alexei Starovoitov , Daniel Borkmann , Jesper Dangaard Brouer , John Fastabend , =?UTF-8?q?Eugenio=20P=C3=A9rez?= , "David S. Miller" , netdev@vger.kernel.org, linux-kernel@vger.kernel.org, bpf@vger.kernel.org, Bui Quang Minh Subject: [PATCH v6 3/4] selftests: net: retry when bind returns EBUSY in xdp_helper Date: Fri, 25 Apr 2025 14:10:17 +0700 Message-ID: <20250425071018.36078-4-minhquangbui99@gmail.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250425071018.36078-1-minhquangbui99@gmail.com> References: <20250425071018.36078-1-minhquangbui99@gmail.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" When binding the XDP socket, we may get EBUSY because the deferred destructor of XDP socket in previous test has not been executed yet. If that is the case, just sleep and retry some times. Signed-off-by: Bui Quang Minh Acked-by: Michael S. Tsirkin --- tools/testing/selftests/net/lib/xdp_helper.c | 20 +++++++++++++++----- 1 file changed, 15 insertions(+), 5 deletions(-) diff --git a/tools/testing/selftests/net/lib/xdp_helper.c b/tools/testing/s= elftests/net/lib/xdp_helper.c index 6327863cafa6..eb025a9f35b1 100644 --- a/tools/testing/selftests/net/lib/xdp_helper.c +++ b/tools/testing/selftests/net/lib/xdp_helper.c @@ -38,6 +38,7 @@ int main(int argc, char **argv) struct sockaddr_xdp sxdp =3D { 0 }; int num_desc =3D NUM_DESC; void *umem_area; + int retry =3D 0; int ifindex; int sock_fd; int queue; @@ -102,11 +103,20 @@ int main(int argc, char **argv) } } =20 - if (bind(sock_fd, (struct sockaddr *)&sxdp, sizeof(sxdp)) !=3D 0) { - munmap(umem_area, UMEM_SZ); - perror("bind failed"); - close(sock_fd); - return 1; + while (1) { + if (bind(sock_fd, (struct sockaddr *)&sxdp, sizeof(sxdp)) =3D=3D 0) + break; + + if (errno =3D=3D EBUSY && retry < 3) { + retry++; + sleep(1); + continue; + } else { + perror("bind failed"); + munmap(umem_area, UMEM_SZ); + close(sock_fd); + return 1; + } } =20 ksft_ready(); --=20 2.43.0 From nobody Sun Feb 8 07:20:27 2026 Received: from mail-pl1-f182.google.com (mail-pl1-f182.google.com [209.85.214.182]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id C1F1323534D; Fri, 25 Apr 2025 07:12:09 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.214.182 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1745565131; cv=none; b=dXj2+wYmtrmMIDDlaPdccxJWwWqPCNbDxqcfA4gHhv1ppfgo8421HEWeZGZQ1hJW9Mt1Xi+HM8QzwS1z06HQLkhONtxNJdG2edAGqfzLn8A3MHbwbtOPnA74Jfv3Nwmad58xadN5GJDkWNV6F5HWry2o37p3bfXhcrM4RkX6Z0Q= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1745565131; c=relaxed/simple; bh=2QfJQ7dcrhKuX+Tq551J8RtKTlD3rjHY/Eo0FkW4GEA=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=RA8JZsrkUnCWJXs9FBXcTD2LZ7sPZRZP/RkHGchkI4iUzAbcPQfXX5eDqdy2pOSCnr+hhyN0DuSjcmdDY0ngb3El03flLDYyMAF5xra6luqqfTbl/aGSHlhq6KH6Q4MaaLNgL3+hQCT0kT2fWrteAbHmBDUS8ER+Ie/nBFeoM2s= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=Fqsb79me; arc=none smtp.client-ip=209.85.214.182 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="Fqsb79me" Received: by mail-pl1-f182.google.com with SMTP id d9443c01a7336-2243803b776so32741125ad.0; Fri, 25 Apr 2025 00:12:09 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1745565129; x=1746169929; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=5KTzXr+eJ6VOU6pnmjI7NKvMZ52qKy79/3M/WgxOiNU=; b=Fqsb79meejnPo0TFhO3QPfTLdROsANcGHNXMTExSIEFSoECLjchcJN5JLRjekZHEcK 50m4p2GhRqUaScycOL6PV6XCnRl0R72dYFIGAvzUVDNSdU7coiia1fMwJmBqrGdMfvaP PMxG3EnaVC0NqElkcDg9tHrbiYkHHxeQC1S+TQOwKbRUy88FE08GarCe53oHm+EFaeSc HIwMsRgh+0KLEXbu8Z4YgF2Ml40iy3boduyOiPkyCP0pFwZCwDiFB5Cpts13t1qBLWFp n4HRTXc/hQVJC2AmtdCZo1Ia6dEeLj8ZKfvxwBJW/xY9a2NMvm7vyZl/InsIoPvFQVcn +mMA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1745565129; x=1746169929; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=5KTzXr+eJ6VOU6pnmjI7NKvMZ52qKy79/3M/WgxOiNU=; b=myiESHk9gCf5A+KfyAqG4EU2/gg4B9ZG7xIEdPJ9BwrxD4mw73sVvlb8TAKabF0tEM j7rqEPOgsFPiX8kt26iRXtYoAobzYX7mD34dJJhVHqhizwNfee7lR8w2kR+QgWcvVaNx VnYJnbktsELXL5eEDOxJ3Zxwu0FahuBBx0AEhsrlma7zkkjray93+u9XrzpmWy7Qt5dN qxDPvk+umh+oA+lC2H8fnPVUjxN+q6sdBpgMBgw4QcJdgu6PYqgjkTY37Or2+o1FH51o 2bZoTGOmRt1cD/ZBJat8uHGy4gmjfWyPVJoX/i+Yj215m9bKClC9swVGA1TzbRYCMGKS DZzA== X-Forwarded-Encrypted: i=1; AJvYcCW6lkdgfMiwhARV0N/ktNl27LddVB8Rt9mgNzJc99l/8dyrvcwJJr4ODUVS2chA3ZrGoac=@vger.kernel.org, AJvYcCXYbEj/WyQdPn9O80gjXFaxheA6t6YBVIbc1w7fwboVq/Im6gplvOE4YncesJ16GGcAKnVO3ggu@vger.kernel.org, AJvYcCXohx6xmf/PYWwlvLmXn3/AB+QJVkJFTtIgpMVI4yirKaPSXDK/r6F/oY8X3desFWOBCgfELozgOj/wd+Lj@vger.kernel.org X-Gm-Message-State: AOJu0YxTq5U6zrXON4vh12YrCNJyfEsSVlmTsT50cg++Z+U6S6NZqjBu Lbe6mLViKSyEyaQRmDXXu+cfahPYVdEfD6laJ/xXEE6GvjdWUlZq X-Gm-Gg: ASbGncttQa9Hv6/hzgW1178kPIPs8F/Yeudy3l1ZYoMrYYlJO5LpG5njgmsokxdNHh4 CA20Cf0Mx9NkZ8HHHDoibLcYnmNG47/s4fmH/nwi81+sJ9VKnSzhFvy6Yqiwhw8r2ztH8hJ8XQN wCWGWKYvz5w7z5Xqfz3Pys8cGbQ/LZ1/3ssOmfkyvJOQrWe3r4nqrfa51xjOXqjBuOuht1lOx03 8bIG16R/8e63xLhjyZUuDln7820hSLxdxm4qhjZPqj+lsqGgsdM2tAfn0FqLAknqVcfhgiyDsZP mYjKdt3Y1UGXosBCPYxWPW7KMZBG3oNzwD7oYwZVYIZ97MkE1WvppOtr X-Google-Smtp-Source: AGHT+IHbdQaaI+TlUD8wQDF+D7xEsxbXV0AtWO6xb3b+HZ9IeIZ1AgtMWePNiAGk/CXJX9Q3ks1G9w== X-Received: by 2002:a17:903:94c:b0:223:5ca8:5ecb with SMTP id d9443c01a7336-22dbf62335emr20904505ad.42.1745565129029; Fri, 25 Apr 2025 00:12:09 -0700 (PDT) Received: from minh.192.168.1.1 ([2001:ee0:4f0e:fb30:1c5b:42af:3362:3840]) by smtp.googlemail.com with ESMTPSA id d9443c01a7336-22db51028basm25322425ad.196.2025.04.25.00.12.03 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 25 Apr 2025 00:12:08 -0700 (PDT) From: Bui Quang Minh To: virtualization@lists.linux.dev Cc: "Michael S. Tsirkin" , Jason Wang , Xuan Zhuo , Andrew Lunn , Eric Dumazet , Jakub Kicinski , Paolo Abeni , Alexei Starovoitov , Daniel Borkmann , Jesper Dangaard Brouer , John Fastabend , =?UTF-8?q?Eugenio=20P=C3=A9rez?= , "David S. Miller" , netdev@vger.kernel.org, linux-kernel@vger.kernel.org, bpf@vger.kernel.org, Bui Quang Minh Subject: [PATCH v6 4/4] selftests: net: add a virtio_net deadlock selftest Date: Fri, 25 Apr 2025 14:10:18 +0700 Message-ID: <20250425071018.36078-5-minhquangbui99@gmail.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250425071018.36078-1-minhquangbui99@gmail.com> References: <20250425071018.36078-1-minhquangbui99@gmail.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" The selftest reproduces the deadlock scenario when binding/unbinding XDP program, XDP socket, rx ring resize on virtio_net interface. Signed-off-by: Bui Quang Minh Acked-by: Michael S. Tsirkin --- .../testing/selftests/drivers/net/hw/Makefile | 1 + .../selftests/drivers/net/hw/xsk_reconfig.py | 60 +++++++++++++++++++ 2 files changed, 61 insertions(+) create mode 100755 tools/testing/selftests/drivers/net/hw/xsk_reconfig.py diff --git a/tools/testing/selftests/drivers/net/hw/Makefile b/tools/testin= g/selftests/drivers/net/hw/Makefile index 07cddb19ba35..5447785c286e 100644 --- a/tools/testing/selftests/drivers/net/hw/Makefile +++ b/tools/testing/selftests/drivers/net/hw/Makefile @@ -21,6 +21,7 @@ TEST_PROGS =3D \ rss_ctx.py \ rss_input_xfrm.py \ tso.py \ + xsk_reconfig.py \ # =20 TEST_FILES :=3D \ diff --git a/tools/testing/selftests/drivers/net/hw/xsk_reconfig.py b/tools= /testing/selftests/drivers/net/hw/xsk_reconfig.py new file mode 100755 index 000000000000..d19d1d518208 --- /dev/null +++ b/tools/testing/selftests/drivers/net/hw/xsk_reconfig.py @@ -0,0 +1,60 @@ +#!/usr/bin/env python3 +# SPDX-License-Identifier: GPL-2.0 + +# This is intended to be run on a virtio-net guest interface. +# The test binds the XDP socket to the interface without setting +# the fill ring to trigger delayed refill_work. This helps to +# make it easier to reproduce the deadlock when XDP program, +# XDP socket bind/unbind, rx ring resize race with refill_work on +# the buggy kernel. +# +# The Qemu command to setup virtio-net +# -netdev tap,id=3Dhostnet1,vhost=3Don,script=3Dno,downscript=3Dno +# -device virtio-net-pci,netdev=3Dhostnet1,iommu_platform=3Don,disable-leg= acy=3Don + +from lib.py import ksft_exit, ksft_run +from lib.py import KsftSkipEx, KsftFailEx +from lib.py import NetDrvEnv +from lib.py import bkg, ip, cmd, ethtool +import time + +def _get_rx_ring_entries(cfg): + output =3D ethtool(f"-g {cfg.ifname}", json=3DTrue) + return output[0]["rx"] + +def setup_xsk(cfg, xdp_queue_id =3D 0) -> bkg: + # Probe for support + xdp =3D cmd(f'{cfg.net_lib_dir / "xdp_helper"} - -', fail=3DFalse) + if xdp.ret =3D=3D 255: + raise KsftSkipEx('AF_XDP unsupported') + elif xdp.ret > 0: + raise KsftFailEx('unable to create AF_XDP socket') + + try: + return bkg(f'{cfg.net_lib_dir / "xdp_helper"} {cfg.ifindex} ' \ + '{xdp_queue_id} -z', ksft_wait=3D3) + except: + raise KsftSkipEx('Failed to bind XDP socket in zerocopy.\n' \ + 'Please consider adding iommu_platform=3Don ' \ + 'when setting up virtio-net-pci') + +def check_xdp_bind(cfg): + with setup_xsk(cfg): + ip(f"link set dev %s xdp obj %s sec xdp" % + (cfg.ifname, cfg.net_lib_dir / "xdp_dummy.bpf.o")) + ip(f"link set dev %s xdp off" % cfg.ifname) + +def check_rx_resize(cfg): + with setup_xsk(cfg): + rx_ring =3D _get_rx_ring_entries(cfg) + ethtool(f"-G %s rx %d" % (cfg.ifname, rx_ring // 2)) + ethtool(f"-G %s rx %d" % (cfg.ifname, rx_ring)) + +def main(): + with NetDrvEnv(__file__, nsim_test=3DFalse) as cfg: + ksft_run([check_xdp_bind, check_rx_resize], + args=3D(cfg, )) + ksft_exit() + +if __name__ =3D=3D "__main__": + main() --=20 2.43.0