get:
Show a patch.

patch:
Update a patch.

put:
Update a patch.

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

{
    "id": 77326,
    "url": "http://patches.dpdk.org/api/patches/77326/?format=api",
    "web_url": "http://patches.dpdk.org/project/dpdk/patch/20200911054534.55378-4-joyce.kong@arm.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": "<20200911054534.55378-4-joyce.kong@arm.com>",
    "list_archive_url": "https://inbox.dpdk.org/dev/20200911054534.55378-4-joyce.kong@arm.com",
    "date": "2020-09-11T05:45:33",
    "name": "[3/4] rcu: remove experimental tag from QSBR mechanism",
    "commit_ref": null,
    "pull_url": null,
    "state": "accepted",
    "archived": true,
    "hash": "95b5f4ae695d2164979fd25b51025c2e0bd53625",
    "submitter": {
        "id": 970,
        "url": "http://patches.dpdk.org/api/people/970/?format=api",
        "name": "Joyce Kong",
        "email": "joyce.kong@arm.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/20200911054534.55378-4-joyce.kong@arm.com/mbox/",
    "series": [
        {
            "id": 12130,
            "url": "http://patches.dpdk.org/api/series/12130/?format=api",
            "web_url": "http://patches.dpdk.org/project/dpdk/list/?series=12130",
            "date": "2020-09-11T05:45:30",
            "name": "remove experimental tags from APIs",
            "version": 1,
            "mbox": "http://patches.dpdk.org/series/12130/mbox/"
        }
    ],
    "comments": "http://patches.dpdk.org/api/patches/77326/comments/",
    "check": "success",
    "checks": "http://patches.dpdk.org/api/patches/77326/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 EA3C7A04B5;\n\tFri, 11 Sep 2020 07:46:13 +0200 (CEST)",
            "from [92.243.14.124] (localhost [127.0.0.1])\n\tby dpdk.org (Postfix) with ESMTP id 64EFB1C0DA;\n\tFri, 11 Sep 2020 07:46:04 +0200 (CEST)",
            "from foss.arm.com (foss.arm.com [217.140.110.172])\n by dpdk.org (Postfix) with ESMTP id 5BF111C0CC\n for <dev@dpdk.org>; Fri, 11 Sep 2020 07:46:03 +0200 (CEST)",
            "from usa-sjc-imap-foss1.foss.arm.com (unknown [10.121.207.14])\n by usa-sjc-mx-foss1.foss.arm.com (Postfix) with ESMTP id D46B8106F;\n Thu, 10 Sep 2020 22:46:02 -0700 (PDT)",
            "from net-arm-thunderx2-03.shanghai.arm.com\n (net-arm-thunderx2-03.shanghai.arm.com [10.169.210.123])\n by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPA id A405E3F68F;\n Thu, 10 Sep 2020 22:46:00 -0700 (PDT)"
        ],
        "From": "Joyce Kong <joyce.kong@arm.com>",
        "To": "thomas@monjalon.net, honnappa.nagarahalli@arm.com, phil.yang@arm.com,\n ruifeng.wang@arm.com",
        "Cc": "dev@dpdk.org,\n\tnd@arm.com",
        "Date": "Fri, 11 Sep 2020 13:45:33 +0800",
        "Message-Id": "<20200911054534.55378-4-joyce.kong@arm.com>",
        "X-Mailer": "git-send-email 2.28.0",
        "In-Reply-To": "<20200911054534.55378-1-joyce.kong@arm.com>",
        "References": "<20200911054534.55378-1-joyce.kong@arm.com>",
        "MIME-Version": "1.0",
        "Content-Transfer-Encoding": "8bit",
        "Subject": "[dpdk-dev] [PATCH 3/4] rcu: remove experimental tag from QSBR\n\tmechanism",
        "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": "RCU library supporting quiescent state was introduced\nin 19.05 release and has been around 4 releases, it\nshould be mature enough to remove the experimental tag.\n\nSigned-off-by: Joyce Kong <joyce.kong@arm.com>\nReviewed-by: Ruifeng Wang <ruifeng.wang@arm.com>\n---\n MAINTAINERS                        |  2 +-\n lib/librte_rcu/rte_rcu_qsbr.h      | 52 ------------------------------\n lib/librte_rcu/rte_rcu_version.map | 11 +++++--\n 3 files changed, 10 insertions(+), 55 deletions(-)",
    "diff": "diff --git a/MAINTAINERS b/MAINTAINERS\nindex 0e43a28bf..12f088b62 100644\n--- a/MAINTAINERS\n+++ b/MAINTAINERS\n@@ -1449,7 +1449,7 @@ M: Olivier Matz <olivier.matz@6wind.com>\n F: lib/librte_kvargs/\n F: app/test/test_kvargs.c\n \n-RCU - EXPERIMENTAL\n+RCU\n M: Honnappa Nagarahalli <honnappa.nagarahalli@arm.com>\n F: lib/librte_rcu/\n F: app/test/test_rcu*\ndiff --git a/lib/librte_rcu/rte_rcu_qsbr.h b/lib/librte_rcu/rte_rcu_qsbr.h\nindex a98e8f0f8..5905c53a5 100644\n--- a/lib/librte_rcu/rte_rcu_qsbr.h\n+++ b/lib/librte_rcu/rte_rcu_qsbr.h\n@@ -202,9 +202,6 @@ struct rte_rcu_qsbr_dq_parameters {\n struct rte_rcu_qsbr_dq;\n \n /**\n- * @warning\n- * @b EXPERIMENTAL: this API may change without prior notice\n- *\n  * Return the size of the memory occupied by a Quiescent State variable.\n  *\n  * @param max_threads\n@@ -215,14 +212,10 @@ struct rte_rcu_qsbr_dq;\n  *   Possible rte_errno codes are:\n  *   - EINVAL - max_threads is 0\n  */\n-__rte_experimental\n size_t\n rte_rcu_qsbr_get_memsize(uint32_t max_threads);\n \n /**\n- * @warning\n- * @b EXPERIMENTAL: this API may change without prior notice\n- *\n  * Initialize a Quiescent State (QS) variable.\n  *\n  * @param v\n@@ -237,14 +230,10 @@ rte_rcu_qsbr_get_memsize(uint32_t max_threads);\n  *   - EINVAL - max_threads is 0 or 'v' is NULL.\n  *\n  */\n-__rte_experimental\n int\n rte_rcu_qsbr_init(struct rte_rcu_qsbr *v, uint32_t max_threads);\n \n /**\n- * @warning\n- * @b EXPERIMENTAL: this API may change without prior notice\n- *\n  * Register a reader thread to report its quiescent state\n  * on a QS variable.\n  *\n@@ -264,14 +253,10 @@ rte_rcu_qsbr_init(struct rte_rcu_qsbr *v, uint32_t max_threads);\n  *   the QS variable. thread_id is a value between 0 and (max_threads - 1).\n  *   'max_threads' is the parameter passed in 'rte_rcu_qsbr_init' API.\n  */\n-__rte_experimental\n int\n rte_rcu_qsbr_thread_register(struct rte_rcu_qsbr *v, unsigned int thread_id);\n \n /**\n- * @warning\n- * @b EXPERIMENTAL: this API may change without prior notice\n- *\n  * Remove a reader thread, from the list of threads reporting their\n  * quiescent state on a QS variable.\n  *\n@@ -286,14 +271,10 @@ rte_rcu_qsbr_thread_register(struct rte_rcu_qsbr *v, unsigned int thread_id);\n  *   Reader thread with this thread ID will stop reporting its quiescent\n  *   state on the QS variable.\n  */\n-__rte_experimental\n int\n rte_rcu_qsbr_thread_unregister(struct rte_rcu_qsbr *v, unsigned int thread_id);\n \n /**\n- * @warning\n- * @b EXPERIMENTAL: this API may change without prior notice\n- *\n  * Add a registered reader thread, to the list of threads reporting their\n  * quiescent state on a QS variable.\n  *\n@@ -318,7 +299,6 @@ rte_rcu_qsbr_thread_unregister(struct rte_rcu_qsbr *v, unsigned int thread_id);\n  *   Reader thread with this thread ID will report its quiescent state on\n  *   the QS variable.\n  */\n-__rte_experimental\n static __rte_always_inline void\n rte_rcu_qsbr_thread_online(struct rte_rcu_qsbr *v, unsigned int thread_id)\n {\n@@ -358,9 +338,6 @@ rte_rcu_qsbr_thread_online(struct rte_rcu_qsbr *v, unsigned int thread_id)\n }\n \n /**\n- * @warning\n- * @b EXPERIMENTAL: this API may change without prior notice\n- *\n  * Remove a registered reader thread from the list of threads reporting their\n  * quiescent state on a QS variable.\n  *\n@@ -380,7 +357,6 @@ rte_rcu_qsbr_thread_online(struct rte_rcu_qsbr *v, unsigned int thread_id)\n  *   rte_rcu_qsbr_check API will not wait for the reader thread with\n  *   this thread ID to report its quiescent state on the QS variable.\n  */\n-__rte_experimental\n static __rte_always_inline void\n rte_rcu_qsbr_thread_offline(struct rte_rcu_qsbr *v, unsigned int thread_id)\n {\n@@ -399,9 +375,6 @@ rte_rcu_qsbr_thread_offline(struct rte_rcu_qsbr *v, unsigned int thread_id)\n }\n \n /**\n- * @warning\n- * @b EXPERIMENTAL: this API may change without prior notice\n- *\n  * Acquire a lock for accessing a shared data structure.\n  *\n  * This is implemented as a lock-free function. It is multi-thread\n@@ -421,7 +394,6 @@ rte_rcu_qsbr_thread_offline(struct rte_rcu_qsbr *v, unsigned int thread_id)\n  * @param thread_id\n  *   Reader thread id\n  */\n-__rte_experimental\n static __rte_always_inline void\n rte_rcu_qsbr_lock(__rte_unused struct rte_rcu_qsbr *v,\n \t\t\t__rte_unused unsigned int thread_id)\n@@ -436,9 +408,6 @@ rte_rcu_qsbr_lock(__rte_unused struct rte_rcu_qsbr *v,\n }\n \n /**\n- * @warning\n- * @b EXPERIMENTAL: this API may change without prior notice\n- *\n  * Release a lock after accessing a shared data structure.\n  *\n  * This is implemented as a lock-free function. It is multi-thread\n@@ -458,7 +427,6 @@ rte_rcu_qsbr_lock(__rte_unused struct rte_rcu_qsbr *v,\n  * @param thread_id\n  *   Reader thread id\n  */\n-__rte_experimental\n static __rte_always_inline void\n rte_rcu_qsbr_unlock(__rte_unused struct rte_rcu_qsbr *v,\n \t\t\t__rte_unused unsigned int thread_id)\n@@ -477,9 +445,6 @@ rte_rcu_qsbr_unlock(__rte_unused struct rte_rcu_qsbr *v,\n }\n \n /**\n- * @warning\n- * @b EXPERIMENTAL: this API may change without prior notice\n- *\n  * Ask the reader threads to report the quiescent state\n  * status.\n  *\n@@ -492,7 +457,6 @@ rte_rcu_qsbr_unlock(__rte_unused struct rte_rcu_qsbr *v,\n  *   - This is the token for this call of the API. This should be\n  *     passed to rte_rcu_qsbr_check API.\n  */\n-__rte_experimental\n static __rte_always_inline uint64_t\n rte_rcu_qsbr_start(struct rte_rcu_qsbr *v)\n {\n@@ -511,9 +475,6 @@ rte_rcu_qsbr_start(struct rte_rcu_qsbr *v)\n }\n \n /**\n- * @warning\n- * @b EXPERIMENTAL: this API may change without prior notice\n- *\n  * Update quiescent state for a reader thread.\n  *\n  * This is implemented as a lock-free function. It is multi-thread safe.\n@@ -525,7 +486,6 @@ rte_rcu_qsbr_start(struct rte_rcu_qsbr *v)\n  * @param thread_id\n  *   Update the quiescent state for the reader with this thread ID.\n  */\n-__rte_experimental\n static __rte_always_inline void\n rte_rcu_qsbr_quiescent(struct rte_rcu_qsbr *v, unsigned int thread_id)\n {\n@@ -683,9 +643,6 @@ __rte_rcu_qsbr_check_all(struct rte_rcu_qsbr *v, uint64_t t, bool wait)\n }\n \n /**\n- * @warning\n- * @b EXPERIMENTAL: this API may change without prior notice\n- *\n  * Checks if all the reader threads have entered the quiescent state\n  * referenced by token.\n  *\n@@ -716,7 +673,6 @@ __rte_rcu_qsbr_check_all(struct rte_rcu_qsbr *v, uint64_t t, bool wait)\n  *   - 1 if all reader threads have passed through specified number\n  *     of quiescent states.\n  */\n-__rte_experimental\n static __rte_always_inline int\n rte_rcu_qsbr_check(struct rte_rcu_qsbr *v, uint64_t t, bool wait)\n {\n@@ -740,9 +696,6 @@ rte_rcu_qsbr_check(struct rte_rcu_qsbr *v, uint64_t t, bool wait)\n }\n \n /**\n- * @warning\n- * @b EXPERIMENTAL: this API may change without prior notice\n- *\n  * Wait till the reader threads have entered quiescent state.\n  *\n  * This is implemented as a lock-free function. It is multi-thread safe.\n@@ -760,14 +713,10 @@ rte_rcu_qsbr_check(struct rte_rcu_qsbr *v, uint64_t t, bool wait)\n  *   on this QS variable (i.e. the calling thread is also part of the\n  *   readside critical section). If not, pass RTE_QSBR_THRID_INVALID.\n  */\n-__rte_experimental\n void\n rte_rcu_qsbr_synchronize(struct rte_rcu_qsbr *v, unsigned int thread_id);\n \n /**\n- * @warning\n- * @b EXPERIMENTAL: this API may change without prior notice\n- *\n  * Dump the details of a single QS variables to a file.\n  *\n  * It is NOT multi-thread safe.\n@@ -782,7 +731,6 @@ rte_rcu_qsbr_synchronize(struct rte_rcu_qsbr *v, unsigned int thread_id);\n  *   Possible rte_errno codes are:\n  *   - EINVAL - NULL parameters are passed\n  */\n-__rte_experimental\n int\n rte_rcu_qsbr_dump(FILE *f, struct rte_rcu_qsbr *v);\n \ndiff --git a/lib/librte_rcu/rte_rcu_version.map b/lib/librte_rcu/rte_rcu_version.map\nindex dfac88a37..e40850350 100644\n--- a/lib/librte_rcu/rte_rcu_version.map\n+++ b/lib/librte_rcu/rte_rcu_version.map\n@@ -1,5 +1,5 @@\n-EXPERIMENTAL {\n-\tglobal:\n+DPDK_21 {\n+        global:\n \n \trte_rcu_log_type;\n \trte_rcu_qsbr_dump;\n@@ -8,6 +8,13 @@ EXPERIMENTAL {\n \trte_rcu_qsbr_synchronize;\n \trte_rcu_qsbr_thread_register;\n \trte_rcu_qsbr_thread_unregister;\n+\n+        local: *;\n+};\n+\n+EXPERIMENTAL {\n+\tglobal:\n+\n \trte_rcu_qsbr_dq_create;\n \trte_rcu_qsbr_dq_enqueue;\n \trte_rcu_qsbr_dq_reclaim;\n",
    "prefixes": [
        "3/4"
    ]
}