get:
Show a patch.

patch:
Update a patch.

put:
Update a patch.

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

{
    "id": 63290,
    "url": "http://patches.dpdk.org/api/patches/63290/?format=api",
    "web_url": "http://patches.dpdk.org/project/dpdk/patch/20191125161314.18804-1-david.marchand@redhat.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": "<20191125161314.18804-1-david.marchand@redhat.com>",
    "list_archive_url": "https://inbox.dpdk.org/dev/20191125161314.18804-1-david.marchand@redhat.com",
    "date": "2019-11-25T16:13:14",
    "name": "[RFC] mark experimental variables",
    "commit_ref": null,
    "pull_url": null,
    "state": "rfc",
    "archived": true,
    "hash": "1169da2a5b805b44cd19dc2610e13cf31ef011b0",
    "submitter": {
        "id": 1173,
        "url": "http://patches.dpdk.org/api/people/1173/?format=api",
        "name": "David Marchand",
        "email": "david.marchand@redhat.com"
    },
    "delegate": {
        "id": 1,
        "url": "http://patches.dpdk.org/api/users/1/?format=api",
        "username": "tmonjalo",
        "first_name": "Thomas",
        "last_name": "Monjalon",
        "email": "thomas@monjalon.net"
    },
    "mbox": "http://patches.dpdk.org/project/dpdk/patch/20191125161314.18804-1-david.marchand@redhat.com/mbox/",
    "series": [
        {
            "id": 7613,
            "url": "http://patches.dpdk.org/api/series/7613/?format=api",
            "web_url": "http://patches.dpdk.org/project/dpdk/list/?series=7613",
            "date": "2019-11-25T16:13:14",
            "name": "[RFC] mark experimental variables",
            "version": 1,
            "mbox": "http://patches.dpdk.org/series/7613/mbox/"
        }
    ],
    "comments": "http://patches.dpdk.org/api/patches/63290/comments/",
    "check": "success",
    "checks": "http://patches.dpdk.org/api/patches/63290/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 852A0A04C2;\n\tMon, 25 Nov 2019 17:13:43 +0100 (CET)",
            "from [92.243.14.124] (localhost [127.0.0.1])\n\tby dpdk.org (Postfix) with ESMTP id 3D3B82952;\n\tMon, 25 Nov 2019 17:13:43 +0100 (CET)",
            "from us-smtp-1.mimecast.com (us-smtp-delivery-1.mimecast.com\n [207.211.31.120]) by dpdk.org (Postfix) with ESMTP id 06EEA28EE\n for <dev@dpdk.org>; Mon, 25 Nov 2019 17:13:41 +0100 (CET)",
            "from mimecast-mx01.redhat.com (mimecast-mx01.redhat.com\n [209.132.183.4]) (Using TLS) by relay.mimecast.com with ESMTP id\n us-mta-417-X3aN5rvwOMOIfYwnkl9RJw-1; Mon, 25 Nov 2019 11:13:37 -0500",
            "from smtp.corp.redhat.com (int-mx07.intmail.prod.int.phx2.redhat.com\n [10.5.11.22])\n (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits))\n (No client certificate requested)\n by mimecast-mx01.redhat.com (Postfix) with ESMTPS id 91655802ADB;\n Mon, 25 Nov 2019 16:13:32 +0000 (UTC)",
            "from dmarchan.remote.csb (ovpn-204-70.brq.redhat.com [10.40.204.70])\n by smtp.corp.redhat.com (Postfix) with ESMTP id 53327100032E;\n Mon, 25 Nov 2019 16:13:25 +0000 (UTC)"
        ],
        "DKIM-Signature": "v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com;\n s=mimecast20190719; t=1574698421;\n h=from:from:reply-to:subject:subject:date:date:message-id:message-id:\n to:to:cc:cc:mime-version:mime-version:content-type:content-type:\n content-transfer-encoding:content-transfer-encoding;\n bh=a2mkx1kwwtz5OclbfFFQpqaczEZmYu+otNAh/F8eoPU=;\n b=AGCMFjOVgFEn/nQCOzdXYpUUCovICz13yhdzzIGYe7RXG1JSPqpze1c4YfpMp43iGNE4//\n VjFSaVoupk5Og6FjIojiyZFp7oyQedfRbfz1TfsRyokLun2jLmBhmdMEGg8wFH8yqXvE3g\n PtuTfHiwGkbZe21QZd+Vlx58JgA6oaE=",
        "From": "David Marchand <david.marchand@redhat.com>",
        "To": "nhorman@tuxdriver.com,\n\tdev@dpdk.org",
        "Cc": "thomas@monjalon.net, arybchenko@solarflare.com, stable@dpdk.org,\n Ray Kinsella <mdr@ashroe.eu>, John McNamara <john.mcnamara@intel.com>,\n Marko Kovacevic <marko.kovacevic@intel.com>,\n Qiming Yang <qiming.yang@intel.com>, Wenzhuo Lu <wenzhuo.lu@intel.com>,\n Declan Doherty <declan.doherty@intel.com>,\n Adrien Mazarguil <adrien.mazarguil@6wind.com>,\n Ferruh Yigit <ferruh.yigit@intel.com>,\n Cristian Dumitrescu <cristian.dumitrescu@intel.com>",
        "Date": "Mon, 25 Nov 2019 17:13:14 +0100",
        "Message-Id": "<20191125161314.18804-1-david.marchand@redhat.com>",
        "MIME-Version": "1.0",
        "X-Scanned-By": "MIMEDefang 2.84 on 10.5.11.22",
        "X-MC-Unique": "X3aN5rvwOMOIfYwnkl9RJw-1",
        "X-Mimecast-Spam-Score": "0",
        "Content-Type": "text/plain; charset=US-ASCII",
        "Content-Transfer-Encoding": "quoted-printable",
        "Subject": "[dpdk-dev] [RFC PATCH] mark experimental variables",
        "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": "So far, we did not pay attention to direct access to variables but they\nare part of the API/ABI too and should be clearly identified.\n\nIntroduce a __rte_experimental_var tag and mark existing variables.\n\nFixes: a4bcd61de82d (\"buildtools: add script to check experimental API exports\")\nCc: stable@dpdk.org\n\nSigned-off-by: David Marchand <david.marchand@redhat.com>\n---\nQuick patch to try to catch experimental variables.\nNot sure if we could use a single section, so please advise if there is\nbetter to do about this.\n\n---\n buildtools/check-experimental-syms.sh      | 17 +++++++++++++++--\n devtools/checkpatches.sh                   | 14 +++++++++-----\n doc/guides/contributing/abi_policy.rst     |  7 ++++---\n drivers/net/ice/rte_pmd_ice.h              |  3 +++\n lib/librte_cryptodev/rte_crypto_asym.h     |  3 +++\n lib/librte_eal/common/include/rte_compat.h |  5 +++++\n lib/librte_ethdev/rte_flow.h               | 17 +++++++++++++++++\n lib/librte_port/rte_port_eventdev.h        |  5 +++++\n 8 files changed, 61 insertions(+), 10 deletions(-)",
    "diff": "diff --git a/buildtools/check-experimental-syms.sh b/buildtools/check-experimental-syms.sh\nindex f3603e5ba..27f7b39f6 100755\n--- a/buildtools/check-experimental-syms.sh\n+++ b/buildtools/check-experimental-syms.sh\n@@ -34,13 +34,26 @@ do\n \t\tPlease add __rte_experimental to the definition of $SYM\n \t\tEND_OF_MESSAGE\n \t\tret=1\n+\telif grep -q \"\\.data.*[[:space:]]$SYM$\" $DUMPFILE &&\n+\t\t! grep -q \"\\.data\\.experimental.*[[:space:]]$SYM$\" $DUMPFILE\n+\tthen\n+\t\tcat >&2 <<- END_OF_MESSAGE\n+\t\t$SYM is not flagged as experimental\n+\t\tbut is listed in version map\n+\t\tPlease add __rte_experimental_var to the definition of $SYM\n+\t\tEND_OF_MESSAGE\n+\t\tret=1\n \tfi\n done\n \n # Filter out symbols suffixed with a . for icc\n for SYM in `awk '{\n-\tif ($2 != \"l\" && $4 == \".text.experimental\" && !($NF ~ /\\.$/)) {\n-\t\tprint $NF\n+\tif ($2 == \"l\" || $NF ~ /\\.$/) {\n+\t\tnext;\n+\t}\n+\tif ($4 == \".text.experimental\" ||\n+\t    $4 == \".data.experimental\") {\n+\t\tprint $NF;\n \t}\n }' $DUMPFILE`\n do\ndiff --git a/devtools/checkpatches.sh b/devtools/checkpatches.sh\nindex b16bace92..d3d02b8ce 100755\n--- a/devtools/checkpatches.sh\n+++ b/devtools/checkpatches.sh\n@@ -90,11 +90,15 @@ check_experimental_tags() { # <patch>\n \t\t\t\t\"headers (\"current_file\")\";\n \t\t\tret = 1;\n \t\t}\n-\t\tif ($1 != \"+__rte_experimental\" || $2 != \"\") {\n-\t\t\tprint \"__rte_experimental must appear alone on the line\" \\\n-\t\t\t\t\" immediately preceding the return type of a function.\"\n-\t\t\tret = 1;\n+\n+\t\tif (NF == 1 && ($1 == \"+__rte_experimental\" ||\n+\t\t\t\t$1 == \"+__rte_experimental_var\")) {\n+\t\t\tnext;\n \t\t}\n+\t\tprint \"__rte_experimental or __rte_experimental_var must \" \\\n+\t\t\t\"appear alone on the line immediately preceding the \" \\\n+\t\t\t\"return type of a function.\";\n+\t\tret = 1;\n \t}\n \tEND {\n \t\texit ret;\n@@ -178,7 +182,7 @@ check () { # <patch> <commit> <title>\n \t\tret=1\n \tfi\n \n-\t! $verbose || printf '\\nChecking __rte_experimental tags:\\n'\n+\t! $verbose || printf '\\nChecking __rte_experimental* tags:\\n'\n \treport=$(check_experimental_tags \"$tmpinput\")\n \tif [ $? -ne 0 ] ; then\n \t\t$headline_printed || print_headline \"$3\"\ndiff --git a/doc/guides/contributing/abi_policy.rst b/doc/guides/contributing/abi_policy.rst\nindex 05ca95980..189ef6491 100644\n--- a/doc/guides/contributing/abi_policy.rst\n+++ b/doc/guides/contributing/abi_policy.rst\n@@ -300,9 +300,10 @@ Note that marking an API as experimental is a multi step process.\n To mark an API as experimental, the symbols which are desired to be exported\n must be placed in an EXPERIMENTAL version block in the corresponding libraries'\n version map script.\n-Secondly, the corresponding prototypes of those exported functions (in the\n-development header files), must be marked with the ``__rte_experimental`` tag\n-(see ``rte_compat.h``).\n+Secondly, the corresponding prototypes of those exported functions (resp.\n+variables) must be marked with the ``__rte_experimental`` (resp.\n+``__rte_experimental_var``) tag in the development header files (see\n+``rte_compat.h``).\n The DPDK build makefiles perform a check to ensure that the map file and the\n C code reflect the same list of symbols.\n This check can be circumvented by defining ``ALLOW_EXPERIMENTAL_API``\ndiff --git a/drivers/net/ice/rte_pmd_ice.h b/drivers/net/ice/rte_pmd_ice.h\nindex e254db053..dbd5586d4 100644\n--- a/drivers/net/ice/rte_pmd_ice.h\n+++ b/drivers/net/ice/rte_pmd_ice.h\n@@ -15,6 +15,8 @@\n  */\n \n #include <stdio.h>\n+\n+#include <rte_compat.h>\n #include <rte_mbuf.h>\n #include <rte_mbuf_dyn.h>\n \n@@ -81,6 +83,7 @@ union rte_net_ice_proto_xtr_metadata {\n };\n \n /* Offset of mbuf dynamic field for protocol extraction data */\n+__rte_experimental_var\n extern int rte_net_ice_dynfield_proto_xtr_metadata_offs;\n \n /* Mask of mbuf dynamic flags for protocol extraction type */\ndiff --git a/lib/librte_cryptodev/rte_crypto_asym.h b/lib/librte_cryptodev/rte_crypto_asym.h\nindex 0d34ce8df..d4e84910f 100644\n--- a/lib/librte_cryptodev/rte_crypto_asym.h\n+++ b/lib/librte_cryptodev/rte_crypto_asym.h\n@@ -24,6 +24,7 @@ extern \"C\" {\n #include <rte_memory.h>\n #include <rte_mempool.h>\n #include <rte_common.h>\n+#include <rte_compat.h>\n \n #include \"rte_crypto_sym.h\"\n \n@@ -37,10 +38,12 @@ typedef struct rte_crypto_param_t {\n } rte_crypto_param;\n \n /** asym xform type name strings */\n+__rte_experimental_var\n extern const char *\n rte_crypto_asym_xform_strings[];\n \n /** asym operations type name strings */\n+__rte_experimental_var\n extern const char *\n rte_crypto_asym_op_strings[];\n \ndiff --git a/lib/librte_eal/common/include/rte_compat.h b/lib/librte_eal/common/include/rte_compat.h\nindex 3eb33784b..3fd05179f 100644\n--- a/lib/librte_eal/common/include/rte_compat.h\n+++ b/lib/librte_eal/common/include/rte_compat.h\n@@ -11,11 +11,16 @@\n #define __rte_experimental \\\n __attribute__((deprecated(\"Symbol is not yet part of stable ABI\"), \\\n section(\".text.experimental\")))\n+#define __rte_experimental_var \\\n+__attribute__((deprecated(\"Symbol is not yet part of stable ABI\"), \\\n+section(\".data.experimental\")))\n \n #else\n \n #define __rte_experimental \\\n __attribute__((section(\".text.experimental\")))\n+#define __rte_experimental_var \\\n+__attribute__((section(\".data.experimental\")))\n \n #endif\n \ndiff --git a/lib/librte_ethdev/rte_flow.h b/lib/librte_ethdev/rte_flow.h\nindex 452d359a1..c8ea71acc 100644\n--- a/lib/librte_ethdev/rte_flow.h\n+++ b/lib/librte_ethdev/rte_flow.h\n@@ -19,6 +19,7 @@\n \n #include <rte_arp.h>\n #include <rte_common.h>\n+#include <rte_compat.h>\n #include <rte_ether.h>\n #include <rte_icmp.h>\n #include <rte_ip.h>\n@@ -2531,9 +2532,11 @@ struct rte_flow_action_set_meta {\n };\n \n /* Mbuf dynamic field offset for metadata. */\n+__rte_experimental_var\n extern int rte_flow_dynf_metadata_offs;\n \n /* Mbuf dynamic field flag mask for metadata. */\n+__rte_experimental_var\n extern uint64_t rte_flow_dynf_metadata_mask;\n \n /* Mbuf dynamic field pointer for metadata. */\n@@ -2548,14 +2551,24 @@ __rte_experimental\n static inline uint32_t\n rte_flow_dynf_metadata_get(struct rte_mbuf *m)\n {\n+#ifdef ALLOW_EXPERIMENTAL_API\n \treturn *RTE_FLOW_DYNF_METADATA(m);\n+#else\n+\tRTE_SET_USED(m);\n+\treturn 0;\n+#endif\n }\n \n __rte_experimental\n static inline void\n rte_flow_dynf_metadata_set(struct rte_mbuf *m, uint32_t v)\n {\n+#ifdef ALLOW_EXPERIMENTAL_API\n \t*RTE_FLOW_DYNF_METADATA(m) = v;\n+#else\n+\tRTE_SET_USED(m);\n+\tRTE_SET_USED(v);\n+#endif\n }\n \n /*\n@@ -2800,7 +2813,11 @@ __rte_experimental\n static inline int\n rte_flow_dynf_metadata_avail(void)\n {\n+#ifdef ALLOW_EXPERIMENTAL_API\n \treturn !!rte_flow_dynf_metadata_mask;\n+#else\n+\treturn 0;\n+#endif\n }\n \n /**\ndiff --git a/lib/librte_port/rte_port_eventdev.h b/lib/librte_port/rte_port_eventdev.h\nindex acf88f4e9..59246e204 100644\n--- a/lib/librte_port/rte_port_eventdev.h\n+++ b/lib/librte_port/rte_port_eventdev.h\n@@ -25,6 +25,8 @@ extern \"C\" {\n **/\n \n #include <stdint.h>\n+\n+#include <rte_compat.h>\n #include <rte_eventdev.h>\n \n #include \"rte_port.h\"\n@@ -39,6 +41,7 @@ struct rte_port_eventdev_reader_params {\n };\n \n /** Eventdev_reader port operations. */\n+__rte_experimental_var\n extern struct rte_port_in_ops rte_port_eventdev_reader_ops;\n \n /** Eventdev_writer port parameters. */\n@@ -63,6 +66,7 @@ struct rte_port_eventdev_writer_params {\n };\n \n /** Eventdev_writer port operations. */\n+__rte_experimental_var\n extern struct rte_port_out_ops rte_port_eventdev_writer_ops;\n \n /** Event_writer_nodrop port parameters. */\n@@ -90,6 +94,7 @@ struct rte_port_eventdev_writer_nodrop_params {\n };\n \n /** Eventdev_writer_nodrop port operations. */\n+__rte_experimental_var\n extern struct rte_port_out_ops rte_port_eventdev_writer_nodrop_ops;\n \n #ifdef __cplusplus\n",
    "prefixes": [
        "RFC"
    ]
}