Patch Detail
get:
Show a patch.
patch:
Update a patch.
put:
Update a patch.
GET /api/patches/102345/?format=api
http://patches.dpdk.org/api/patches/102345/?format=api", "web_url": "http://patches.dpdk.org/project/dpdk/patch/20211020073151.2374674-4-xuemingl@nvidia.com/", "project": { "id": 1, "url": "http://patches.dpdk.org/api/projects/1/?format=api", "name": "DPDK", "link_name": "dpdk", "list_id": "dev.dpdk.org", "list_email": "dev@dpdk.org", "web_url": "http://core.dpdk.org", "scm_url": "git://dpdk.org/dpdk", "webscm_url": "http://git.dpdk.org/dpdk", "list_archive_url": "https://inbox.dpdk.org/dev", "list_archive_url_format": "https://inbox.dpdk.org/dev/{}", "commit_url_format": "" }, "msgid": "<20211020073151.2374674-4-xuemingl@nvidia.com>", "list_archive_url": "https://inbox.dpdk.org/dev/20211020073151.2374674-4-xuemingl@nvidia.com", "date": "2021-10-20T07:31:51", "name": "[v2,3/3] test/devargs: add devargs test cases", "commit_ref": null, "pull_url": null, "state": "superseded", "archived": true, "hash": "75a052d1d4b20281f5f900bb16e34bfa19bebee3", "submitter": { "id": 1904, "url": "http://patches.dpdk.org/api/people/1904/?format=api", "name": "Xueming Li", "email": "xuemingl@nvidia.com" }, "delegate": { "id": 24651, "url": "http://patches.dpdk.org/api/users/24651/?format=api", "username": "dmarchand", "first_name": "David", "last_name": "Marchand", "email": "david.marchand@redhat.com" }, "mbox": "http://patches.dpdk.org/project/dpdk/patch/20211020073151.2374674-4-xuemingl@nvidia.com/mbox/", "series": [ { "id": 19819, "url": "http://patches.dpdk.org/api/series/19819/?format=api", "web_url": "http://patches.dpdk.org/project/dpdk/list/?series=19819", "date": "2021-10-20T07:31:48", "name": "devargs: support path in global syntax", "version": 2, "mbox": "http://patches.dpdk.org/series/19819/mbox/" } ], "comments": "http://patches.dpdk.org/api/patches/102345/comments/", "check": "fail", "checks": "http://patches.dpdk.org/api/patches/102345/checks/", "tags": {}, "related": [], "headers": { "Return-Path": "<dev-bounces@dpdk.org>", "X-Original-To": "patchwork@inbox.dpdk.org", "Delivered-To": "patchwork@inbox.dpdk.org", "Received": [ "from mails.dpdk.org (mails.dpdk.org [217.70.189.124])\n\tby inbox.dpdk.org (Postfix) with ESMTP id 04E99A0C45;\n\tWed, 20 Oct 2021 09:32:36 +0200 (CEST)", "from [217.70.189.124] (localhost [127.0.0.1])\n\tby mails.dpdk.org (Postfix) with ESMTP id 3EE7441182;\n\tWed, 20 Oct 2021 09:32:29 +0200 (CEST)", "from NAM04-MW2-obe.outbound.protection.outlook.com\n (mail-mw2nam08on2052.outbound.protection.outlook.com [40.107.101.52])\n by mails.dpdk.org (Postfix) with ESMTP id AF30A4117B\n for <dev@dpdk.org>; Wed, 20 Oct 2021 09:32:21 +0200 (CEST)", "from DM6PR06CA0004.namprd06.prod.outlook.com (2603:10b6:5:120::17)\n by BN8PR12MB3217.namprd12.prod.outlook.com (2603:10b6:408:6e::30) with\n Microsoft SMTP Server (version=TLS1_2,\n cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4608.18; Wed, 20 Oct\n 2021 07:32:19 +0000", "from DM6NAM11FT008.eop-nam11.prod.protection.outlook.com\n (2603:10b6:5:120:cafe::a5) by DM6PR06CA0004.outlook.office365.com\n (2603:10b6:5:120::17) with Microsoft SMTP Server (version=TLS1_2,\n cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4608.15 via Frontend\n Transport; Wed, 20 Oct 2021 07:32:19 +0000", "from mail.nvidia.com (216.228.112.34) by\n DM6NAM11FT008.mail.protection.outlook.com (10.13.172.85) with Microsoft SMTP\n Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384) id\n 15.20.4628.16 via Frontend Transport; Wed, 20 Oct 2021 07:32:18 +0000", "from nvidia.com (172.20.187.5) by HQMAIL107.nvidia.com\n (172.20.187.13) with Microsoft SMTP Server (TLS) id 15.0.1497.18; Wed, 20 Oct\n 2021 07:32:15 +0000" ], "ARC-Seal": "i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;\n b=e3CWnU137xmbiA7+OiR7I/JjqF4r8VwHuG4FdfBWtIuid4EpQCzQIe59al9B2cApuyiu0Oz0ygNPOsGIw0VD9D2FR6GcT9MBKia8kxwsYXTew4a3IVAycgtJEVVdKeyoPJpAAAtvdxXJ7PakOhe3XB76OMqm44E0gwmok0zCS2Pey3JYr27mszPBt9CFnMi37F6bHVkkwCVO+6IICFxEZV7sh18iGAmXt7w+fdSTEpS8yaZUcJt61SlPXcLs8tUB2WmAbddHOsBSKR/mLiArBDcnecYH86mmap25HBxjZWKmOQtWlXD5GjNjwWebX6lrKHfMx9X7v0aHS4oVbUIazQ==", "ARC-Message-Signature": "i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com;\n s=arcselector9901;\n h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1;\n bh=5h65FyPoGGqt+ZO2zf6v7Jd+eTpDH3U2bKTNJkmhSsU=;\n b=a78RJDIHfBTJOhHRrwv2hg2PZjb2WBHpQqU+KAL1PQyP/ji1JJ8MfpRj8BuVJy/mRQE1o9wp5+LPJRyR3d0ig3IphVBtW1D2XwYrbW0odxsBRgoHZpwu4lWp5pvkExrM96+FQJ5SjykLbth03rSQo+dDt9efwMLHwSCZP5pjlf3KZ//Y0wBg+FQSug31WSW1pTx4XFuDXniNd+kQAD9VDqG8bgEc7intNZs2sG6P/nln6tGxe+KPQ8pvqAt5ea4P7JNAgAOEKZ0jW1NXLtTX8th8j6sLP2J3xdbxrUYUtpQ9SynWHp5tPDDSYxKvEnGG98YpKr2cerkpsG4yeZy/Mg==", "ARC-Authentication-Results": "i=1; mx.microsoft.com 1; spf=pass (sender ip is\n 216.228.112.34) smtp.rcpttodomain=monjalon.net smtp.mailfrom=nvidia.com;\n dmarc=pass (p=quarantine sp=quarantine pct=100) action=none\n header.from=nvidia.com; dkim=none (message not signed); arc=none", "DKIM-Signature": "v=1; a=rsa-sha256; c=relaxed/relaxed; d=Nvidia.com;\n s=selector2;\n h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;\n bh=5h65FyPoGGqt+ZO2zf6v7Jd+eTpDH3U2bKTNJkmhSsU=;\n b=PWQV3wqCcC4bnY55mpPQY2EL2s8EAeDV6ds+ieNzU1ExvKO0Z8UTOFXCljdV2lP7xb6LIZOBLXxZFPCRshbRelgApd5MPPFPR/bK7qrB+TmRDf9PotJ4fHPn6up3Zx6iLCWCFGLmnDf7nksDJKu/P3i4l65Owe1JhgAJAZS4O4HZZyTjcfAiTDuctvjK/SUQWjqcxwBDVp5ysoIJikUDqtd0ep0l0L/e6cgxxiIxvT9KLR6UuGbZFFUAM7cLtpQdkxcEZHS1K7xUX3d34X+DdN7Ll2kw81MfFUlpbb1tumkM41H8vJiGb2GQSm9YfAJ8RP9RmikKcXV+L3VEZBYMpA==", "X-MS-Exchange-Authentication-Results": "spf=pass (sender IP is 216.228.112.34)\n smtp.mailfrom=nvidia.com; monjalon.net; dkim=none (message not signed)\n header.d=none;monjalon.net; dmarc=pass action=none header.from=nvidia.com;", "Received-SPF": "Pass (protection.outlook.com: domain of nvidia.com designates\n 216.228.112.34 as permitted sender) receiver=protection.outlook.com;\n client-ip=216.228.112.34; helo=mail.nvidia.com;", "From": "Xueming Li <xuemingl@nvidia.com>", "To": "<dev@dpdk.org>, Gaetan Rivet <grive@u256.net>", "CC": "<xuemingl@nvidia.com>, Thomas Monjalon <thomas@monjalon.net>, \"Lior\n Margalit\" <lmargalit@nvidia.com>", "Date": "Wed, 20 Oct 2021 15:31:51 +0800", "Message-ID": "<20211020073151.2374674-4-xuemingl@nvidia.com>", "X-Mailer": "git-send-email 2.33.0", "In-Reply-To": "<20211020073151.2374674-1-xuemingl@nvidia.com>", "References": "<20211005155435.279043-1-xuemingl@nvidia.com>\n <20211020073151.2374674-1-xuemingl@nvidia.com>", "MIME-Version": "1.0", "Content-Transfer-Encoding": "8bit", "Content-Type": "text/plain", "X-Originating-IP": "[172.20.187.5]", "X-ClientProxiedBy": "HQMAIL111.nvidia.com (172.20.187.18) To\n HQMAIL107.nvidia.com (172.20.187.13)", "X-EOPAttributedMessage": "0", "X-MS-PublicTrafficType": "Email", "X-MS-Office365-Filtering-Correlation-Id": "8c3f9a42-3970-48e2-cc36-08d9939bbf61", "X-MS-TrafficTypeDiagnostic": "BN8PR12MB3217:", "X-LD-Processed": "43083d15-7273-40c1-b7db-39efd9ccc17a,ExtAddr", "X-Microsoft-Antispam-PRVS": "\n <BN8PR12MB3217021344261ED5F4F9FE94A1BE9@BN8PR12MB3217.namprd12.prod.outlook.com>", "X-MS-Oob-TLC-OOBClassifiers": "OLM:94;", "X-MS-Exchange-SenderADCheck": "1", "X-MS-Exchange-AntiSpam-Relay": "0", "X-Microsoft-Antispam": "BCL:0;", "X-Microsoft-Antispam-Message-Info": "\n VXiDHb6dWwjQg4O94cM6bzV/K7sq2ICFja5sYV/VE6bpEwPSbysm9ChQrr3w8iyL99i5N3vUOdsWJKFu8QUj3kUNjjfAxEQWLaWJIJr4s2q+v6B7zByrhEwnAaEgplz87UYpnYP6dGubeXhB9l1beQaL63Mz+U0VcwiQzZaYzLWpY9bOI7YxwFc001bzcHmQojY67AMVbkgL91h+vLdV4xPCN9VH32fsdkvOxSpdQC9psjBedQYLgeR458yPmt1vXGGFJ9dbIZjUYFssV6cWaTmMtzgYwGujca8PMKTHFh7HhwfYNCIsFBABk38HwBmH+J/zBk2LVuQdoYhAsczHnLpqaRON4eCH/0X/8hvoBK7sZf43ypSHhPQ5uQZ3D3LVjU7Fwp+PuDT6aY8Co3sZuwlp3qoa7Ao7HmJYOGS4ahScOSxHS/q9tG/jx7CM3dElXLpAen9FD4eA5CwG7sB0/lieR2VI0LTJfOEYoVlqz9nRyD4am7I9BGk5FobnXUyg++TFjZT4+PIX/dn7miG/I2WtxHaFwOolaOp1E9HjFhx0WqCrxFwVKU5jLggU8iccnf42aOPhaWUYBGJvNU5FoUyN7hpe0QjTR8adsziEihcltairMH5fTgIpTXnRbaMlg46F04WIJ0wL4JT7SVc8ig79k1c5nIwoyTa2ran4eyXp9ViAuBp7J3bepkM53QTOnUJMm0LzBXJY35Ub3jCyZw==", "X-Forefront-Antispam-Report": "CIP:216.228.112.34; CTRY:US; LANG:en; SCL:1;\n SRV:;\n IPV:NLI; SFV:NSPM; H:mail.nvidia.com; PTR:schybrid03.nvidia.com; CAT:NONE;\n SFS:(4636009)(46966006)(36840700001)(6286002)(30864003)(26005)(47076005)(36756003)(1076003)(8936002)(70206006)(316002)(2616005)(5660300002)(110136005)(336012)(508600001)(8676002)(7696005)(426003)(70586007)(4326008)(36860700001)(2906002)(82310400003)(54906003)(86362001)(83380400001)(55016002)(356005)(7636003)(107886003)(6666004)(186003)(16526019);\n DIR:OUT; SFP:1101;", "X-OriginatorOrg": "Nvidia.com", "X-MS-Exchange-CrossTenant-OriginalArrivalTime": "20 Oct 2021 07:32:18.7778 (UTC)", "X-MS-Exchange-CrossTenant-Network-Message-Id": "\n 8c3f9a42-3970-48e2-cc36-08d9939bbf61", "X-MS-Exchange-CrossTenant-Id": "43083d15-7273-40c1-b7db-39efd9ccc17a", "X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp": "\n TenantId=43083d15-7273-40c1-b7db-39efd9ccc17a; Ip=[216.228.112.34];\n Helo=[mail.nvidia.com]", "X-MS-Exchange-CrossTenant-AuthSource": "\n DM6NAM11FT008.eop-nam11.prod.protection.outlook.com", "X-MS-Exchange-CrossTenant-AuthAs": "Anonymous", "X-MS-Exchange-CrossTenant-FromEntityHeader": "HybridOnPrem", "X-MS-Exchange-Transport-CrossTenantHeadersStamped": "BN8PR12MB3217", "Subject": "[dpdk-dev] [PATCH v2 3/3] test/devargs: add devargs test cases", "X-BeenThere": "dev@dpdk.org", "X-Mailman-Version": "2.1.29", "Precedence": "list", "List-Id": "DPDK patches and discussions <dev.dpdk.org>", "List-Unsubscribe": "<https://mails.dpdk.org/options/dev>,\n <mailto:dev-request@dpdk.org?subject=unsubscribe>", "List-Archive": "<http://mails.dpdk.org/archives/dev/>", "List-Post": "<mailto:dev@dpdk.org>", "List-Help": "<mailto:dev-request@dpdk.org?subject=help>", "List-Subscribe": "<https://mails.dpdk.org/listinfo/dev>,\n <mailto:dev-request@dpdk.org?subject=subscribe>", "Errors-To": "dev-bounces@dpdk.org", "Sender": "\"dev\" <dev-bounces@dpdk.org>" }, "content": "Initial version to test Global devargs syntax.\n\nSigned-off-by: Xueming Li <xuemingl@nvidia.com>\n---\n app/test/autotest_data.py | 803 ++++++++++++++++++++++++++++++++++++++\n app/test/meson.build | 2 +\n app/test/test_devargs.c | 184 +++++++++\n 3 files changed, 989 insertions(+)\n create mode 100644 app/test/autotest_data.py\n create mode 100644 app/test/test_devargs.c", "diff": "diff --git a/app/test/autotest_data.py b/app/test/autotest_data.py\nnew file mode 100644\nindex 00000000000..3b841e71918\n--- /dev/null\n+++ b/app/test/autotest_data.py\n@@ -0,0 +1,803 @@\n+#!/usr/bin/env python3\n+# SPDX-License-Identifier: BSD-3-Clause\n+# Copyright(c) 2010-2014 Intel Corporation\n+\n+# Test data for autotests\n+\n+from autotest_test_funcs import *\n+\n+# groups of tests that can be run in parallel\n+# the grouping has been found largely empirically\n+parallel_test_list = [\n+ {\n+ \"Name\": \"Timer autotest\",\n+ \"Command\": \"timer_autotest\",\n+ \"Func\": timer_autotest,\n+ \"Report\": None,\n+ },\n+ {\n+ \"Name\": \"Debug autotest\",\n+ \"Command\": \"debug_autotest\",\n+ \"Func\": default_autotest,\n+ \"Report\": None,\n+ },\n+ {\n+ \"Name\": \"Errno autotest\",\n+ \"Command\": \"errno_autotest\",\n+ \"Func\": default_autotest,\n+ \"Report\": None,\n+ },\n+ {\n+ \"Name\": \"Meter autotest\",\n+ \"Command\": \"meter_autotest\",\n+ \"Func\": default_autotest,\n+ \"Report\": None,\n+ },\n+ {\n+ \"Name\": \"Common autotest\",\n+ \"Command\": \"common_autotest\",\n+ \"Func\": default_autotest,\n+ \"Report\": None,\n+ },\n+ {\n+ \"Name\": \"Resource autotest\",\n+ \"Command\": \"resource_autotest\",\n+ \"Func\": default_autotest,\n+ \"Report\": None,\n+ },\n+ {\n+ \"Name\": \"Memory autotest\",\n+ \"Command\": \"memory_autotest\",\n+ \"Func\": memory_autotest,\n+ \"Report\": None,\n+ },\n+ {\n+ \"Name\": \"Read/write lock autotest\",\n+ \"Command\": \"rwlock_autotest\",\n+ \"Func\": rwlock_autotest,\n+ \"Report\": None,\n+ },\n+ {\n+ \"Name\": \"Lcores autotest\",\n+ \"Command\": \"lcores_autotest\",\n+ \"Func\": default_autotest,\n+ \"Report\": None,\n+ },\n+ {\n+ \"Name\": \"Logs autotest\",\n+ \"Command\": \"logs_autotest\",\n+ \"Func\": logs_autotest,\n+ \"Report\": None,\n+ },\n+ {\n+ \"Name\": \"CPU flags autotest\",\n+ \"Command\": \"cpuflags_autotest\",\n+ \"Func\": default_autotest,\n+ \"Report\": None,\n+ },\n+ {\n+ \"Name\": \"Version autotest\",\n+ \"Command\": \"version_autotest\",\n+ \"Func\": default_autotest,\n+ \"Report\": None,\n+ },\n+ {\n+ \"Name\": \"EAL filesystem autotest\",\n+ \"Command\": \"eal_fs_autotest\",\n+ \"Func\": default_autotest,\n+ \"Report\": None,\n+ },\n+ {\n+ \"Name\": \"EAL flags autotest\",\n+ \"Command\": \"eal_flags_autotest\",\n+ \"Func\": default_autotest,\n+ \"Report\": None,\n+ },\n+ {\n+ \"Name\": \"Hash autotest\",\n+ \"Command\": \"hash_autotest\",\n+ \"Func\": default_autotest,\n+ \"Report\": None,\n+ },\n+ {\n+ \"Name\": \"LPM autotest\",\n+ \"Command\": \"lpm_autotest\",\n+ \"Func\": default_autotest,\n+ \"Report\": None,\n+ },\n+ {\n+ \"Name\": \"LPM6 autotest\",\n+ \"Command\": \"lpm6_autotest\",\n+ \"Func\": default_autotest,\n+ \"Report\": None,\n+ },\n+ {\n+ \"Name\": \"RIB autotest\",\n+ \"Command\": \"rib_autotest\",\n+ \"Func\": default_autotest,\n+ \"Report\": None,\n+ },\n+ {\n+ \"Name\": \"RIB slow autotest\",\n+ \"Command\": \"rib_slow_autotest\",\n+ \"Func\": default_autotest,\n+ \"Report\": None,\n+ },\n+ {\n+ \"Name\": \"RIB6 autotest\",\n+ \"Command\": \"rib6_autotest\",\n+ \"Func\": default_autotest,\n+ \"Report\": None,\n+ },\n+ {\n+ \"Name\": \"RIB6 slow autotest\",\n+ \"Command\": \"rib6_slow_autotest\",\n+ \"Func\": default_autotest,\n+ \"Report\": None,\n+ },\n+ {\n+ \"Name\": \"FIB autotest\",\n+ \"Command\": \"fib_autotest\",\n+ \"Func\": default_autotest,\n+ \"Report\": None,\n+ },\n+ {\n+ \"Name\": \"FIB slow autotest\",\n+ \"Command\": \"fib_slow_autotest\",\n+ \"Func\": default_autotest,\n+ \"Report\": None,\n+ },\n+ {\n+ \"Name\": \"FIB6 autotest\",\n+ \"Command\": \"fib6_autotest\",\n+ \"Func\": default_autotest,\n+ \"Report\": None,\n+ },\n+ {\n+ \"Name\": \"FIB6 slow autotest\",\n+ \"Command\": \"fib6_slow_autotest\",\n+ \"Func\": default_autotest,\n+ \"Report\": None,\n+ },\n+ {\n+ \"Name\": \"Memcpy autotest\",\n+ \"Command\": \"memcpy_autotest\",\n+ \"Func\": default_autotest,\n+ \"Report\": None,\n+ },\n+ {\n+ \"Name\": \"Memzone autotest\",\n+ \"Command\": \"memzone_autotest\",\n+ \"Func\": default_autotest,\n+ \"Report\": None,\n+ },\n+ {\n+ \"Name\": \"String autotest\",\n+ \"Command\": \"string_autotest\",\n+ \"Func\": default_autotest,\n+ \"Report\": None,\n+ },\n+ {\n+ \"Name\": \"Malloc autotest\",\n+ \"Command\": \"malloc_autotest\",\n+ \"Func\": default_autotest,\n+ \"Report\": None,\n+ },\n+ {\n+ \"Name\": \"Multi-process autotest\",\n+ \"Command\": \"multiprocess_autotest\",\n+ \"Func\": default_autotest,\n+ \"Report\": None,\n+ },\n+ {\n+ \"Name\": \"Mbuf autotest\",\n+ \"Command\": \"mbuf_autotest\",\n+ \"Func\": default_autotest,\n+ \"Report\": None,\n+ },\n+ {\n+ \"Name\": \"Per-lcore autotest\",\n+ \"Command\": \"per_lcore_autotest\",\n+ \"Func\": default_autotest,\n+ \"Report\": None,\n+ },\n+ {\n+ \"Name\": \"Ring autotest\",\n+ \"Command\": \"ring_autotest\",\n+ \"Func\": default_autotest,\n+ \"Report\": None,\n+ },\n+ {\n+ \"Name\": \"Spinlock autotest\",\n+ \"Command\": \"spinlock_autotest\",\n+ \"Func\": spinlock_autotest,\n+ \"Report\": None,\n+ },\n+ {\n+ \"Name\": \"Ticketlock autotest\",\n+ \"Command\": \"ticketlock_autotest\",\n+ \"Func\": ticketlock_autotest,\n+ \"Report\": None,\n+ },\n+ {\n+ \"Name\": \"MCSlock autotest\",\n+ \"Command\": \"mcslock_autotest\",\n+ \"Func\": mcslock_autotest,\n+ \"Report\": None,\n+ },\n+ {\n+ \"Name\": \"Byte order autotest\",\n+ \"Command\": \"byteorder_autotest\",\n+ \"Func\": default_autotest,\n+ \"Report\": None,\n+ },\n+ {\n+ \"Name\": \"TAILQ autotest\",\n+ \"Command\": \"tailq_autotest\",\n+ \"Func\": default_autotest,\n+ \"Report\": None,\n+ },\n+ {\n+ \"Name\": \"Command-line autotest\",\n+ \"Command\": \"cmdline_autotest\",\n+ \"Func\": default_autotest,\n+ \"Report\": None,\n+ },\n+ {\n+ \"Name\": \"Interrupts autotest\",\n+ \"Command\": \"interrupt_autotest\",\n+ \"Func\": default_autotest,\n+ \"Report\": None,\n+ },\n+ {\n+ \"Name\": \"Function reentrancy autotest\",\n+ \"Command\": \"func_reentrancy_autotest\",\n+ \"Func\": default_autotest,\n+ \"Report\": None,\n+ },\n+ {\n+ \"Name\": \"Mempool autotest\",\n+ \"Command\": \"mempool_autotest\",\n+ \"Func\": default_autotest,\n+ \"Report\": None,\n+ },\n+ {\n+ \"Name\": \"Atomics autotest\",\n+ \"Command\": \"atomic_autotest\",\n+ \"Func\": default_autotest,\n+ \"Report\": None,\n+ },\n+ {\n+ \"Name\": \"Prefetch autotest\",\n+ \"Command\": \"prefetch_autotest\",\n+ \"Func\": default_autotest,\n+ \"Report\": None,\n+ },\n+ {\n+ \"Name\": \"Red autotest\",\n+ \"Command\": \"red_autotest\",\n+ \"Func\": default_autotest,\n+ \"Report\": None,\n+ },\n+ {\n+ \"Name\": \"PMD ring autotest\",\n+ \"Command\": \"ring_pmd_autotest\",\n+ \"Func\": default_autotest,\n+ \"Report\": None,\n+ },\n+ {\n+ \"Name\": \"Access list control autotest\",\n+ \"Command\": \"acl_autotest\",\n+ \"Func\": default_autotest,\n+ \"Report\": None,\n+ },\n+ {\n+ \"Name\": \"Sched autotest\",\n+ \"Command\": \"sched_autotest\",\n+ \"Func\": default_autotest,\n+ \"Report\": None,\n+ },\n+ {\n+ \"Name\": \"Eventdev selftest octeontx\",\n+ \"Command\": \"eventdev_selftest_octeontx\",\n+ \"Func\": default_autotest,\n+ \"Report\": None,\n+ },\n+ {\n+ \"Name\": \"Event ring autotest\",\n+ \"Command\": \"event_ring_autotest\",\n+ \"Func\": default_autotest,\n+ \"Report\": None,\n+ },\n+ {\n+ \"Name\": \"Table autotest\",\n+ \"Command\": \"table_autotest\",\n+ \"Func\": default_autotest,\n+ \"Report\": None,\n+ },\n+ {\n+ \"Name\": \"Flow classify autotest\",\n+ \"Command\": \"flow_classify_autotest\",\n+ \"Func\": default_autotest,\n+ \"Report\": None,\n+ },\n+ {\n+ \"Name\": \"Event eth rx adapter autotest\",\n+ \"Command\": \"event_eth_rx_adapter_autotest\",\n+ \"Func\": default_autotest,\n+ \"Report\": None,\n+ },\n+ {\n+ \"Name\": \"User delay\",\n+ \"Command\": \"user_delay_us\",\n+ \"Func\": default_autotest,\n+ \"Report\": None,\n+ },\n+ {\n+ \"Name\": \"Rawdev autotest\",\n+ \"Command\": \"rawdev_autotest\",\n+ \"Func\": default_autotest,\n+ \"Report\": None,\n+ },\n+ {\n+ \"Name\": \"Kvargs autotest\",\n+ \"Command\": \"kvargs_autotest\",\n+ \"Func\": default_autotest,\n+ \"Report\": None,\n+ },\n+ {\n+ \"Name\": \"Link bonding autotest\",\n+ \"Command\": \"link_bonding_autotest\",\n+ \"Func\": default_autotest,\n+ \"Report\": None,\n+ },\n+ {\n+ \"Name\": \"Link bonding mode4 autotest\",\n+ \"Command\": \"link_bonding_mode4_autotest\",\n+ \"Func\": default_autotest,\n+ \"Report\": None,\n+ },\n+ {\n+ \"Name\": \"Link bonding rssconf autotest\",\n+ \"Command\": \"link_bonding_rssconf_autotest\",\n+ \"Func\": default_autotest,\n+ \"Report\": None,\n+ },\n+ {\n+ \"Name\": \"Crc autotest\",\n+ \"Command\": \"crc_autotest\",\n+ \"Func\": default_autotest,\n+ \"Report\": None,\n+ },\n+ {\n+ \"Name\": \"Distributor autotest\",\n+ \"Command\": \"distributor_autotest\",\n+ \"Func\": default_autotest,\n+ \"Report\": None,\n+ },\n+ {\n+ \"Name\": \"Reorder autotest\",\n+ \"Command\": \"reorder_autotest\",\n+ \"Func\": default_autotest,\n+ \"Report\": None,\n+ },\n+ {\n+ \"Name\": \"Barrier autotest\",\n+ \"Command\": \"barrier_autotest\",\n+ \"Func\": default_autotest,\n+ \"Report\": None,\n+ },\n+ {\n+ \"Name\": \"Bitmap test\",\n+ \"Command\": \"bitmap_test\",\n+ \"Func\": default_autotest,\n+ \"Report\": None,\n+ },\n+ {\n+ \"Name\": \"Bitops test\",\n+ \"Command\": \"bitops_autotest\",\n+ \"Func\": default_autotest,\n+ \"Report\": None,\n+ },\n+ {\n+ \"Name\": \"Hash multiwriter autotest\",\n+ \"Command\": \"hash_multiwriter_autotest\",\n+ \"Func\": default_autotest,\n+ \"Report\": None,\n+ },\n+ {\n+ \"Name\": \"Service autotest\",\n+ \"Command\": \"service_autotest\",\n+ \"Func\": default_autotest,\n+ \"Report\": None,\n+ },\n+ {\n+ \"Name\": \"Timer racecond autotest\",\n+ \"Command\": \"timer_racecond_autotest\",\n+ \"Func\": default_autotest,\n+ \"Report\": None,\n+ },\n+ {\n+ \"Name\": \"Member autotest\",\n+ \"Command\": \"member_autotest\",\n+ \"Func\": default_autotest,\n+ \"Report\": None,\n+ },\n+ {\n+ \"Name\": \"Efd_autotest\",\n+ \"Command\": \"efd_autotest\",\n+ \"Func\": default_autotest,\n+ \"Report\": None,\n+ },\n+ {\n+ \"Name\": \"Thash autotest\",\n+ \"Command\": \"thash_autotest\",\n+ \"Func\": default_autotest,\n+ \"Report\": None,\n+ },\n+ {\n+ \"Name\": \"Hash function autotest\",\n+ \"Command\": \"hash_functions_autotest\",\n+ \"Func\": default_autotest,\n+ \"Report\": None,\n+ },\n+ {\n+ \"Name\": \"Cryptodev sw mvsam autotest\",\n+ \"Command\": \"cryptodev_sw_mvsam_autotest\",\n+ \"Func\": default_autotest,\n+ \"Report\": None,\n+ },\n+ {\n+ \"Name\": \"Cryptodev dpaa2 sec autotest\",\n+ \"Command\": \"cryptodev_dpaa2_sec_autotest\",\n+ \"Func\": default_autotest,\n+ \"Report\": None,\n+ },\n+ {\n+ \"Name\": \"Cryptodev dpaa sec autotest\",\n+ \"Command\": \"cryptodev_dpaa_sec_autotest\",\n+ \"Func\": default_autotest,\n+ \"Report\": None,\n+ },\n+ {\n+ \"Name\": \"Cryptodev qat autotest\",\n+ \"Command\": \"cryptodev_qat_autotest\",\n+ \"Func\": default_autotest,\n+ \"Report\": None,\n+ },\n+ {\n+ \"Name\": \"Cryptodev aesni mb autotest\",\n+ \"Command\": \"cryptodev_aesni_mb_autotest\",\n+ \"Func\": default_autotest,\n+ \"Report\": None,\n+ },\n+ {\n+ \"Name\": \"Cryptodev openssl autotest\",\n+ \"Command\": \"cryptodev_openssl_autotest\",\n+ \"Func\": default_autotest,\n+ \"Report\": None,\n+ },\n+ {\n+ \"Name\": \"Cryptodev scheduler autotest\",\n+ \"Command\": \"cryptodev_scheduler_autotest\",\n+ \"Func\": default_autotest,\n+ \"Report\": None,\n+ },\n+ {\n+ \"Name\": \"Cryptodev aesni gcm autotest\",\n+ \"Command\": \"cryptodev_aesni_gcm_autotest\",\n+ \"Func\": default_autotest,\n+ \"Report\": None,\n+ },\n+ {\n+ \"Name\": \"Cryptodev null autotest\",\n+ \"Command\": \"cryptodev_null_autotest\",\n+ \"Func\": default_autotest,\n+ \"Report\": None,\n+ },\n+ {\n+ \"Name\": \"Cryptodev sw snow3g autotest\",\n+ \"Command\": \"cryptodev_sw_snow3g_autotest\",\n+ \"Func\": default_autotest,\n+ \"Report\": None,\n+ },\n+ {\n+ \"Name\": \"Cryptodev sw kasumi autotest\",\n+ \"Command\": \"cryptodev_sw_kasumi_autotest\",\n+ \"Func\": default_autotest,\n+ \"Report\": None,\n+ },\n+ {\n+ \"Name\": \"Cryptodev_sw_zuc_autotest\",\n+ \"Command\": \"cryptodev_sw_zuc_autotest\",\n+ \"Func\": default_autotest,\n+ \"Report\": None,\n+ },\n+ {\n+ \"Name\": \"Reciprocal division\",\n+ \"Command\": \"reciprocal_division\",\n+ \"Func\": default_autotest,\n+ \"Report\": None,\n+ },\n+ {\n+ \"Name\": \"Red all\",\n+ \"Command\": \"red_all\",\n+ \"Func\": default_autotest,\n+ \"Report\": None,\n+ },\n+ {\n+\t\"Name\": \"Fbarray autotest\",\n+\t\"Command\": \"fbarray_autotest\",\n+\t\"Func\": default_autotest,\n+\t\"Report\": None,\n+ },\n+ {\n+\t\"Name\": \"External memory autotest\",\n+\t\"Command\": \"external_mem_autotest\",\n+\t\"Func\": default_autotest,\n+\t\"Report\": None,\n+ },\n+ {\n+ \"Name\": \"Metrics autotest\",\n+ \"Command\": \"metrics_autotest\",\n+ \"Func\": default_autotest,\n+ \"Report\": None,\n+ },\n+ {\n+ \"Name\": \"Bitratestats autotest\",\n+ \"Command\": \"bitratestats_autotest\",\n+ \"Func\": default_autotest,\n+ \"Report\": None,\n+ },\n+ {\n+ \"Name\": \"Latencystats autotest\",\n+ \"Command\": \"latencystats_autotest\",\n+ \"Func\": default_autotest,\n+ \"Report\": None,\n+ },\n+ {\n+ \"Name\": \"Pdump autotest\",\n+ \"Command\": \"pdump_autotest\",\n+ \"Func\": default_autotest,\n+ \"Report\": None,\n+ },\n+ {\n+ \"Name\": \"IPsec_SAD\",\n+ \"Command\": \"ipsec_sad_autotest\",\n+ \"Func\": default_autotest,\n+ \"Report\": None,\n+ },\n+ {\n+ \"Name\": \"Checksum autotest\",\n+ \"Command\": \"cksum_autotest\",\n+ \"Func\": default_autotest,\n+ \"Report\": None,\n+ },\n+ #\n+ #Please always keep all dump tests at the end and together!\n+ #\n+ {\n+ \"Name\": \"Dump physmem\",\n+ \"Command\": \"dump_physmem\",\n+ \"Func\": dump_autotest,\n+ \"Report\": None,\n+ },\n+ {\n+ \"Name\": \"Dump memzone\",\n+ \"Command\": \"dump_memzone\",\n+ \"Func\": dump_autotest,\n+ \"Report\": None,\n+ },\n+ {\n+ \"Name\": \"Dump struct sizes\",\n+ \"Command\": \"dump_struct_sizes\",\n+ \"Func\": dump_autotest,\n+ \"Report\": None,\n+ },\n+ {\n+ \"Name\": \"Dump mempool\",\n+ \"Command\": \"dump_mempool\",\n+ \"Func\": dump_autotest,\n+ \"Report\": None,\n+ },\n+ {\n+ \"Name\": \"Dump malloc stats\",\n+ \"Command\": \"dump_malloc_stats\",\n+ \"Func\": dump_autotest,\n+ \"Report\": None,\n+ },\n+ {\n+ \"Name\": \"Dump devargs\",\n+ \"Command\": \"dump_devargs\",\n+ \"Func\": dump_autotest,\n+ \"Report\": None,\n+ },\n+ {\n+ \"Name\": \"Dump log types\",\n+ \"Command\": \"dump_log_types\",\n+ \"Func\": dump_autotest,\n+ \"Report\": None,\n+ },\n+ {\n+ \"Name\": \"Dump_ring\",\n+ \"Command\": \"dump_ring\",\n+ \"Func\": dump_autotest,\n+ \"Report\": None,\n+ },\n+]\n+\n+# tests that should not be run when any other tests are running\n+non_parallel_test_list = [\n+ {\n+ \"Name\": \"Eventdev common autotest\",\n+ \"Command\": \"eventdev_common_autotest\",\n+ \"Func\": default_autotest,\n+ \"Report\": None,\n+ },\n+ {\n+ \"Name\": \"Eventdev selftest sw\",\n+ \"Command\": \"eventdev_selftest_sw\",\n+ \"Func\": default_autotest,\n+ \"Report\": None,\n+ },\n+ {\n+ \"Name\": \"KNI autotest\",\n+ \"Command\": \"kni_autotest\",\n+ \"Func\": default_autotest,\n+ \"Report\": None,\n+ },\n+ {\n+ \"Name\": \"Mempool performance autotest\",\n+ \"Command\": \"mempool_perf_autotest\",\n+ \"Func\": default_autotest,\n+ \"Report\": None,\n+ },\n+ {\n+ \"Name\": \"Memcpy performance autotest\",\n+ \"Command\": \"memcpy_perf_autotest\",\n+ \"Func\": default_autotest,\n+ \"Report\": None,\n+ },\n+ {\n+ \"Name\": \"Hash performance autotest\",\n+ \"Command\": \"hash_perf_autotest\",\n+ \"Func\": default_autotest,\n+ \"Report\": None,\n+ },\n+ {\n+ \"Name\": \"Hash read-write concurrency functional autotest\",\n+ \"Command\": \"hash_readwrite_func_autotest\",\n+ \"Func\": default_autotest,\n+ \"Report\": None,\n+ },\n+ {\n+ \"Name\": \"Hash read-write concurrency perf autotest\",\n+ \"Command\": \"hash_readwrite_perf_autotest\",\n+ \"Func\": default_autotest,\n+ \"Report\": None,\n+ },\n+ {\n+ \"Name\": \"Hash read-write lock-free concurrency perf autotest\",\n+ \"Command\": \"hash_readwrite_lf_perf_autotest\",\n+ \"Func\": default_autotest,\n+ \"Report\": None,\n+ },\n+ {\n+ \"Name\": \"Power autotest\",\n+ \"Command\": \"power_autotest\",\n+ \"Func\": default_autotest,\n+ \"Report\": None,\n+ },\n+ {\n+ \"Name\": \"Power cpufreq autotest\",\n+ \"Command\": \"power_cpufreq_autotest\",\n+ \"Func\": default_autotest,\n+ \"Report\": None,\n+ },\n+ {\n+ \"Name\": \"Power KVM VM autotest\",\n+ \"Command\": \"power_kvm_vm_autotest\",\n+ \"Func\": default_autotest,\n+ \"Report\": None,\n+ },\n+ {\n+ \"Name\": \"Timer performance autotest\",\n+ \"Command\": \"timer_perf_autotest\",\n+ \"Func\": default_autotest,\n+ \"Report\": None,\n+ },\n+ {\n+\n+ \"Name\": \"Pmd perf autotest\",\n+ \"Command\": \"pmd_perf_autotest\",\n+ \"Func\": default_autotest,\n+ \"Report\": None,\n+ },\n+ {\n+ \"Name\": \"Ring pmd perf autotest\",\n+ \"Command\": \"ring_pmd_perf_autotest\",\n+ \"Func\": default_autotest,\n+ \"Report\": None,\n+ },\n+ {\n+ \"Name\": \"Distributor perf autotest\",\n+ \"Command\": \"distributor_perf_autotest\",\n+ \"Func\": default_autotest,\n+ \"Report\": None,\n+ },\n+ {\n+ \"Name\": \"Red_perf\",\n+ \"Command\": \"red_perf\",\n+ \"Func\": default_autotest,\n+ \"Report\": None,\n+ },\n+ {\n+ \"Name\": \"Lpm6 perf autotest\",\n+ \"Command\": \"lpm6_perf_autotest\",\n+ \"Func\": default_autotest,\n+ \"Report\": None,\n+ },\n+ {\n+ \"Name\": \"Lpm perf autotest\",\n+ \"Command\": \"lpm_perf_autotest\",\n+ \"Func\": default_autotest,\n+ \"Report\": None,\n+ },\n+ {\n+ \"Name\": \"FIB perf autotest\",\n+ \"Command\": \"fib_perf_autotest\",\n+ \"Func\": default_autotest,\n+ \"Report\": None,\n+ },\n+ {\n+ \"Name\": \"FIB6 perf autotest\",\n+ \"Command\": \"fib6_perf_autotest\",\n+ \"Func\": default_autotest,\n+ \"Report\": None,\n+ },\n+ {\n+ \"Name\": \"Efd perf autotest\",\n+ \"Command\": \"efd_perf_autotest\",\n+ \"Func\": default_autotest,\n+ \"Report\": None,\n+ },\n+ {\n+ \"Name\": \"Member perf autotest\",\n+ \"Command\": \"member_perf_autotest\",\n+ \"Func\": default_autotest,\n+ \"Report\": None,\n+ },\n+ {\n+ \"Name\": \"Reciprocal division perf\",\n+ \"Command\": \"reciprocal_division_perf\",\n+ \"Func\": default_autotest,\n+ \"Report\": None,\n+ },\n+ {\n+ \"Name\": \"RCU QSBR autotest\",\n+ \"Command\": \"rcu_qsbr_autotest\",\n+ \"Func\": default_autotest,\n+ \"Report\": None,\n+ },\n+ {\n+ \"Name\": \"RCU QSBR performance autotest\",\n+ \"Command\": \"rcu_qsbr_perf_autotest\",\n+ \"Func\": default_autotest,\n+ \"Report\": None,\n+ },\n+ {\n+ \"Name\": \"Devargs autotest\",\n+ \"Command\": \"devargs_autotest\",\n+ \"Func\": default_autotest,\n+ \"Report\": None,\n+ },\n+ #\n+ # Please always make sure that ring_perf is the last test!\n+ #\n+ {\n+ \"Name\": \"Ring performance autotest\",\n+ \"Command\": \"ring_perf_autotest\",\n+ \"Func\": default_autotest,\n+ \"Report\": None,\n+ },\n+]\ndiff --git a/app/test/meson.build b/app/test/meson.build\nindex a16374b7a10..842388b0d32 100644\n--- a/app/test/meson.build\n+++ b/app/test/meson.build\n@@ -42,6 +42,7 @@ test_sources = files(\n 'test_cryptodev_security_pdcp.c',\n 'test_cycles.c',\n 'test_debug.c',\n+ 'test_devargs.c',\n 'test_distributor.c',\n 'test_distributor_perf.c',\n 'test_dmadev.c',\n@@ -204,6 +205,7 @@ fast_tests = [\n ['common_autotest', true],\n ['cpuflags_autotest', true],\n ['debug_autotest', true],\n+ ['devargs_autotest', true],\n ['eal_flags_c_opt_autotest', false],\n ['eal_flags_main_opt_autotest', false],\n ['eal_flags_n_opt_autotest', false],\ndiff --git a/app/test/test_devargs.c b/app/test/test_devargs.c\nnew file mode 100644\nindex 00000000000..13e95f052b0\n--- /dev/null\n+++ b/app/test/test_devargs.c\n@@ -0,0 +1,184 @@\n+/* SPDX-License-Identifier: BSD-3-Clause\n+ * Copyright (c) 2021 NVIDIA Corporation & Affiliates\n+ */\n+\n+#include <stdlib.h>\n+#include <stdio.h>\n+#include <string.h>\n+\n+#include <rte_common.h>\n+#include <rte_devargs.h>\n+#include <rte_kvargs.h>\n+#include <rte_bus.h>\n+#include <rte_class.h>\n+\n+#include \"test.h\"\n+\n+/* Check layer arguments. */\n+static int\n+test_args(const char *devargs, const char *layer, const char *args, const int n)\n+{\n+\tstruct rte_kvargs *kvlist;\n+\n+\tif (n == 0) {\n+\t\tif (args != NULL && strlen(args) > 0) {\n+\t\t\tprintf(\"rte_devargs_parse(%s) %s args parsed (not expected)\\n\",\n+\t\t\t devargs, layer);\n+\t\t\treturn -1;\n+\t\t} else {\n+\t\t\treturn 0;\n+\t\t}\n+\t}\n+\tif (args == NULL) {\n+\t\tprintf(\"rte_devargs_parse(%s) %s args not parsed\\n\",\n+\t\t devargs, layer);\n+\t\treturn -1;\n+\t}\n+\tkvlist = rte_kvargs_parse(args, NULL);\n+\tif (kvlist == NULL) {\n+\t\tprintf(\"rte_devargs_parse(%s) %s_str: %s not parsed\\n\",\n+\t\t devargs, layer, args);\n+\t\treturn -1;\n+\t}\n+\tif ((int)kvlist->count != n) {\n+\t\tprintf(\"rte_devargs_parse(%s) %s_str: %s kv number %u, not %d\\n\",\n+\t\t devargs, layer, args, kvlist->count, n);\n+\t\treturn -1;\n+\t}\n+\treturn 0;\n+}\n+\n+/* Test several valid cases */\n+static int\n+test_valid_devargs(void)\n+{\n+\tstatic const struct {\n+\t\tconst char *devargs;\n+\t\tint bus_kv;\n+\t\tint class_kv;\n+\t\tint driver_kv;\n+\t\tconst char *bus;\n+\t\tconst char *name;\n+\t\tconst char *class;\n+\t} list[] = {\n+\t\t/* Global devargs syntax: */\n+\t\t{ \"bus=pci\",\n+\t\t 1, 0, 0, \"pci\", NULL, NULL},\n+\t\t{ \"class=eth\",\n+\t\t 0, 1, 0, NULL, NULL, \"eth\" },\n+\t\t{ \"bus=pci,addr=1:2.3/class=eth/driver=abc,k0=v0\",\n+\t\t 2, 1, 2, \"pci\", \"0000:01:02.3\", \"eth\" },\n+\t\t{ \"bus=vdev,name=/dev/file/name/class=eth\",\n+\t\t 2, 1, 0, \"vdev\", \"/dev/file/name\", \"eth\" },\n+\t\t{ \"bus=vdev,name=/class/bus/path/class=eth\",\n+\t\t 2, 1, 0, \"vdev\", \"/class/bus/path\", \"eth\" },\n+\t\t{ \"bus=vdev,name=///dblslsh/class=eth\",\n+\t\t 2, 1, 0, \"vdev\", \"///dblslsh\", \"eth\" },\n+\t\t/* Legacy devargs syntax: */\n+\t\t{ \"1:2.3\", 0, 0, 0,\n+\t\t \"pci\", \"1:2.3\", NULL },\n+\t\t{ \"pci:1:2.3,k0=v0\",\n+\t\t 0, 0, 1, \"pci\", \"1:2.3\", NULL },\n+\t\t{ \"net_virtio_user0,iface=test,path=/dev/vhost-net,queues=1\",\n+\t\t 0, 0, 3, \"vdev\", \"net_virtio_user0\", NULL },\n+\t\t{ \"net_virtio_user0,iface=test,path=/class/bus/,queues=1\",\n+\t\t 0, 0, 3, \"vdev\", \"net_virtio_user0\", NULL },\n+\t};\n+\tstruct rte_devargs da;\n+\tuint32_t i;\n+\tint ret;\n+\tint fail = 0;\n+\n+\tfor (i = 0; i < RTE_DIM(list); i++) {\n+\t\tmemset(&da, 0, sizeof(da));\n+\t\tret = rte_devargs_parse(&da, list[i].devargs);\n+\t\tif (ret < 0) {\n+\t\t\tprintf(\"rte_devargs_parse(%s) returned %d (but should not)\\n\",\n+\t\t\t list[i].devargs, ret);\n+\t\t\tgoto fail;\n+\t\t}\n+\t\tif ((list[i].bus_kv > 0 || list[i].bus != NULL) &&\n+\t\t da.bus == NULL) {\n+\t\t\tprintf(\"rte_devargs_parse(%s) bus not parsed\\n\",\n+\t\t\t list[i].devargs);\n+\t\t\tgoto fail;\n+\t\t}\n+\t\tif (test_args(list[i].devargs, \"bus\", da.bus_str,\n+\t\t\t list[i].bus_kv) != 0)\n+\t\t\tgoto fail;\n+\t\tif (list[i].bus != NULL &&\n+\t\t strcmp(da.bus->name, list[i].bus) != 0) {\n+\t\t\tprintf(\"rte_devargs_parse(%s) bus name (%s) not expected (%s)\\n\",\n+\t\t\t list[i].devargs, da.bus->name, list[i].bus);\n+\t\t\tgoto fail;\n+\t\t}\n+\t\tif ((list[i].class_kv > 0 || list[i].class != NULL) &&\n+\t\t da.cls == NULL) {\n+\t\t\tprintf(\"rte_devargs_parse(%s) class not parsed\\n\",\n+\t\t\t list[i].devargs);\n+\t\t\tgoto fail;\n+\t\t}\n+\t\tif (test_args(list[i].devargs, \"class\", da.cls_str,\n+\t\t\t list[i].class_kv) != 0)\n+\t\t\tgoto fail;\n+\t\tif (list[i].class != NULL &&\n+\t\t strcmp(da.cls->name, list[i].class) != 0) {\n+\t\t\tprintf(\"rte_devargs_parse(%s) class name (%s) not expected (%s)\\n\",\n+\t\t\t list[i].devargs, da.cls->name, list[i].class);\n+\t\t\tgoto fail;\n+\t\t}\n+\t\tif (test_args(list[i].devargs, \"driver\", da.drv_str,\n+\t\t\t list[i].driver_kv) != 0)\n+\t\t\tgoto fail;\n+\t\tif (list[i].name != NULL &&\n+\t\t strcmp(da.name, list[i].name) != 0) {\n+\t\t\tprintf(\"rte_devargs_parse(%s) device name (%s) not expected (%s)\\n\",\n+\t\t\t list[i].devargs, da.name, list[i].name);\n+\t\t\tgoto fail;\n+\t\t}\n+\t\tgoto cleanup;\n+fail:\n+\t\tfail = -1;\n+cleanup:\n+\t\trte_devargs_reset(&da);\n+\t}\n+\treturn fail;\n+}\n+\n+/* Test several invalid cases */\n+static int\n+test_invalid_devargs(void)\n+{\n+\tstatic const char * const list[] = {\n+\t\t\"bus=wrong-bus\",\n+\t\t\"class=wrong-class\"};\n+\tstruct rte_devargs da;\n+\tuint32_t i;\n+\tint ret;\n+\tint fail = 0;\n+\n+\tfor (i = 0; i < RTE_DIM(list); i++) {\n+\t\tret = rte_devargs_parse(&da, list[i]);\n+\t\tif (ret >= 0) {\n+\t\t\tprintf(\"rte_devargs_parse(%s) returned %d (but should not)\\n\",\n+\t\t\t list[i], ret);\n+\t\t\tfail = ret;\n+\t\t}\n+\t\trte_devargs_reset(&da);\n+\t}\n+\treturn fail;\n+}\n+\n+static int\n+test_devargs(void)\n+{\n+\tprintf(\"== test valid case ==\\n\");\n+\tif (test_valid_devargs() < 0)\n+\t\treturn -1;\n+\tprintf(\"== test invalid case ==\\n\");\n+\tif (test_invalid_devargs() < 0)\n+\t\treturn -1;\n+\treturn 0;\n+}\n+\n+REGISTER_TEST_COMMAND(devargs_autotest, test_devargs);\n", "prefixes": [ "v2", "3/3" ] }{ "id": 102345, "url": "