From patchwork Fri Jul 24 20:23:12 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Patrick Keroulas X-Patchwork-Id: 74790 X-Patchwork-Delegate: ferruh.yigit@amd.com 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 DBFE7A0526; Fri, 24 Jul 2020 22:23:44 +0200 (CEST) Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id BD7CC1C038; Fri, 24 Jul 2020 22:23:35 +0200 (CEST) Received: from mail-qk1-f196.google.com (mail-qk1-f196.google.com [209.85.222.196]) by dpdk.org (Postfix) with ESMTP id 5F7621C030 for ; Fri, 24 Jul 2020 22:23:33 +0200 (CEST) Received: by mail-qk1-f196.google.com with SMTP id l6so9837721qkc.6 for ; Fri, 24 Jul 2020 13:23:33 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=radio-canada-ca.20150623.gappssmtp.com; s=20150623; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=aVyAg4dqd0OS+9KW6F8yVjmtF/I7QUySF01v+nol8b8=; b=r8pGnndy1OF2aqXFezvAAaQDsx4poxKTAmMTGxxDxT1c9ZYgT5zZYpyNBajfEPSh6O 8L4xwpzKRBL+SCfeCHad2bhvKJ1Cgq86fE5/5DkGwECdurZQ9yyZeWSJajEwqpI5FLy1 8rpPy+dWqb6JFYHDrhuaYUEAJch2r/SWjAIrkhxLR/9mXGp6qG35Qqi5cBVfe4MjLgMN IGgtU+clx58uSkZXAji8mf3RLwTFmdR6eIkjZqk09C+qJ4JZU55awLNq1oH1FeToG4f8 zxrGn50vsVDiixeTjJi0315sgu7Q4HdyXHeTbNHCPVZj7cGAmhzKwezsKG4yBYoHQFuP /RsA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=aVyAg4dqd0OS+9KW6F8yVjmtF/I7QUySF01v+nol8b8=; b=HoFAbECmn4w8BwTXOZRxDbPP3kWMW5rYis/0OXmFWU3eB205aMM2e1SAVJdCC5vN6r nH7jmB4l+XV4NCt3QRBdQG46iryotJpuwg8QBBZbO3pvYmeccSY8U2Gxe+1eX8oK4wfs 4mFfyBw9jd6JSsCHIogif9I01RDKYxEni/tRi3OlmJegOEqLkgoHpHamN3lY7R1Fj3b/ ivO33QiblZy5Qz0AtbJZjeey30hS6HKont5jsIrr5r2ZuKdW5c/EUPP4UqoUWtwqqqYG Q7ywccFtPn7kD9A/OPyiVWh+uvoOLReeh2kbxyTy34osARs5ZDXEUfvwj/DNuJPPq9ZH 0nKQ== X-Gm-Message-State: AOAM533/zm2Yfp8IH4A3Oieab8jK82Myd96sSAKd+vXvCHH3HndAFEJL 5hySWX7CfTodoMbY9YTpdvTlz6r+/TI= X-Google-Smtp-Source: ABdhPJzubse5x4Iyz9ODIF8pqviN9deqOojAZtdyXatT2W4n+hj4dHJ6Fgj6MAYzq7oiQf27Uqxusg== X-Received: by 2002:a05:620a:699:: with SMTP id f25mr11529895qkh.200.1595622212606; Fri, 24 Jul 2020 13:23:32 -0700 (PDT) Received: from localhost.localdomain (modemcable246.10-73-45.static.videotron.ca. [45.73.10.246]) by smtp.gmail.com with ESMTPSA id f7sm5216089qkj.32.2020.07.24.13.23.31 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 24 Jul 2020 13:23:32 -0700 (PDT) From: Patrick Keroulas To: dev@dpdk.org Cc: Patrick Keroulas Date: Fri, 24 Jul 2020 16:23:12 -0400 Message-Id: <20200724202315.19533-2-patrick.keroulas@radio-canada.ca> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20200724202315.19533-1-patrick.keroulas@radio-canada.ca> References: <20200724202315.19533-1-patrick.keroulas@radio-canada.ca> Subject: [dpdk-dev] [[PATCH v3 1/4] net/mlx5: query device frequency 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" Get clock frequency (constant) from HCA attributes and add an accessor. Signed-off-by: Patrick Keroulas --- drivers/common/mlx5/mlx5_devx_cmds.c | 2 ++ drivers/common/mlx5/mlx5_devx_cmds.h | 1 + drivers/net/mlx5/linux/mlx5_ethdev_os.c | 22 ++++++++++++++++++++++ drivers/net/mlx5/linux/mlx5_os.c | 1 + drivers/net/mlx5/mlx5.h | 1 + 5 files changed, 27 insertions(+) diff --git a/drivers/common/mlx5/mlx5_devx_cmds.c b/drivers/common/mlx5/mlx5_devx_cmds.c index d1c674c7cf..e6671e3122 100644 --- a/drivers/common/mlx5/mlx5_devx_cmds.c +++ b/drivers/common/mlx5/mlx5_devx_cmds.c @@ -673,6 +673,8 @@ mlx5_devx_cmd_query_hca_attr(void *ctx, MLX5_GET(cmd_hca_cap, hcattr, flow_counter_bulk_alloc); attr->flow_counters_dump = MLX5_GET(cmd_hca_cap, hcattr, flow_counters_dump); + attr->device_frequency_khz = MLX5_GET(cmd_hca_cap, hcattr, + device_frequency_khz); attr->log_max_rqt_size = MLX5_GET(cmd_hca_cap, hcattr, log_max_rqt_size); attr->eswitch_manager = MLX5_GET(cmd_hca_cap, hcattr, eswitch_manager); diff --git a/drivers/common/mlx5/mlx5_devx_cmds.h b/drivers/common/mlx5/mlx5_devx_cmds.h index 528cb7bdd1..cbe450c4b1 100644 --- a/drivers/common/mlx5/mlx5_devx_cmds.h +++ b/drivers/common/mlx5/mlx5_devx_cmds.h @@ -87,6 +87,7 @@ struct mlx5_hca_attr { uint32_t lro_timer_supported_periods[MLX5_LRO_NUM_SUPP_PERIODS]; uint32_t flex_parser_protocols; uint32_t hairpin:1; + uint32_t device_frequency_khz:20; uint32_t log_max_hairpin_queues:5; uint32_t log_max_hairpin_wq_data_sz:5; uint32_t log_max_hairpin_num_packets:5; diff --git a/drivers/net/mlx5/linux/mlx5_ethdev_os.c b/drivers/net/mlx5/linux/mlx5_ethdev_os.c index 3d3dd2e862..628a909c8d 100644 --- a/drivers/net/mlx5/linux/mlx5_ethdev_os.c +++ b/drivers/net/mlx5/linux/mlx5_ethdev_os.c @@ -301,6 +301,28 @@ mlx5_read_clock(struct rte_eth_dev *dev, uint64_t *clock) return 0; } +/** + * Get the clock frequency of ethernet device, in Hz + * + * @param dev + * Pointer to Ethernet device structure. + * @param[out] freq + * Pointer to the device clock frequency. + * + * @return + * 0 if the clock has correctly been read + * The value of errno in case of error + */ +int +mlx5_get_clock_freq(struct rte_eth_dev *dev, uint64_t *freq) +{ + struct mlx5_priv *priv = dev->data->dev_private; + + *freq = priv->config.hca_attr.device_frequency_khz * 1000; + + return 0; +} + /** * Retrieve the master device for representor in the same switch domain. * diff --git a/drivers/net/mlx5/linux/mlx5_os.c b/drivers/net/mlx5/linux/mlx5_os.c index fa3b02787e..234e95dbb1 100644 --- a/drivers/net/mlx5/linux/mlx5_os.c +++ b/drivers/net/mlx5/linux/mlx5_os.c @@ -2342,6 +2342,7 @@ const struct eth_dev_ops mlx5_os_dev_ops = { .fw_version_get = mlx5_fw_version_get, .dev_infos_get = mlx5_dev_infos_get, .read_clock = mlx5_txpp_read_clock, + .get_clock_freq = mlx5_get_clock_freq, .dev_supported_ptypes_get = mlx5_dev_supported_ptypes_get, .vlan_filter_set = mlx5_vlan_filter_set, .rx_queue_setup = mlx5_rx_queue_setup, diff --git a/drivers/net/mlx5/mlx5.h b/drivers/net/mlx5/mlx5.h index a92194d2dd..0ccfb6b8d9 100644 --- a/drivers/net/mlx5/mlx5.h +++ b/drivers/net/mlx5/mlx5.h @@ -820,6 +820,7 @@ int mlx5_get_mac(struct rte_eth_dev *dev, uint8_t (*mac)[RTE_ETHER_ADDR_LEN]); int mlx5_get_mtu(struct rte_eth_dev *dev, uint16_t *mtu); int mlx5_set_mtu(struct rte_eth_dev *dev, uint16_t mtu); int mlx5_read_clock(struct rte_eth_dev *dev, uint64_t *clock); +int mlx5_get_clock_freq(struct rte_eth_dev *dev, uint64_t *freq); int mlx5_link_update(struct rte_eth_dev *dev, int wait_to_complete); int mlx5_dev_get_flow_ctrl(struct rte_eth_dev *dev, struct rte_eth_fc_conf *fc_conf); From patchwork Fri Jul 24 20:23:13 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Patrick Keroulas X-Patchwork-Id: 74791 X-Patchwork-Delegate: ferruh.yigit@amd.com 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 0B842A0526; Fri, 24 Jul 2020 22:23:52 +0200 (CEST) Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id 512CB1C065; Fri, 24 Jul 2020 22:23:37 +0200 (CEST) Received: from mail-qk1-f193.google.com (mail-qk1-f193.google.com [209.85.222.193]) by dpdk.org (Postfix) with ESMTP id 6090B1C034 for ; Fri, 24 Jul 2020 22:23:34 +0200 (CEST) Received: by mail-qk1-f193.google.com with SMTP id 11so9881794qkn.2 for ; Fri, 24 Jul 2020 13:23:34 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=radio-canada-ca.20150623.gappssmtp.com; s=20150623; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=HJG68ZzOlPr3cJN9Ojy0Owngi2KF0UCwBwFr8GmwT8s=; b=RsaJn8KtSvavFKJBZCcy54bc/Ggumj+P3BnYTLdEVhyAkYmRirQx+ND0BUrP7jgg9O s2zPC2qaTVAiBs3x6aj5pXJMeJGayziy2AvQaqbPlkSLCvcoGyDyyY0jLHiP7Jb1Mj0z scBMghCSrMQZaRV2JnaNsMhSHsnNDKaCRE+YCALbeNaBndRrx6PaJ+ctSk6tqe+ScY+F k0O1M5V5vsHHn5u+GKW9m0SHIWBNM9B432oI1WLLblYTq70OOYsRfoIbmN1YJr+TD4tR POiiMEQKP9L7P4NYA+tqqO32dAK8y9cAnarW0Y754VL0V7VcH4MsVqR74ncywD0rGFCD zorg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=HJG68ZzOlPr3cJN9Ojy0Owngi2KF0UCwBwFr8GmwT8s=; b=eOE4m2EPl/S+pGbhxsKQXPfMcDJdcezAk/iovbj+wxqky+78FViH43MZeUIipcXMpy 1c6vdlXtUKrKkgj1BIRr3A2HqGNQgWE5h+QD4kKdQmEyV/HnZeDgZcbZjFsQ3Xgx52ut b6G5hDRuAYY9LS3RPX/8y1VHxLWq3tc78TG6lVhcHIu1Ht2+G4gOrKKdIDmkNf3+5vnu cixqa+fxfxBHpYj3cpcWaVif/YUCpQ7OCoV11feEC6wgYs1CTuI5zIWNdcIjzogTP+te uLxeHFRjx4mlkz0Ho6iiniUd7QSccexyG1vCCj2EhUKttWJ5Ux8nfph4yKPnH5eCPcCi wNcQ== X-Gm-Message-State: AOAM532xqfIYGI6NZj5gsWeLlotYR1dEVg1Zs3zIqop7JmQ4ai64KJgI tUQuoaUuycjIQYh1cnUYF6Ffrcat7UQ= X-Google-Smtp-Source: ABdhPJyZ3G8tcpynGUaP5A19vMJsc7XlW16VU6XQFJ6I79OsM7t8Exc0bOHR0tDcpZiRqUhdADbkhg== X-Received: by 2002:a37:de19:: with SMTP id h25mr12278494qkj.354.1595622213529; Fri, 24 Jul 2020 13:23:33 -0700 (PDT) Received: from localhost.localdomain (modemcable246.10-73-45.static.videotron.ca. [45.73.10.246]) by smtp.gmail.com with ESMTPSA id f7sm5216089qkj.32.2020.07.24.13.23.32 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 24 Jul 2020 13:23:33 -0700 (PDT) From: Patrick Keroulas To: dev@dpdk.org Cc: Patrick Keroulas Date: Fri, 24 Jul 2020 16:23:13 -0400 Message-Id: <20200724202315.19533-3-patrick.keroulas@radio-canada.ca> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20200724202315.19533-1-patrick.keroulas@radio-canada.ca> References: <20200724202315.19533-1-patrick.keroulas@radio-canada.ca> Subject: [dpdk-dev] [[PATCH v3 2/4] ethdev: add API to query device frequency 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" Signed-off-by: Patrick Keroulas --- lib/librte_ethdev/rte_ethdev.c | 12 ++++++++++++ lib/librte_ethdev/rte_ethdev.h | 17 +++++++++++++++++ lib/librte_ethdev/rte_ethdev_core.h | 5 +++++ lib/librte_ethdev/rte_ethdev_version.map | 2 ++ 4 files changed, 36 insertions(+) diff --git a/lib/librte_ethdev/rte_ethdev.c b/lib/librte_ethdev/rte_ethdev.c index 7858ad5f11..8e8812782f 100644 --- a/lib/librte_ethdev/rte_ethdev.c +++ b/lib/librte_ethdev/rte_ethdev.c @@ -4882,6 +4882,18 @@ rte_eth_read_clock(uint16_t port_id, uint64_t *clock) return eth_err(port_id, (*dev->dev_ops->read_clock)(dev, clock)); } +int +rte_eth_get_clock_freq(uint16_t port_id, uint64_t *freq) +{ + struct rte_eth_dev *dev; + + RTE_ETH_VALID_PORTID_OR_ERR_RET(port_id, -ENODEV); + dev = &rte_eth_devices[port_id]; + + RTE_FUNC_PTR_OR_ERR_RET(*dev->dev_ops->get_clock_freq, -ENOTSUP); + return eth_err(port_id, (*dev->dev_ops->get_clock_freq)(dev, freq)); +} + int rte_eth_dev_get_reg_info(uint16_t port_id, struct rte_dev_reg_info *info) { diff --git a/lib/librte_ethdev/rte_ethdev.h b/lib/librte_ethdev/rte_ethdev.h index 57e4a6ca58..d17838e66f 100644 --- a/lib/librte_ethdev/rte_ethdev.h +++ b/lib/librte_ethdev/rte_ethdev.h @@ -4264,6 +4264,23 @@ __rte_experimental int rte_eth_read_clock(uint16_t port_id, uint64_t *clock); +/** + * Get the clock frequency of ethernet device, in Hz + * + * @param port_id + * The port identifier of the Ethernet device. + * @param[out] freq + * Pointer to the device clock frequency. + * + * @return + * - 0: Success. + * - -ENODEV: The port ID is invalid. + * - -ENOTSUP: The function is not supported by the Ethernet driver. + */ +__rte_experimental +int +rte_eth_get_clock_freq(uint16_t port_id, uint64_t *freq); + /** * Config l2 tunnel ether type of an Ethernet device for filtering specific * tunnel packets by ether type. diff --git a/lib/librte_ethdev/rte_ethdev_core.h b/lib/librte_ethdev/rte_ethdev_core.h index 32407dd418..ac64961e6f 100644 --- a/lib/librte_ethdev/rte_ethdev_core.h +++ b/lib/librte_ethdev/rte_ethdev_core.h @@ -468,6 +468,10 @@ typedef int (*eth_read_clock)(struct rte_eth_dev *dev, uint64_t *timestamp); /**< @internal Function used to get the current value of the device clock. */ +typedef int (*eth_get_clock_freq)(struct rte_eth_dev *dev, + uint64_t *freq); +/**< @internal Function used to frequency from device clock */ + typedef int (*eth_get_reg_t)(struct rte_eth_dev *dev, struct rte_dev_reg_info *info); /**< @internal Retrieve registers */ @@ -731,6 +735,7 @@ struct eth_dev_ops { eth_timesync_write_time timesync_write_time; /** Set the device clock time. */ eth_read_clock read_clock; + eth_get_clock_freq get_clock_freq; eth_xstats_get_by_id_t xstats_get_by_id; /**< Get extended device statistic values by ID. */ diff --git a/lib/librte_ethdev/rte_ethdev_version.map b/lib/librte_ethdev/rte_ethdev_version.map index 1212a17d32..ffc00bf94f 100644 --- a/lib/librte_ethdev/rte_ethdev_version.map +++ b/lib/librte_ethdev/rte_ethdev_version.map @@ -241,6 +241,8 @@ EXPERIMENTAL { __rte_ethdev_trace_rx_burst; __rte_ethdev_trace_tx_burst; rte_flow_get_aged_flows; + + rte_eth_get_clock_freq; }; INTERNAL { From patchwork Fri Jul 24 20:23:14 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Patrick Keroulas X-Patchwork-Id: 74792 X-Patchwork-Delegate: ferruh.yigit@amd.com 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 A7AF3A0526; Fri, 24 Jul 2020 22:24:03 +0200 (CEST) Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id 88B4D1C0AC; Fri, 24 Jul 2020 22:23:41 +0200 (CEST) Received: from mail-qk1-f195.google.com (mail-qk1-f195.google.com [209.85.222.195]) by dpdk.org (Postfix) with ESMTP id 16F681C036 for ; Fri, 24 Jul 2020 22:23:35 +0200 (CEST) Received: by mail-qk1-f195.google.com with SMTP id h7so9833436qkk.7 for ; Fri, 24 Jul 2020 13:23:35 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=radio-canada-ca.20150623.gappssmtp.com; s=20150623; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=d4J8GL2P60emupUK6J06ILs+5iZkXAkCw+Y77iftfbc=; b=Vl0FVSnCwuekofc0OTXaRjOOmOwcSR+BHZrK7kwP2paHA7UDkCFXUmNoKvc1yU9gRw 1IhoMaJCuv3n1cv9ovi+GqQuFtbGW1tM6v0ZzbGCGR8d3L58WLyA/wMw7tkCsOj/ysGb CCmgoBEWbeHh23zfuhVKbiva+Z3vvITpNXF3w/+Rx93v0gw6EggZlFH1V7iK8lJeWJZe IH6yJYw4NYZsZ0znvK4/AKoIejW9R3qvnveLAIvQSF/UqG7O88+iUoA+6CtNrSm2qqvY nD+VafGWxPumVc/wG+kAP6xyJX2dpU+B3egJHy8P14pKvbAFkx1fQIRBTuLH0mDgTkK7 0BaQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=d4J8GL2P60emupUK6J06ILs+5iZkXAkCw+Y77iftfbc=; b=XYdXey8oq/8PtoPoDGmwINEs8awgpFkl1zfaDEpO+gJdCYAcEdfHLpOO0wFrlhDBUw ywtdoSW5AQzgEIJLKxaFN09ZXymN82q5xg4Ax6t/t5eAxgtkgBT6CMIaGQFc2GUV7NBH BYDg6EFS9Rc7caAz5FkCYn2vJHWgg4i91Im2JSLVZqFAO3/f7mzP1pB4KTPXbGnOsv8+ y1arOd1hB39/hsBuotqyUp1dm+kXmcLOBUKV6XLBDDuSUqn4Xrg2fBQRT2+kAB/dc/YS K2HprtoSL81/vmb5XLkd+YcdNM6bX5h/Z2KB3+d0+UQ4LQGQkxTtaJNI3PFnQu5BkTpK Ui0A== X-Gm-Message-State: AOAM531IMV60M13lXUngM+/QKL2f2Cn+WFUZssX0vBaGJyga+y+Or1er aj+LGitfiRhe23tqq+mDCDwT3BcH5kQ= X-Google-Smtp-Source: ABdhPJw5Sa2sWoE2/ab5lBJB0Pd1aAd8tGdRnnCkWgWsAIQY78FzJza9DAoMK7ybMT3KJnYPsbsd2w== X-Received: by 2002:a37:a4c2:: with SMTP id n185mr12931878qke.373.1595622214392; Fri, 24 Jul 2020 13:23:34 -0700 (PDT) Received: from localhost.localdomain (modemcable246.10-73-45.static.videotron.ca. [45.73.10.246]) by smtp.gmail.com with ESMTPSA id f7sm5216089qkj.32.2020.07.24.13.23.33 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 24 Jul 2020 13:23:34 -0700 (PDT) From: Patrick Keroulas To: dev@dpdk.org Cc: Patrick Keroulas Date: Fri, 24 Jul 2020 16:23:14 -0400 Message-Id: <20200724202315.19533-4-patrick.keroulas@radio-canada.ca> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20200724202315.19533-1-patrick.keroulas@radio-canada.ca> References: <20200724202315.19533-1-patrick.keroulas@radio-canada.ca> Subject: [dpdk-dev] [[PATCH v3 3/4] pdump: convert timestamp to nanoseconds on Rx path 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" Use start time and device frequency to translate raw Rx hardware timestamps into nanoseconds. Signed-off-by: Patrick Keroulas --- lib/librte_pdump/rte_pdump.c | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) diff --git a/lib/librte_pdump/rte_pdump.c b/lib/librte_pdump/rte_pdump.c index b3c8d5ce43..8fd7e13af5 100644 --- a/lib/librte_pdump/rte_pdump.c +++ b/lib/librte_pdump/rte_pdump.c @@ -2,6 +2,8 @@ * Copyright(c) 2016-2018 Intel Corporation */ +#include + #include #include #include @@ -69,6 +71,21 @@ static struct pdump_rxtx_cbs { } rx_cbs[RTE_MAX_ETHPORTS][RTE_MAX_QUEUES_PER_PORT], tx_cbs[RTE_MAX_ETHPORTS][RTE_MAX_QUEUES_PER_PORT]; +static uint64_t hz; +static uint64_t start_time; +static uint64_t start_cycles; + +static inline void +pdump_ts_to_ns(struct rte_mbuf **pkts, uint16_t nb_pkts) +{ + unsigned int i; + + for (i = 0; i < nb_pkts; i++) { + if ((pkts[i]->ol_flags & PKT_RX_TIMESTAMP) && hz) + pkts[i]->timestamp = start_time + + (pkts[i]->timestamp - start_cycles) * NS_PER_S / hz; + } +} static inline void pdump_copy(struct rte_mbuf **pkts, uint16_t nb_pkts, void *user_params) @@ -107,6 +124,7 @@ pdump_rx(uint16_t port __rte_unused, uint16_t qidx __rte_unused, uint16_t max_pkts __rte_unused, void *user_params) { + pdump_ts_to_ns(pkts, nb_pkts); pdump_copy(pkts, nb_pkts, user_params); return nb_pkts; } @@ -131,6 +149,13 @@ pdump_register_rx_callbacks(uint16_t end_q, uint16_t port, uint16_t queue, for (; qid < end_q; qid++) { cbs = &rx_cbs[port][qid]; if (cbs && operation == ENABLE) { + struct timeval now; + + rte_eth_read_clock(port, &start_cycles); + rte_eth_get_clock_freq(port, &hz); + gettimeofday(&now, NULL); + start_time = now.tv_sec * NS_PER_S + now.tv_usec * 1000; + if (cbs->cb) { PDUMP_LOG(ERR, "failed to add rx callback for port=%d " From patchwork Fri Jul 24 20:23:15 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Patrick Keroulas X-Patchwork-Id: 74793 X-Patchwork-Delegate: ferruh.yigit@amd.com 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 465AAA0526; Fri, 24 Jul 2020 22:24:10 +0200 (CEST) Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id C347D1C0B1; Fri, 24 Jul 2020 22:23:42 +0200 (CEST) Received: from mail-qv1-f68.google.com (mail-qv1-f68.google.com [209.85.219.68]) by dpdk.org (Postfix) with ESMTP id 509AA1C043 for ; Fri, 24 Jul 2020 22:23:36 +0200 (CEST) Received: by mail-qv1-f68.google.com with SMTP id ed14so4711558qvb.2 for ; Fri, 24 Jul 2020 13:23:36 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=radio-canada-ca.20150623.gappssmtp.com; s=20150623; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=IMmxATRmW+DN5TwZ77KMewfw+/X9d+omoIHifKJZ80E=; b=KA7D7ebBvmC4K0j5jpO/etAZCUb85lEahue4hH1VeBbNS6tF+3NXQgkubsx1NBRIgD GwxSreuHRf88xXoZcUZNhWYLT+o6lmdcEIW+tOCW4dGujpAEQZQxp+guMGJv9xpkDAt1 WZUqw/USGhAu8Ula/vrsrQAFCsud6HGIkQnrZQ5P+RjQAKngzOrSOJO+XppbXR38qon9 T8nPfgvhm1ciUnXhDUJiLmPAWV55rR7tzT+WZSfflyyC9LU6YqY1CBtko7bl/pxTEs76 ZqVb2/cCyhy2OK0vbZtji2B9jy2JOVzS0wKWH4Qlacy8lEdq1twi3Gp15z8b1HQXKuci IIIA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=IMmxATRmW+DN5TwZ77KMewfw+/X9d+omoIHifKJZ80E=; b=V3awv6am9ycOR/C6vSq+a6A8bNIEktA3/N0EmD0tGQ7e1KbiWy9uVN2TM1wVH92c0J /I9JU88ggZyWY957sWTSSbE11u7hTQUkm0r1XaWtgCl+ljwirpBLF3QnJ006b0B1EwX+ axIgSHWuaQxKaSOtXW9B0BizeclYbZLYxNYzMIa9xupiibjHGo/GoFRrMDdIuNPJogEC xcCH29U+adwtoSRLPnE1Mi/Nn2D3sDMs5KloNLyZd3HuPdM5YI5O8TtMdIQPPqg+w2MX 45GjYpGPnV5ZfemExBmfo18RBBp5Tl/AvGqhfWWWxFrXkd6uAdw3jEeRXPZE9XYbbdoO RF/g== X-Gm-Message-State: AOAM533knO1TQSELgrk/S/M0GIBOVPmI9MaRS+wbYntaCcFKMZQkANGu 7Sq75kLX9sJokbSqAZH8HhsZkyJ4e0A= X-Google-Smtp-Source: ABdhPJyfEUTR59+ujbRQzigPd1pze7Ydowg34cpm/6Rzapl1QMasPpY9chLTdssQ9jCKFdYq2SrpQg== X-Received: by 2002:a0c:b2d9:: with SMTP id d25mr3617516qvf.147.1595622215314; Fri, 24 Jul 2020 13:23:35 -0700 (PDT) Received: from localhost.localdomain (modemcable246.10-73-45.static.videotron.ca. [45.73.10.246]) by smtp.gmail.com with ESMTPSA id f7sm5216089qkj.32.2020.07.24.13.23.34 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 24 Jul 2020 13:23:34 -0700 (PDT) From: Patrick Keroulas To: dev@dpdk.org Cc: Vivien Didelot , Patrick Keroulas Date: Fri, 24 Jul 2020 16:23:15 -0400 Message-Id: <20200724202315.19533-5-patrick.keroulas@radio-canada.ca> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20200724202315.19533-1-patrick.keroulas@radio-canada.ca> References: <20200724202315.19533-1-patrick.keroulas@radio-canada.ca> Subject: [dpdk-dev] [[PATCH v3 4/4] net/pcap: support hardware Tx timestamps 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: Vivien Didelot When hardware timestamping is enabled on Rx path, system time should no longer be used to calculate the timestamps when dumping packets. Instead, use the value stored by the driver in mbuf->timestamp and assume it is already converted to nanoseconds (otherwise the application may edit the packet headers itself afterwards). Signed-off-by: Vivien Didelot Signed-off-by: Patrick Keroulas --- doc/guides/rel_notes/release_20_08.rst | 1 + drivers/net/pcap/rte_eth_pcap.c | 32 +++++++++++++----------- lib/librte_pdump/rte_pdump.c | 34 ++++++++++++++------------ 3 files changed, 37 insertions(+), 30 deletions(-) diff --git a/doc/guides/rel_notes/release_20_08.rst b/doc/guides/rel_notes/release_20_08.rst index 89822bcb8d..bda2f7567a 100644 --- a/doc/guides/rel_notes/release_20_08.rst +++ b/doc/guides/rel_notes/release_20_08.rst @@ -105,6 +105,7 @@ New Features Updated PCAP driver with new features and improvements, including: * Support software Tx nanosecond timestamps precision. + * Support hardware Tx timestamps. * **Updated Broadcom bnxt driver.** diff --git a/drivers/net/pcap/rte_eth_pcap.c b/drivers/net/pcap/rte_eth_pcap.c index 668cbd1fc7..45775951f7 100644 --- a/drivers/net/pcap/rte_eth_pcap.c +++ b/drivers/net/pcap/rte_eth_pcap.c @@ -290,19 +290,23 @@ eth_null_rx(void *queue __rte_unused, #define NSEC_PER_SEC 1000000000L static inline void -calculate_timestamp(struct timeval *ts) { - uint64_t cycles; - struct timeval cur_time; - - cycles = rte_get_timer_cycles() - start_cycles; - cur_time.tv_sec = cycles / hz; - cur_time.tv_usec = (cycles % hz) * NSEC_PER_SEC / hz; - - ts->tv_sec = start_time.tv_sec + cur_time.tv_sec; - ts->tv_usec = start_time.tv_usec + cur_time.tv_usec; - if (ts->tv_usec >= NSEC_PER_SEC) { - ts->tv_usec -= NSEC_PER_SEC; - ts->tv_sec += 1; +calculate_timestamp(const struct rte_mbuf *mbuf, struct timeval *ts) { + if (mbuf->ol_flags & PKT_RX_TIMESTAMP) { + ts->tv_sec = mbuf->timestamp / NSEC_PER_SEC; + ts->tv_usec = mbuf->timestamp % NSEC_PER_SEC; + } else { + uint64_t cycles = rte_get_timer_cycles() - start_cycles; + struct timeval cur_time = { + .tv_sec = cycles / hz, + .tv_usec = (cycles % hz) * NSEC_PER_SEC / hz, + }; + + ts->tv_sec = start_time.tv_sec + cur_time.tv_sec; + ts->tv_usec = start_time.tv_usec + cur_time.tv_usec; + if (ts->tv_usec >= NSEC_PER_SEC) { + ts->tv_usec -= NSEC_PER_SEC; + ts->tv_sec += 1; + } } } @@ -339,7 +343,7 @@ eth_pcap_tx_dumper(void *queue, struct rte_mbuf **bufs, uint16_t nb_pkts) caplen = sizeof(temp_data); } - calculate_timestamp(&header.ts); + calculate_timestamp(mbuf, &header.ts); header.len = len; header.caplen = caplen; /* rte_pktmbuf_read() returns a pointer to the data directly diff --git a/lib/librte_pdump/rte_pdump.c b/lib/librte_pdump/rte_pdump.c index 8fd7e13af5..e8963e9dd8 100644 --- a/lib/librte_pdump/rte_pdump.c +++ b/lib/librte_pdump/rte_pdump.c @@ -71,21 +71,6 @@ static struct pdump_rxtx_cbs { } rx_cbs[RTE_MAX_ETHPORTS][RTE_MAX_QUEUES_PER_PORT], tx_cbs[RTE_MAX_ETHPORTS][RTE_MAX_QUEUES_PER_PORT]; -static uint64_t hz; -static uint64_t start_time; -static uint64_t start_cycles; - -static inline void -pdump_ts_to_ns(struct rte_mbuf **pkts, uint16_t nb_pkts) -{ - unsigned int i; - - for (i = 0; i < nb_pkts; i++) { - if ((pkts[i]->ol_flags & PKT_RX_TIMESTAMP) && hz) - pkts[i]->timestamp = start_time + - (pkts[i]->timestamp - start_cycles) * NS_PER_S / hz; - } -} static inline void pdump_copy(struct rte_mbuf **pkts, uint16_t nb_pkts, void *user_params) @@ -118,6 +103,23 @@ pdump_copy(struct rte_mbuf **pkts, uint16_t nb_pkts, void *user_params) } } +#define NSEC_PER_SEC 1000000000L +static uint64_t hz; +static uint64_t start_time; +static uint64_t start_cycles; + +static inline void +pdump_ts_to_ns(struct rte_mbuf **pkts, uint16_t nb_pkts) +{ + unsigned int i; + + for (i = 0; i < nb_pkts; i++) { + if ((pkts[i]->ol_flags & PKT_RX_TIMESTAMP) && hz) + pkts[i]->timestamp = start_time + + (pkts[i]->timestamp - start_cycles) * NSEC_PER_SEC / hz; + } +} + static uint16_t pdump_rx(uint16_t port __rte_unused, uint16_t qidx __rte_unused, struct rte_mbuf **pkts, uint16_t nb_pkts, @@ -154,7 +156,7 @@ pdump_register_rx_callbacks(uint16_t end_q, uint16_t port, uint16_t queue, rte_eth_read_clock(port, &start_cycles); rte_eth_get_clock_freq(port, &hz); gettimeofday(&now, NULL); - start_time = now.tv_sec * NS_PER_S + now.tv_usec * 1000; + start_time = now.tv_sec * NSEC_PER_SEC + now.tv_usec * 1000; if (cbs->cb) { PDUMP_LOG(ERR,