From patchwork Tue Nov 3 12:21:51 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Thomas Monjalon X-Patchwork-Id: 83563 X-Patchwork-Delegate: thomas@monjalon.net Return-Path: X-Original-To: patchwork@inbox.dpdk.org Delivered-To: patchwork@inbox.dpdk.org Received: from dpdk.org (dpdk.org [92.243.14.124]) by inbox.dpdk.org (Postfix) with ESMTP id 8BE76A0521; Tue, 3 Nov 2020 13:22:59 +0100 (CET) Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id 2043BC9CC; Tue, 3 Nov 2020 13:22:26 +0100 (CET) Received: from wout1-smtp.messagingengine.com (wout1-smtp.messagingengine.com [64.147.123.24]) by dpdk.org (Postfix) with ESMTP id 577CAC9CA for ; Tue, 3 Nov 2020 13:22:25 +0100 (CET) Received: from compute2.internal (compute2.nyi.internal [10.202.2.42]) by mailout.west.internal (Postfix) with ESMTP id EE361B55; Tue, 3 Nov 2020 07:22:22 -0500 (EST) Received: from mailfrontend2 ([10.202.2.163]) by compute2.internal (MEProxy); Tue, 03 Nov 2020 07:22:23 -0500 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=monjalon.net; h= from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; s=fm2; bh=hOTFRuzwV0V16 gYThHGH8LRGL01ovBSMKZ6CA4EGVdo=; b=hRldnOjcQGBP7IRMYU7PgHYRZKEFN XywiINrdnofnk7DUf0njGnbh7d+VAmvVyQcH74uJVq1f8s/1DaPN6npW1nJt/9De C5D5uGL9VbpHiroY3VbvKxqncQEyC5VGzLfd3nIiac6Ho5laXjJI6xx/ZydR/ivI nXZsSthxieJ9uTOZl68dPUz0WQnvsWXeWk3sYML74t1KfzNgMZjAwC93zgZ/9Aha nauDEF5UYhOqAJ36yRuZmAYmWwHdkj9dPpjKPiqwlGH+mXgGveoxoUV9IoC8oNsr mX1S98zyaPDejkqwEDAdoiZ5f4LpQNb3S7E8MSGgTG3L1smyVRLdMphPw== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d= messagingengine.com; h=cc:content-transfer-encoding:date:from :in-reply-to:message-id:mime-version:references:subject:to :x-me-proxy:x-me-proxy:x-me-sender:x-me-sender:x-sasl-enc; s= fm1; bh=hOTFRuzwV0V16gYThHGH8LRGL01ovBSMKZ6CA4EGVdo=; b=YH7fEReh y0T0Ntni9uUvQwKthx5XbFnP4gqnSlkKZq/VU3mkxrKevuR95rxCTfYtUEPNABLt xHbtQSgnA+ilbn+T+pwq4Q0dTaWctCBBoQucVIska8Lr6nlZKF+gCliw9NO1BYAF qn2xSVM0J1gMAeVoYO9HHVGEQ3+r/Y7gadHM3PD3XVzpqae+OcWbj2L/8S2vFGhn nAjH3X2TG15xEKyc4yOW4uRcY571KBs2Ca3vMuJ3W0MlJpDTCmk8Q3zoeDJ8QLp5 wm54qyDSeqsu1yFtgEzLDj6HNhbJmumUEhWDA85KvNqe0mUQLRfqzrvq9kMxC0MU W4ii8HBNi+sDkg== X-ME-Sender: X-ME-Proxy-Cause: gggruggvucftvghtrhhoucdtuddrgedujedruddtfedgfeelucetufdoteggodetrfdotf fvucfrrhhofhhilhgvmecuhfgrshhtofgrihhlpdfqfgfvpdfurfetoffkrfgpnffqhgen uceurghilhhouhhtmecufedttdenucesvcftvggtihhpihgvnhhtshculddquddttddmne cujfgurhephffvufffkffojghfggfgsedtkeertdertddtnecuhfhrohhmpefvhhhomhgr shcuofhonhhjrghlohhnuceothhhohhmrghssehmohhnjhgrlhhonhdrnhgvtheqnecugg ftrfgrthhtvghrnhepvdehgfeivdejgedtveehfefhteelfefgieevgfffveefjeegtdfg uedthedtgeevnecukfhppeejjedrudefgedrvddtfedrudekgeenucevlhhushhtvghruf hiiigvpedvnecurfgrrhgrmhepmhgrihhlfhhrohhmpehthhhomhgrshesmhhonhhjrghl ohhnrdhnvght X-ME-Proxy: Received: from xps.monjalon.net (184.203.134.77.rev.sfr.net [77.134.203.184]) by mail.messagingengine.com (Postfix) with ESMTPA id 5939B3064683; Tue, 3 Nov 2020 07:22:20 -0500 (EST) From: Thomas Monjalon To: dev@dpdk.org Cc: ferruh.yigit@intel.com, david.marchand@redhat.com, bruce.richardson@intel.com, olivier.matz@6wind.com, andrew.rybchenko@oktetlabs.ru, jerinj@marvell.com, viacheslavo@nvidia.com, Ray Kinsella , Neil Horman Date: Tue, 3 Nov 2020 13:21:51 +0100 Message-Id: <20201103122205.183472-3-thomas@monjalon.net> X-Mailer: git-send-email 2.28.0 In-Reply-To: <20201103122205.183472-1-thomas@monjalon.net> References: <20201029092751.3837177-1-thomas@monjalon.net> <20201103122205.183472-1-thomas@monjalon.net> MIME-Version: 1.0 Subject: [dpdk-dev] [PATCH v4 02/16] mbuf: add Rx timestamp flag and helpers 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" There is already a dynamic field for timestamp, used only for Tx scheduling with the dedicated Tx offload flag. The same field can be used for Rx timestamp filled by drivers. A new dynamic flag is defined for Rx usage. A new function wraps the registration of both field and Rx flag. The type rte_mbuf_timestamp_t is defined for the API users. After migrating all Rx timestamp usages, it will be possible to remove the deprecated timestamp field. Signed-off-by: Thomas Monjalon Acked-by: David Marchand Acked-by: Andrew Rybchenko --- lib/librte_mbuf/rte_mbuf_dyn.c | 43 ++++++++++++++++++++++++++++++++++ lib/librte_mbuf/rte_mbuf_dyn.h | 33 ++++++++++++++++++++++---- lib/librte_mbuf/version.map | 1 + 3 files changed, 72 insertions(+), 5 deletions(-) diff --git a/lib/librte_mbuf/rte_mbuf_dyn.c b/lib/librte_mbuf/rte_mbuf_dyn.c index 538a43f695..5b608a27d7 100644 --- a/lib/librte_mbuf/rte_mbuf_dyn.c +++ b/lib/librte_mbuf/rte_mbuf_dyn.c @@ -13,6 +13,7 @@ #include #include #include +#include #include #include @@ -569,3 +570,45 @@ void rte_mbuf_dyn_dump(FILE *out) rte_mcfg_tailq_write_unlock(); } + +static int +rte_mbuf_dyn_timestamp_register(int *field_offset, uint64_t *flag, + const char *direction, const char *flag_name) +{ + static const struct rte_mbuf_dynfield field_desc = { + .name = RTE_MBUF_DYNFIELD_TIMESTAMP_NAME, + .size = sizeof(rte_mbuf_timestamp_t), + .align = __alignof__(rte_mbuf_timestamp_t), + }; + struct rte_mbuf_dynflag flag_desc = { 0 }; + int offset; + + offset = rte_mbuf_dynfield_register(&field_desc); + if (offset < 0) { + RTE_LOG(ERR, MBUF, + "Failed to register mbuf field for timestamp\n"); + return -1; + } + if (field_offset != NULL) + *field_offset = offset; + + strlcpy(flag_desc.name, flag_name, sizeof(flag_desc.name)); + offset = rte_mbuf_dynflag_register(&flag_desc); + if (offset < 0) { + RTE_LOG(ERR, MBUF, + "Failed to register mbuf flag for %s timestamp\n", + direction); + return -1; + } + if (flag != NULL) + *flag = RTE_BIT64(offset); + + return 0; +} + +int +rte_mbuf_dyn_rx_timestamp_register(int *field_offset, uint64_t *rx_flag) +{ + return rte_mbuf_dyn_timestamp_register(field_offset, rx_flag, + "Rx", RTE_MBUF_DYNFLAG_RX_TIMESTAMP_NAME); +} diff --git a/lib/librte_mbuf/rte_mbuf_dyn.h b/lib/librte_mbuf/rte_mbuf_dyn.h index 0ebac88b83..2e729ddaca 100644 --- a/lib/librte_mbuf/rte_mbuf_dyn.h +++ b/lib/librte_mbuf/rte_mbuf_dyn.h @@ -258,13 +258,36 @@ void rte_mbuf_dyn_dump(FILE *out); * timestamp. The dynamic Tx timestamp flag tells whether the field contains * actual timestamp value for the packets being sent, this value can be * used by PMD to schedule packet sending. - * - * After PKT_RX_TIMESTAMP flag and fixed timestamp field deprecation - * and obsoleting, the dedicated Rx timestamp flag is supposed to be - * introduced and the shared dynamic timestamp field will be used - * to handle the timestamps on receiving datapath as well. */ #define RTE_MBUF_DYNFIELD_TIMESTAMP_NAME "rte_dynfield_timestamp" +typedef uint64_t rte_mbuf_timestamp_t; + +/** + * Indicate that the timestamp field in the mbuf was filled by the driver. + */ +#define RTE_MBUF_DYNFLAG_RX_TIMESTAMP_NAME "rte_dynflag_rx_timestamp" + +/** + * @warning + * @b EXPERIMENTAL: this API may change without prior notice. + * + * Register dynamic mbuf field and flag for Rx timestamp. + * + * @param field_offset + * Pointer to the offset of the registered mbuf field, can be NULL. + * The same field is shared for Rx and Tx timestamp. + * @param rx_flag + * Pointer to the mask of the registered offload flag, can be NULL. + * @return + * 0 on success, -1 otherwise. + * Possible values for rte_errno: + * - EEXIST: already registered with different parameters. + * - EPERM: called from a secondary process. + * - ENOENT: no more field or flag available. + * - ENOMEM: allocation failure. + */ +__rte_experimental +int rte_mbuf_dyn_rx_timestamp_register(int *field_offset, uint64_t *rx_flag); /** * When PMD sees the RTE_MBUF_DYNFLAG_TX_TIMESTAMP_NAME flag set on the diff --git a/lib/librte_mbuf/version.map b/lib/librte_mbuf/version.map index a011aaead3..0b66668bff 100644 --- a/lib/librte_mbuf/version.map +++ b/lib/librte_mbuf/version.map @@ -42,6 +42,7 @@ EXPERIMENTAL { rte_mbuf_dynflag_register; rte_mbuf_dynflag_register_bitnum; rte_mbuf_dyn_dump; + rte_mbuf_dyn_rx_timestamp_register; rte_pktmbuf_copy; rte_pktmbuf_free_bulk; rte_pktmbuf_pool_create_extbuf;