get:
Show a patch.

patch:
Update a patch.

put:
Update a patch.

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

{
    "id": 68888,
    "url": "https://patches.dpdk.org/api/patches/68888/?format=api",
    "web_url": "https://patches.dpdk.org/project/dpdk/patch/20200419100133.3232316-15-jerinj@marvell.com/",
    "project": {
        "id": 1,
        "url": "https://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": "<20200419100133.3232316-15-jerinj@marvell.com>",
    "list_archive_url": "https://inbox.dpdk.org/dev/20200419100133.3232316-15-jerinj@marvell.com",
    "date": "2020-04-19T10:01:14",
    "name": "[v6,14/33] eal/trace: implement provider payload",
    "commit_ref": null,
    "pull_url": null,
    "state": "superseded",
    "archived": true,
    "hash": "60ef823e698aa4e5d465f3efad98ec87f25b2cbf",
    "submitter": {
        "id": 1188,
        "url": "https://patches.dpdk.org/api/people/1188/?format=api",
        "name": "Jerin Jacob Kollanukkaran",
        "email": "jerinj@marvell.com"
    },
    "delegate": {
        "id": 24651,
        "url": "https://patches.dpdk.org/api/users/24651/?format=api",
        "username": "dmarchand",
        "first_name": "David",
        "last_name": "Marchand",
        "email": "david.marchand@redhat.com"
    },
    "mbox": "https://patches.dpdk.org/project/dpdk/patch/20200419100133.3232316-15-jerinj@marvell.com/mbox/",
    "series": [
        {
            "id": 9495,
            "url": "https://patches.dpdk.org/api/series/9495/?format=api",
            "web_url": "https://patches.dpdk.org/project/dpdk/list/?series=9495",
            "date": "2020-04-19T10:01:02",
            "name": "DPDK Trace support",
            "version": 6,
            "mbox": "https://patches.dpdk.org/series/9495/mbox/"
        }
    ],
    "comments": "https://patches.dpdk.org/api/patches/68888/comments/",
    "check": "warning",
    "checks": "https://patches.dpdk.org/api/patches/68888/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 19E00A0561;\n\tSun, 19 Apr 2020 12:07:05 +0200 (CEST)",
            "from [92.243.14.124] (localhost [127.0.0.1])\n\tby dpdk.org (Postfix) with ESMTP id 65B221D606;\n\tSun, 19 Apr 2020 12:03:01 +0200 (CEST)",
            "from mx0b-0016f401.pphosted.com (mx0b-0016f401.pphosted.com\n [67.231.156.173]) by dpdk.org (Postfix) with ESMTP id EE4FF1D43F\n for <dev@dpdk.org>; Sun, 19 Apr 2020 12:02:52 +0200 (CEST)",
            "from pps.filterd (m0045851.ppops.net [127.0.0.1])\n by mx0b-0016f401.pphosted.com (8.16.0.42/8.16.0.42) with SMTP id\n 03JA1FA5020166; Sun, 19 Apr 2020 03:02:32 -0700",
            "from sc-exch01.marvell.com ([199.233.58.181])\n by mx0b-0016f401.pphosted.com with ESMTP id 30g12njxbp-1\n (version=TLSv1.2 cipher=ECDHE-RSA-AES256-SHA384 bits=256 verify=NOT);\n Sun, 19 Apr 2020 03:02:32 -0700",
            "from DC5-EXCH02.marvell.com (10.69.176.39) by SC-EXCH01.marvell.com\n (10.93.176.81) with Microsoft SMTP Server (TLS) id 15.0.1497.2;\n Sun, 19 Apr 2020 03:02:30 -0700",
            "from DC5-EXCH02.marvell.com (10.69.176.39) by DC5-EXCH02.marvell.com\n (10.69.176.39) with Microsoft SMTP Server (TLS) id 15.0.1497.2;\n Sun, 19 Apr 2020 03:02:29 -0700",
            "from maili.marvell.com (10.69.176.80) by DC5-EXCH02.marvell.com\n (10.69.176.39) with Microsoft SMTP Server id 15.0.1497.2 via Frontend\n Transport; Sun, 19 Apr 2020 03:02:29 -0700",
            "from jerin-lab.marvell.com (jerin-lab.marvell.com [10.28.34.14])\n by maili.marvell.com (Postfix) with ESMTP id 6E6B73F703F;\n Sun, 19 Apr 2020 03:02:27 -0700 (PDT)"
        ],
        "DKIM-Signature": "v=1; a=rsa-sha256; c=relaxed/relaxed; d=marvell.com;\n h=from : to : cc :\n subject : date : message-id : in-reply-to : references : mime-version :\n content-transfer-encoding : content-type; s=pfpt0818;\n bh=0E2opw5xlbtGrsMpD6xcobkch6id3JW8yx/yX6vj51Q=;\n b=cHf4iQh36DsgqYQqncWQSpAN2W9LZeCngl7gdRhdamBZPbO1XH08gG14aBocq8dhWDj5\n v0fOuPjDm7K4X9K3SKSR6PUe98uu5ORsFoV24/KcYQvpo4cTRFQVAxfLxk46YK226+F1\n O+7inrBnewLdDBCiZ8WVzHcXnL9tXmWJRfbf56/EPdhT03GGM/ujj4cjWPVijfgkpfZu\n 7SVQWjW9990pCeyPDIRDebuRH2K80an+n2cIrhu6Him0EstX4uE8i1dyrnSmUgD/Huwe\n BfWr1K1EdPrtb3w9HFy3x3LEOiVhCk2Ehww5iqA6VvqfrlgPAze4D3A1ZItB3BYEAyMC iw==",
        "From": "<jerinj@marvell.com>",
        "To": "Jerin Jacob <jerinj@marvell.com>, Sunil Kumar Kori <skori@marvell.com>",
        "CC": "<dev@dpdk.org>, <thomas@monjalon.net>, <bruce.richardson@intel.com>,\n <david.marchand@redhat.com>, <mattias.ronnblom@ericsson.com>",
        "Date": "Sun, 19 Apr 2020 15:31:14 +0530",
        "Message-ID": "<20200419100133.3232316-15-jerinj@marvell.com>",
        "X-Mailer": "git-send-email 2.25.1",
        "In-Reply-To": "<20200419100133.3232316-1-jerinj@marvell.com>",
        "References": "<20200413150116.734047-1-jerinj@marvell.com>\n <20200419100133.3232316-1-jerinj@marvell.com>",
        "MIME-Version": "1.0",
        "Content-Transfer-Encoding": "8bit",
        "Content-Type": "text/plain",
        "X-Proofpoint-Virus-Version": "vendor=fsecure engine=2.50.10434:6.0.138, 18.0.676\n definitions=2020-04-19_02:2020-04-17,\n 2020-04-19 signatures=0",
        "Subject": "[dpdk-dev] [PATCH v6 14/33] eal/trace: implement provider payload",
        "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": "From: Jerin Jacob <jerinj@marvell.com>\n\nThe trace function payloads such as rte_trace_point_emit_* have\ndual functions. The first to emit the payload for the registration\nfunction and the second one to act as trace mem emitters a.k.a\nprovider payload.\n\nWhen it used as provider payload, those function copy the trace\nfield to trace memory based on the tracing mode.\n\nAdded payload definitions under ALLOW_EXPERIMENTAL define\nto allow the out_of_tree application to compile with out\nALLOW_EXPERIMENTAL flag.\n\nSigned-off-by: Jerin Jacob <jerinj@marvell.com>\nSigned-off-by: Sunil Kumar Kori <skori@marvell.com>\n---\n lib/librte_eal/include/rte_trace_point.h      | 18 ++++\n .../include/rte_trace_point_provider.h        | 90 +++++++++++++++++++\n 2 files changed, 108 insertions(+)",
    "diff": "diff --git a/lib/librte_eal/include/rte_trace_point.h b/lib/librte_eal/include/rte_trace_point.h\nindex f4e6d7e42..eca48db72 100644\n--- a/lib/librte_eal/include/rte_trace_point.h\n+++ b/lib/librte_eal/include/rte_trace_point.h\n@@ -281,6 +281,24 @@ int __rte_trace_point_register(rte_trace_point_t *trace, const char *name,\n #include <rte_trace_point_provider.h>\n #endif\n \n+#ifndef __DOXYGEN__\n+\n+#define rte_trace_point_emit_u64(in) __rte_trace_point_emit(in, uint64_t)\n+#define rte_trace_point_emit_i64(in) __rte_trace_point_emit(in, int64_t)\n+#define rte_trace_point_emit_u32(in) __rte_trace_point_emit(in, uint32_t)\n+#define rte_trace_point_emit_i32(in) __rte_trace_point_emit(in, int32_t)\n+#define rte_trace_point_emit_u16(in) __rte_trace_point_emit(in, uint16_t)\n+#define rte_trace_point_emit_i16(in) __rte_trace_point_emit(in, int16_t)\n+#define rte_trace_point_emit_u8(in) __rte_trace_point_emit(in, uint8_t)\n+#define rte_trace_point_emit_i8(in) __rte_trace_point_emit(in, int8_t)\n+#define rte_trace_point_emit_int(in) __rte_trace_point_emit(in, int32_t)\n+#define rte_trace_point_emit_long(in) __rte_trace_point_emit(in, long)\n+#define rte_trace_point_emit_float(in) __rte_trace_point_emit(in, float)\n+#define rte_trace_point_emit_double(in) __rte_trace_point_emit(in, double)\n+#define rte_trace_point_emit_ptr(in) __rte_trace_point_emit(in, uintptr_t)\n+\n+#endif\n+\n #ifdef __cplusplus\n }\n #endif\ndiff --git a/lib/librte_eal/include/rte_trace_point_provider.h b/lib/librte_eal/include/rte_trace_point_provider.h\nindex b8d727387..9fbfed757 100644\n--- a/lib/librte_eal/include/rte_trace_point_provider.h\n+++ b/lib/librte_eal/include/rte_trace_point_provider.h\n@@ -9,6 +9,10 @@\n #ifndef _RTE_TRACE_POINT_PROVIDER_H_\n #define _RTE_TRACE_POINT_PROVIDER_H_\n \n+#ifdef ALLOW_EXPERIMENTAL_API\n+\n+#include <rte_branch_prediction.h>\n+#include <rte_cycles.h>\n #include <rte_per_lcore.h>\n #include <rte_string_fns.h>\n #include <rte_uuid.h>\n@@ -38,4 +42,90 @@ struct __rte_trace_header {\n \n RTE_DECLARE_PER_LCORE(void *, trace_mem);\n \n+static __rte_always_inline void*\n+__rte_trace_mem_get(uint64_t in)\n+{\n+\tstruct __rte_trace_header *trace = RTE_PER_LCORE(trace_mem);\n+\tconst uint16_t sz = in & __RTE_TRACE_FIELD_SIZE_MASK;\n+\n+\t/* Trace memory is not initialized for this thread */\n+\tif (unlikely(trace == NULL)) {\n+\t\t__rte_trace_mem_per_thread_alloc();\n+\t\ttrace = RTE_PER_LCORE(trace_mem);\n+\t\tif (unlikely(trace == NULL))\n+\t\t\treturn NULL;\n+\t}\n+\t/* Check the wrap around case */\n+\tuint32_t offset = trace->offset;\n+\tif (unlikely((offset + sz) >= trace->len)) {\n+\t\t/* Disable the trace event if it in DISCARD mode */\n+\t\tif (unlikely(in & __RTE_TRACE_FIELD_ENABLE_DISCARD))\n+\t\t\treturn NULL;\n+\n+\t\toffset = 0;\n+\t}\n+\t/* Align to event header size */\n+\toffset = RTE_ALIGN_CEIL(offset, __RTE_TRACE_EVENT_HEADER_SZ);\n+\tvoid *mem = RTE_PTR_ADD(&trace->mem[0], offset);\n+\toffset += sz;\n+\ttrace->offset = offset;\n+\n+\treturn mem;\n+}\n+\n+static __rte_always_inline void*\n+__rte_trace_point_emit_ev_header(void *mem, uint64_t in)\n+{\n+\tuint64_t val;\n+\n+\t/* Event header [63:0] = id [63:48] | timestamp [47:0] */\n+\tval = rte_get_tsc_cycles() &\n+\t\t~(0xffffULL << __RTE_TRACE_EVENT_HEADER_ID_SHIFT);\n+\tval |= ((in & __RTE_TRACE_FIELD_ID_MASK) <<\n+\t      (__RTE_TRACE_EVENT_HEADER_ID_SHIFT - __RTE_TRACE_FIELD_ID_SHIFT));\n+\n+\t*(uint64_t *)mem = val;\n+\treturn RTE_PTR_ADD(mem, __RTE_TRACE_EVENT_HEADER_SZ);\n+}\n+\n+#define __rte_trace_point_emit_header_generic(t)\\\n+void *mem;\\\n+do {\\\n+\tconst uint64_t val = __atomic_load_n(t, __ATOMIC_ACQUIRE);\\\n+\tif (likely(!(val & __RTE_TRACE_FIELD_ENABLE_MASK)))\\\n+\t\treturn;\\\n+\tmem = __rte_trace_mem_get(val);\\\n+\tif (unlikely(mem == NULL)) \\\n+\t\treturn;\\\n+\tmem = __rte_trace_point_emit_ev_header(mem, val);\\\n+} while (0)\n+\n+#define __rte_trace_point_emit_header_fp(t)\\\n+\tif (__rte_trace_point_fp_is_enabled() == false)\\\n+\t\treturn;\\\n+\t__rte_trace_point_emit_header_generic(t)\n+\n+#define __rte_trace_point_emit(in, type)\\\n+do {\\\n+\tmemcpy(mem, &(in), sizeof(in));\\\n+\tmem = RTE_PTR_ADD(mem, sizeof(in));\\\n+} while (0)\n+\n+#define rte_trace_point_emit_string(in)\\\n+do {\\\n+\tif (unlikely(in == NULL))\\\n+\t\treturn;\\\n+\trte_strscpy(mem, in, __RTE_TRACE_EMIT_STRING_LEN_MAX);\\\n+\tmem = RTE_PTR_ADD(mem, __RTE_TRACE_EMIT_STRING_LEN_MAX);\\\n+} while (0)\n+\n+#else\n+\n+#define __rte_trace_point_emit_header_generic(t) RTE_SET_USED(t)\n+#define __rte_trace_point_emit_header_fp(t) RTE_SET_USED(t)\n+#define __rte_trace_point_emit(in, type) RTE_SET_USED(in)\n+#define rte_trace_point_emit_string(in) RTE_SET_USED(in)\n+\n+#endif\n+\n #endif /* _RTE_TRACE_POINT_PROVIDER_H_ */\n",
    "prefixes": [
        "v6",
        "14/33"
    ]
}