From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from dpdk.org (dpdk.org [92.243.14.124]) by inbox.dpdk.org (Postfix) with ESMTP id DB594A058B; Wed, 25 Mar 2020 22:17:55 +0100 (CET) Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id 9D2CE1C02A; Wed, 25 Mar 2020 22:16:39 +0100 (CET) Received: from mx0b-0016f401.pphosted.com (mx0b-0016f401.pphosted.com [67.231.156.173]) by dpdk.org (Postfix) with ESMTP id B97C01C044 for ; Wed, 25 Mar 2020 22:16:37 +0100 (CET) Received: from pps.filterd (m0045851.ppops.net [127.0.0.1]) by mx0b-0016f401.pphosted.com (8.16.0.42/8.16.0.42) with SMTP id 02PLF3pT026590; Wed, 25 Mar 2020 14:16:37 -0700 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=marvell.com; h=from : to : cc : subject : date : message-id : in-reply-to : references : mime-version : content-transfer-encoding : content-type; s=pfpt0818; bh=AUqK9SSjOJ8gWybzh8Us5Mv0zynmEHlEqkOgWzO1PF8=; b=BbdOWhMBMb9Mr/RwydRsk7XJaF71AlCag8B6Duu24lmdiQ16TGXzfC3pdpG6Ipa3ueq6 00a0vspQbyBmmeYZzhAKMV6vmprgdA6vhZnQlnXDo+XIMqkk8l28/z8McO5bxH68V4sC MNgpmZqBb86MC1O/TM/WDnfodWVmTD/ArnLIwQfp5CIO4Fp6MBwex09P+HOwfoIpNMiD gu1V1HkTP8Cxx2AgMZhIW1dbiq9d2ujfIuKkFgEQBRGHmP7lVakw7011DuP5zI2Ez5Gv 4ceyPhtY0T06lWGbzI7Nn0lIUfxSjfkugseOs69p8NA92in61RDCtuofUev62FL0xOD9 vg== Received: from sc-exch01.marvell.com ([199.233.58.181]) by mx0b-0016f401.pphosted.com with ESMTP id 300bpcrutd-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-SHA384 bits=256 verify=NOT); Wed, 25 Mar 2020 14:16:37 -0700 Received: from SC-EXCH03.marvell.com (10.93.176.83) by SC-EXCH01.marvell.com (10.93.176.81) with Microsoft SMTP Server (TLS) id 15.0.1497.2; Wed, 25 Mar 2020 14:16:34 -0700 Received: from maili.marvell.com (10.93.176.43) by SC-EXCH03.marvell.com (10.93.176.83) with Microsoft SMTP Server id 15.0.1497.2 via Frontend Transport; Wed, 25 Mar 2020 14:16:34 -0700 Received: from jerin-lab.marvell.com (jerin-lab.marvell.com [10.28.34.14]) by maili.marvell.com (Postfix) with ESMTP id E26653F703F; Wed, 25 Mar 2020 14:16:32 -0700 (PDT) From: To: CC: , , , , , , Jerin Jacob Date: Thu, 26 Mar 2020 02:45:43 +0530 Message-ID: <20200325211603.240288-14-jerinj@marvell.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20200325211603.240288-1-jerinj@marvell.com> References: <20200318190241.3150971-1-jerinj@marvell.com> <20200325211603.240288-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.645 definitions=2020-03-25_11:2020-03-24, 2020-03-25 signatures=0 Subject: [dpdk-dev] [PATCH v2 13/32] eal/trace: implement provider payload X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org Sender: "dev" From: Jerin Jacob The trace function payloads such as rte_trace_ctf_* have dual functions. The first to emit the payload for the registration function and the second one to act as trace mem emitters aka provider payload. When it used as provider payload, those function copy the trace field to trace memory based on the tracing mode. Signed-off-by: Jerin Jacob Signed-off-by: Sunil Kumar Kori --- .../common/include/rte_trace_provider.h | 94 +++++++++++++++++++ 1 file changed, 94 insertions(+) diff --git a/lib/librte_eal/common/include/rte_trace_provider.h b/lib/librte_eal/common/include/rte_trace_provider.h index 2257de85b..d3d7a922b 100644 --- a/lib/librte_eal/common/include/rte_trace_provider.h +++ b/lib/librte_eal/common/include/rte_trace_provider.h @@ -9,6 +9,9 @@ #ifndef _RTE_TRACE_PROVIDER_H_ #define _RTE_TRACE_PROVIDER_H_ +#include +#include +#include #include #include #include @@ -40,4 +43,95 @@ struct __rte_trace_header { RTE_DECLARE_PER_LCORE(void *, trace_mem); +static __rte_always_inline void* +__rte_trace_mem_get(uint64_t in) +{ + struct __rte_trace_header *trace = RTE_PER_LCORE(trace_mem); + const uint16_t sz = in & __RTE_TRACE_FIELD_SIZE_MASK; + + /* Trace memory is not initialized for this thread */ + if (unlikely(trace == NULL)) { + __rte_trace_mem_per_thread_alloc(); + trace = RTE_PER_LCORE(trace_mem); + if (unlikely(trace == NULL)) + return NULL; + } + /* Check the wrap around case */ + uint32_t offset = trace->offset; + if (unlikely((offset + sz) >= trace->len)) { + /* Disable the trace event if it in DISCARD mode */ + if (unlikely(in & __RTE_TRACE_FIELD_ENABLE_DISCARD)) + return NULL; + + offset = 0; + } + /* Align to event header size */ + offset = RTE_ALIGN_CEIL(offset, __RTE_TRACE_EVENT_HEADER_SZ); + void *mem = RTE_PTR_ADD(&trace->mem[0], offset); + offset += sz; + trace->offset = offset; + + return mem; +} + +static __rte_always_inline void* +__rte_trace_emit_ev_header(void *mem, uint64_t in) +{ + uint64_t val; + + /* Event header [63:0] = id [63:48] | timestamp [47:0] */ + val = rte_get_tsc_cycles() & + ~(0xffffULL << __RTE_TRACE_EVENT_HEADER_ID_SHIFT); + val |= ((in & __RTE_TRACE_FIELD_ID_MASK) << + (__RTE_TRACE_EVENT_HEADER_ID_SHIFT - __RTE_TRACE_FIELD_ID_SHIFT)); + + *(uint64_t *)mem = val; + return RTE_PTR_ADD(mem, __RTE_TRACE_EVENT_HEADER_SZ); +} + +#define __rte_trace_emit_header_generic(t)\ +void *mem;\ +do {\ + const uint64_t val = __atomic_load_n(t, __ATOMIC_ACQUIRE);\ + if (likely(!(val & __RTE_TRACE_FIELD_ENABLE_MASK)))\ + return;\ + mem = __rte_trace_mem_get(val);\ + if (unlikely(mem == NULL)) \ + return;\ + mem = __rte_trace_emit_ev_header(mem, val);\ +} while (0) + +#define __rte_trace_emit_header_dp(t)\ + if (rte_trace_is_dp_enabled())\ + return;\ + __rte_trace_emit_header_generic(t); + +#define __rte_trace_emit_datatype(in)\ +do {\ + memcpy(mem, &(in), sizeof(in));\ + mem = RTE_PTR_ADD(mem, sizeof(in));\ +} while (0) + +#define rte_trace_ctf_u64(in) __rte_trace_emit_datatype(in) +#define rte_trace_ctf_i64(in) __rte_trace_emit_datatype(in) +#define rte_trace_ctf_u32(in) __rte_trace_emit_datatype(in) +#define rte_trace_ctf_i32(in) __rte_trace_emit_datatype(in) +#define rte_trace_ctf_u16(in) __rte_trace_emit_datatype(in) +#define rte_trace_ctf_i16(in) __rte_trace_emit_datatype(in) +#define rte_trace_ctf_u8(in) __rte_trace_emit_datatype(in) +#define rte_trace_ctf_i8(in) __rte_trace_emit_datatype(in) +#define rte_trace_ctf_int(in) __rte_trace_emit_datatype(in) +#define rte_trace_ctf_long(in) __rte_trace_emit_datatype(in) +#define rte_trace_ctf_float(in) __rte_trace_emit_datatype(in) +#define rte_trace_ctf_ptr(in) __rte_trace_emit_datatype(in) +#define rte_trace_ctf_double(in) __rte_trace_emit_datatype(in) + +#define rte_trace_ctf_string(in)\ +do {\ + if (unlikely(in == NULL))\ + return;\ + rte_strscpy(mem, in, __RTE_TRACE_EMIT_STRING_LEN_MAX);\ + mem = RTE_PTR_ADD(mem, __RTE_TRACE_EMIT_STRING_LEN_MAX);\ +} while (0) + #endif /* _RTE_TRACE_PROVIDER_H_ */ -- 2.25.1