get:
Show a patch.

patch:
Update a patch.

put:
Update a patch.

GET /api/patches/81125/?format=api
HTTP 200 OK
Allow: GET, PUT, PATCH, HEAD, OPTIONS
Content-Type: application/json
Vary: Accept

{
    "id": 81125,
    "url": "http://patches.dpdk.org/api/patches/81125/?format=api",
    "web_url": "http://patches.dpdk.org/project/dpdk/patch/20201016142742.87297-2-ciara.power@intel.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": "<20201016142742.87297-2-ciara.power@intel.com>",
    "list_archive_url": "https://inbox.dpdk.org/dev/20201016142742.87297-2-ciara.power@intel.com",
    "date": "2020-10-16T14:27:25",
    "name": "[v9,01/18] eal: add max SIMD bitwidth",
    "commit_ref": null,
    "pull_url": null,
    "state": "superseded",
    "archived": true,
    "hash": "46d0ac78bccb75c0d2b962859432f6fc47980844",
    "submitter": {
        "id": 978,
        "url": "http://patches.dpdk.org/api/people/978/?format=api",
        "name": "Power, Ciara",
        "email": "ciara.power@intel.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/20201016142742.87297-2-ciara.power@intel.com/mbox/",
    "series": [
        {
            "id": 13067,
            "url": "http://patches.dpdk.org/api/series/13067/?format=api",
            "web_url": "http://patches.dpdk.org/project/dpdk/list/?series=13067",
            "date": "2020-10-16T14:27:24",
            "name": "add max SIMD bitwidth to EAL",
            "version": 9,
            "mbox": "http://patches.dpdk.org/series/13067/mbox/"
        }
    ],
    "comments": "http://patches.dpdk.org/api/patches/81125/comments/",
    "check": "success",
    "checks": "http://patches.dpdk.org/api/patches/81125/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 dpdk.org (dpdk.org [92.243.14.124])\n\tby inbox.dpdk.org (Postfix) with ESMTP id 5934EA04DB;\n\tFri, 16 Oct 2020 16:28:17 +0200 (CEST)",
            "from [92.243.14.124] (localhost [127.0.0.1])\n\tby dpdk.org (Postfix) with ESMTP id 303BD1EF46;\n\tFri, 16 Oct 2020 16:27:54 +0200 (CEST)",
            "from mga11.intel.com (mga11.intel.com [192.55.52.93])\n by dpdk.org (Postfix) with ESMTP id B89EF1EF3C\n for <dev@dpdk.org>; Fri, 16 Oct 2020 16:27:51 +0200 (CEST)",
            "from fmsmga003.fm.intel.com ([10.253.24.29])\n by fmsmga102.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384;\n 16 Oct 2020 07:27:51 -0700",
            "from silpixa00400355.ir.intel.com (HELO\n silpixa00400355.ger.corp.intel.com) ([10.237.222.239])\n by FMSMGA003.fm.intel.com with ESMTP; 16 Oct 2020 07:27:47 -0700"
        ],
        "IronPort-SDR": [
            "\n wOfOeH1Cjw+Mobrmti/7cGpWgO97JjujiP6enXz/bl6dd94d1JsHtBUSvi9c/aQouT2xhopKZG\n ghC7SWBNJaOQ==",
            "\n dppi5Ex7CAR/7Vml9O843R08maRyiDdsO4s1mT+leiVEHUrnv1oYLM0vSOwWlPVRJpDegsOkqv\n n2yOaDwOpAAw=="
        ],
        "X-IronPort-AV": [
            "E=McAfee;i=\"6000,8403,9775\"; a=\"163142966\"",
            "E=Sophos;i=\"5.77,383,1596524400\"; d=\"scan'208\";a=\"163142966\"",
            "E=Sophos;i=\"5.77,383,1596524400\"; d=\"scan'208\";a=\"357394959\""
        ],
        "X-Amp-Result": "SKIPPED(no attachment in message)",
        "X-Amp-File-Uploaded": "False",
        "X-ExtLoop1": "1",
        "From": "Ciara Power <ciara.power@intel.com>",
        "To": "dev@dpdk.org",
        "Cc": "viktorin@rehivetech.com, ruifeng.wang@arm.com, jerinj@marvell.com,\n drc@linux.vnet.ibm.com, bruce.richardson@intel.com,\n konstantin.ananyev@intel.com, david.marchand@redhat.com,\n Ciara Power <ciara.power@intel.com>,\n Honnappa Nagarahalli <honnappa.nagarahalli@arm.com>,\n Dmitry Kozlyuk <dmitry.kozliuk@gmail.com>,\n Narcisa Ana Maria Vasile <navasile@linux.microsoft.com>,\n Dmitry Malloy <dmitrym@microsoft.com>,\n Pallavi Kadam <pallavi.kadam@intel.com>, Ray Kinsella <mdr@ashroe.eu>,\n Neil Horman <nhorman@tuxdriver.com>",
        "Date": "Fri, 16 Oct 2020 15:27:25 +0100",
        "Message-Id": "<20201016142742.87297-2-ciara.power@intel.com>",
        "X-Mailer": "git-send-email 2.22.0",
        "In-Reply-To": "<20201016142742.87297-1-ciara.power@intel.com>",
        "References": "<20200807155859.63888-1-ciara.power@intel.com>\n <20201016142742.87297-1-ciara.power@intel.com>",
        "MIME-Version": "1.0",
        "Content-Transfer-Encoding": "8bit",
        "Subject": "[dpdk-dev] [PATCH v9 01/18] eal: add max SIMD bitwidth",
        "X-BeenThere": "dev@dpdk.org",
        "X-Mailman-Version": "2.1.15",
        "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": "This patch adds a max SIMD bitwidth EAL configuration. The API allows\nfor an app to set this value. It can also be set using EAL argument\n--force-max-simd-bitwidth, which will lock the value and override any\nmodifications made by the app.\n\nEach arch has a define for the default SIMD bitwidth value, this is used\non EAL init to set the config max SIMD bitwidth.\n\nCc: Ruifeng Wang <ruifeng.wang@arm.com>\nCc: Jerin Jacob <jerinj@marvell.com>\nCc: Honnappa Nagarahalli <honnappa.nagarahalli@arm.com>\nCc: David Christensen <drc@linux.vnet.ibm.com>\n\nSigned-off-by: Ciara Power <ciara.power@intel.com>\nAcked-by: Konstantin Ananyev <konstantin.ananyev@intel.com>\nReviewed-by: Ruifeng Wang <ruifeng.wang@arm.com>\n\n---\nv9: Added release note.\nv7: Reordered entries in the symbol .map file.\nv4:\n  - Used RTE_SIMD_MAX instead of UINT16_MAX.\n  - Renamed enums to better reflect usage.\n  - Added functions to windows symbol export file.\n  - Modified Doxygen comments.\n  - Modified enum name.\n  - Changed RTE_SIMD_MAX value to a power of 2.\n  - Merged patch 2 into this patch.\n  - Enum now used for default value defines.\n  - Fixed some small comments on v3.\nv3:\n  - Added enum value to essentially disable using max SIMD to choose\n    paths, intended for use by ARM SVE.\n  - Fixed parsing bitwidth argument to return an error for values\n    greater than uint16_t.\n  - Removed unnecessary define in generic rte_vect.h\n  - Changed default bitwidth for ARM to UINT16_MAX, to allow for SVE.\nv2:\n  - Added to Doxygen comment for API.\n  - Changed default bitwidth for Arm to 128.\n---\n doc/guides/rel_notes/release_20_11.rst     |  6 ++\n lib/librte_eal/arm/include/rte_vect.h      |  2 +\n lib/librte_eal/common/eal_common_options.c | 66 ++++++++++++++++++++++\n lib/librte_eal/common/eal_internal_cfg.h   |  8 +++\n lib/librte_eal/common/eal_options.h        |  2 +\n lib/librte_eal/include/rte_eal.h           | 40 +++++++++++++\n lib/librte_eal/ppc/include/rte_vect.h      |  2 +\n lib/librte_eal/rte_eal_exports.def         |  2 +\n lib/librte_eal/rte_eal_version.map         |  2 +\n lib/librte_eal/x86/include/rte_vect.h      |  2 +\n 10 files changed, 132 insertions(+)",
    "diff": "diff --git a/doc/guides/rel_notes/release_20_11.rst b/doc/guides/rel_notes/release_20_11.rst\nindex 48717ee536..4d2b949a6e 100644\n--- a/doc/guides/rel_notes/release_20_11.rst\n+++ b/doc/guides/rel_notes/release_20_11.rst\n@@ -77,6 +77,12 @@ New Features\n   This API is specific to x86 and implemented as a stub for other\n   architectures.\n \n+* **Added support for limiting maximum SIMD bitwidth.**\n+\n+  Added a new EAL config setting ``max_simd_bitwidth`` to limit the vector\n+  path selection at runtime. This value can be set by apps using the\n+  ``rte_set_max_simd_bitwidth`` function, or by the user with EAL flag ``--force-max-simd-bitwidth``.\n+\n * **Updated CRC modules of the net library.**\n \n   * Added runtime selection of the optimal architecture-specific CRC path.\ndiff --git a/lib/librte_eal/arm/include/rte_vect.h b/lib/librte_eal/arm/include/rte_vect.h\nindex f6a455b4e7..df8fb8b670 100644\n--- a/lib/librte_eal/arm/include/rte_vect.h\n+++ b/lib/librte_eal/arm/include/rte_vect.h\n@@ -14,6 +14,8 @@\n extern \"C\" {\n #endif\n \n+#define RTE_DEFAULT_SIMD_BITWIDTH RTE_SIMD_MAX\n+\n typedef int32x4_t xmm_t;\n \n #define\tXMM_SIZE\t(sizeof(xmm_t))\ndiff --git a/lib/librte_eal/common/eal_common_options.c b/lib/librte_eal/common/eal_common_options.c\nindex a5426e1234..8c79f1b2fc 100644\n--- a/lib/librte_eal/common/eal_common_options.c\n+++ b/lib/librte_eal/common/eal_common_options.c\n@@ -35,6 +35,7 @@\n #ifndef RTE_EXEC_ENV_WINDOWS\n #include <rte_telemetry.h>\n #endif\n+#include <rte_vect.h>\n \n #include \"eal_internal_cfg.h\"\n #include \"eal_options.h\"\n@@ -102,6 +103,7 @@ eal_long_options[] = {\n \t{OPT_MATCH_ALLOCATIONS, 0, NULL, OPT_MATCH_ALLOCATIONS_NUM},\n \t{OPT_TELEMETRY,         0, NULL, OPT_TELEMETRY_NUM        },\n \t{OPT_NO_TELEMETRY,      0, NULL, OPT_NO_TELEMETRY_NUM     },\n+\t{OPT_FORCE_MAX_SIMD_BITWIDTH, 1, NULL, OPT_FORCE_MAX_SIMD_BITWIDTH_NUM},\n \t{0,                     0, NULL, 0                        }\n };\n \n@@ -343,6 +345,8 @@ eal_reset_internal_config(struct internal_config *internal_cfg)\n \tinternal_cfg->user_mbuf_pool_ops_name = NULL;\n \tCPU_ZERO(&internal_cfg->ctrl_cpuset);\n \tinternal_cfg->init_complete = 0;\n+\tinternal_cfg->max_simd_bitwidth.bitwidth = RTE_DEFAULT_SIMD_BITWIDTH;\n+\tinternal_cfg->max_simd_bitwidth.forced = 0;\n }\n \n static int\n@@ -1309,6 +1313,34 @@ eal_parse_iova_mode(const char *name)\n \treturn 0;\n }\n \n+static int\n+eal_parse_simd_bitwidth(const char *arg)\n+{\n+\tchar *end;\n+\tunsigned long bitwidth;\n+\tint ret;\n+\tstruct internal_config *internal_conf =\n+\t\teal_get_internal_configuration();\n+\n+\tif (arg == NULL || arg[0] == '\\0')\n+\t\treturn -1;\n+\n+\terrno = 0;\n+\tbitwidth = strtoul(arg, &end, 0);\n+\n+\t/* check for errors */\n+\tif (errno != 0 || end == NULL || *end != '\\0' || bitwidth > RTE_SIMD_MAX)\n+\t\treturn -1;\n+\n+\tif (bitwidth == 0)\n+\t\tbitwidth = (unsigned long) RTE_SIMD_MAX;\n+\tret = rte_set_max_simd_bitwidth(bitwidth);\n+\tif (ret < 0)\n+\t\treturn -1;\n+\tinternal_conf->max_simd_bitwidth.forced = 1;\n+\treturn 0;\n+}\n+\n static int\n eal_parse_base_virtaddr(const char *arg)\n {\n@@ -1707,6 +1739,13 @@ eal_parse_common_option(int opt, const char *optarg,\n \tcase OPT_NO_TELEMETRY_NUM:\n \t\tconf->no_telemetry = 1;\n \t\tbreak;\n+\tcase OPT_FORCE_MAX_SIMD_BITWIDTH_NUM:\n+\t\tif (eal_parse_simd_bitwidth(optarg) < 0) {\n+\t\t\tRTE_LOG(ERR, EAL, \"invalid parameter for --\"\n+\t\t\t\t\tOPT_FORCE_MAX_SIMD_BITWIDTH \"\\n\");\n+\t\t\treturn -1;\n+\t\t}\n+\t\tbreak;\n \n \t/* don't know what to do, leave this to caller */\n \tdefault:\n@@ -1903,6 +1942,32 @@ eal_check_common_options(struct internal_config *internal_cfg)\n \treturn 0;\n }\n \n+uint16_t\n+rte_get_max_simd_bitwidth(void)\n+{\n+\tconst struct internal_config *internal_conf =\n+\t\teal_get_internal_configuration();\n+\treturn internal_conf->max_simd_bitwidth.bitwidth;\n+}\n+\n+int\n+rte_set_max_simd_bitwidth(uint16_t bitwidth)\n+{\n+\tstruct internal_config *internal_conf =\n+\t\teal_get_internal_configuration();\n+\tif (internal_conf->max_simd_bitwidth.forced) {\n+\t\tRTE_LOG(NOTICE, EAL, \"Cannot set max SIMD bitwidth - user runtime override enabled\");\n+\t\treturn -EPERM;\n+\t}\n+\n+\tif (bitwidth < RTE_SIMD_DISABLED || !rte_is_power_of_2(bitwidth)) {\n+\t\tRTE_LOG(ERR, EAL, \"Invalid bitwidth value!\\n\");\n+\t\treturn -EINVAL;\n+\t}\n+\tinternal_conf->max_simd_bitwidth.bitwidth = bitwidth;\n+\treturn 0;\n+}\n+\n void\n eal_common_usage(void)\n {\n@@ -1981,6 +2046,7 @@ eal_common_usage(void)\n \t       \"  --\"OPT_BASE_VIRTADDR\"     Base virtual address\\n\"\n \t       \"  --\"OPT_TELEMETRY\"   Enable telemetry support (on by default)\\n\"\n \t       \"  --\"OPT_NO_TELEMETRY\"   Disable telemetry support\\n\"\n+\t       \"  --\"OPT_FORCE_MAX_SIMD_BITWIDTH\" Force the max SIMD bitwidth\\n\"\n \t       \"\\nEAL options for DEBUG use only:\\n\"\n \t       \"  --\"OPT_HUGE_UNLINK\"       Unlink hugepage files after init\\n\"\n \t       \"  --\"OPT_NO_HUGE\"           Use malloc instead of hugetlbfs\\n\"\ndiff --git a/lib/librte_eal/common/eal_internal_cfg.h b/lib/librte_eal/common/eal_internal_cfg.h\nindex de627c7627..51dbe86e2b 100644\n--- a/lib/librte_eal/common/eal_internal_cfg.h\n+++ b/lib/librte_eal/common/eal_internal_cfg.h\n@@ -33,6 +33,12 @@ struct hugepage_info {\n \tint lock_descriptor;    /**< file descriptor for hugepage dir */\n };\n \n+struct simd_bitwidth {\n+\tbool forced;\n+\t/**< flag indicating if bitwidth is forced and can't be modified */\n+\tuint16_t bitwidth; /**< bitwidth value */\n+};\n+\n /**\n  * internal configuration\n  */\n@@ -85,6 +91,8 @@ struct internal_config {\n \tvolatile unsigned int init_complete;\n \t/**< indicates whether EAL has completed initialization */\n \tunsigned int no_telemetry; /**< true to disable Telemetry */\n+\tstruct simd_bitwidth max_simd_bitwidth;\n+\t/**< max simd bitwidth path to use */\n };\n \n void eal_reset_internal_config(struct internal_config *internal_cfg);\ndiff --git a/lib/librte_eal/common/eal_options.h b/lib/librte_eal/common/eal_options.h\nindex 89769d48b4..ef33979664 100644\n--- a/lib/librte_eal/common/eal_options.h\n+++ b/lib/librte_eal/common/eal_options.h\n@@ -85,6 +85,8 @@ enum {\n \tOPT_TELEMETRY_NUM,\n #define OPT_NO_TELEMETRY      \"no-telemetry\"\n \tOPT_NO_TELEMETRY_NUM,\n+#define OPT_FORCE_MAX_SIMD_BITWIDTH  \"force-max-simd-bitwidth\"\n+\tOPT_FORCE_MAX_SIMD_BITWIDTH_NUM,\n \tOPT_LONG_MAX_NUM\n };\n \ndiff --git a/lib/librte_eal/include/rte_eal.h b/lib/librte_eal/include/rte_eal.h\nindex e3c2ef185e..706d3cca5a 100644\n--- a/lib/librte_eal/include/rte_eal.h\n+++ b/lib/librte_eal/include/rte_eal.h\n@@ -43,6 +43,23 @@ enum rte_proc_type_t {\n \tRTE_PROC_INVALID\n };\n \n+/**\n+ * The max SIMD bitwidth value to limit vector path selection.\n+ */\n+enum rte_max_simd {\n+\tRTE_SIMD_DISABLED = 64,\n+\t/**< Limits path selection to scalar, disables all vector paths. */\n+\tRTE_SIMD_128 = 128,\n+\t/**< Limits path selection to SSE/NEON/Altivec or below. */\n+\tRTE_SIMD_256 = 256, /**< Limits path selection to AVX2 or below. */\n+\tRTE_SIMD_512 = 512, /**< Limits path selection to AVX512 or below. */\n+\tRTE_SIMD_MAX = INT16_MAX + 1,\n+\t/**<\n+\t * Disables limiting by max SIMD bitwidth, allows all suitable paths.\n+\t * This value is used as it is a large number and a power of 2.\n+\t */\n+};\n+\n /**\n  * Get the process type in a multi-process setup\n  *\n@@ -51,6 +68,29 @@ enum rte_proc_type_t {\n  */\n enum rte_proc_type_t rte_eal_process_type(void);\n \n+/**\n+ * Get the supported SIMD bitwidth.\n+ *\n+ * @return\n+ *   uint16_t bitwidth.\n+ */\n+__rte_experimental\n+uint16_t rte_get_max_simd_bitwidth(void);\n+\n+/**\n+ * Set the supported SIMD bitwidth.\n+ * This API should only be called once at initialization, before EAL init.\n+ *\n+ * @param bitwidth\n+ *   uint16_t bitwidth.\n+ * @return\n+ *   - 0 on success.\n+ *   - -EINVAL on invalid bitwidth parameter.\n+ *   - -EPERM if bitwidth is forced.\n+ */\n+__rte_experimental\n+int rte_set_max_simd_bitwidth(uint16_t bitwidth);\n+\n /**\n  * Request iopl privilege for all RPL.\n  *\ndiff --git a/lib/librte_eal/ppc/include/rte_vect.h b/lib/librte_eal/ppc/include/rte_vect.h\nindex b0545c878c..a69aabc568 100644\n--- a/lib/librte_eal/ppc/include/rte_vect.h\n+++ b/lib/librte_eal/ppc/include/rte_vect.h\n@@ -15,6 +15,8 @@\n extern \"C\" {\n #endif\n \n+#define RTE_DEFAULT_SIMD_BITWIDTH RTE_SIMD_256\n+\n typedef vector signed int xmm_t;\n \n #define\tXMM_SIZE\t(sizeof(xmm_t))\ndiff --git a/lib/librte_eal/rte_eal_exports.def b/lib/librte_eal/rte_eal_exports.def\nindex 975acb8ffe..b61e9a0f6e 100644\n--- a/lib/librte_eal/rte_eal_exports.def\n+++ b/lib/librte_eal/rte_eal_exports.def\n@@ -59,6 +59,7 @@ EXPORTS\n \trte_exit\n \trte_free\n \trte_get_master_lcore\n+\trte_get_max_simd_bitwidth\n \trte_get_next_lcore\n \trte_get_tsc_hz\n \trte_hexdump\n@@ -147,6 +148,7 @@ EXPORTS\n \trte_service_set_stats_enable\n \trte_service_start_with_defaults\n \trte_set_application_usage_hook\n+\trte_set_max_simd_bitwidth\n \trte_socket_count\n \trte_socket_id\n \trte_socket_id_by_idx\ndiff --git a/lib/librte_eal/rte_eal_version.map b/lib/librte_eal/rte_eal_version.map\nindex f56de02d8f..80f6911322 100644\n--- a/lib/librte_eal/rte_eal_version.map\n+++ b/lib/librte_eal/rte_eal_version.map\n@@ -398,7 +398,9 @@ EXPERIMENTAL {\n \n \t# added in 20.11\n \t__rte_eal_trace_generic_size_t;\n+\trte_get_max_simd_bitwidth;\n \trte_service_lcore_may_be_active;\n+\trte_set_max_simd_bitwidth;\n };\n \n INTERNAL {\ndiff --git a/lib/librte_eal/x86/include/rte_vect.h b/lib/librte_eal/x86/include/rte_vect.h\nindex 64383c3606..f0aad9615e 100644\n--- a/lib/librte_eal/x86/include/rte_vect.h\n+++ b/lib/librte_eal/x86/include/rte_vect.h\n@@ -36,6 +36,8 @@\n extern \"C\" {\n #endif\n \n+#define RTE_DEFAULT_SIMD_BITWIDTH RTE_SIMD_256\n+\n typedef __m128i xmm_t;\n \n #define\tXMM_SIZE\t(sizeof(xmm_t))\n",
    "prefixes": [
        "v9",
        "01/18"
    ]
}