From patchwork Thu Sep 28 16:48:23 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Raslan Darawsheh X-Patchwork-Id: 29367 Return-Path: X-Original-To: patchwork@dpdk.org Delivered-To: patchwork@dpdk.org Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id 6B5871B1C5; Thu, 28 Sep 2017 18:48:42 +0200 (CEST) Received: from EUR01-HE1-obe.outbound.protection.outlook.com (mail-he1eur01on0045.outbound.protection.outlook.com [104.47.0.45]) by dpdk.org (Postfix) with ESMTP id 7074A1B1B7 for ; Thu, 28 Sep 2017 18:48:38 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=Mellanox.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version; bh=ZEwY82PTQRgUhtYgBSbnb89ilkBKGCcH7xuBmtprEiM=; b=x1nzFMB3E9I/Z87G4vQlclgaCGQKNwMLQfNK+nbot1BqszHdYFYSqneZ396PVvlF2PUMVAMxubrxGBG0O1B3vlQK0UM6KW+3uezfn03H2V/5F0KXZ4gXMLiXe8LGVPUWoiVJYnHJ1L8ejhAl6UgG5yEDzYkIiH9wztT6r+brp/0= Authentication-Results: spf=none (sender IP is ) smtp.mailfrom=rasland@mellanox.com; Received: from mellanox.com (37.142.13.130) by VI1PR05MB1232.eurprd05.prod.outlook.com (2a01:111:e400:582e::28) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P256) id 15.20.77.7; Thu, 28 Sep 2017 16:48:36 +0000 From: Raslan Darawsheh To: dev@dpdk.org Cc: yskoh@mellanox.com Date: Thu, 28 Sep 2017 19:48:23 +0300 Message-Id: <1506617303-32509-3-git-send-email-rasland@mellanox.com> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1506617303-32509-1-git-send-email-rasland@mellanox.com> References: <1503560793-21597-1-git-send-email-rasland@mellanox.com> <1506617303-32509-1-git-send-email-rasland@mellanox.com> MIME-Version: 1.0 X-Originating-IP: [37.142.13.130] X-ClientProxiedBy: AM5PR0602CA0015.eurprd06.prod.outlook.com (2603:10a6:203:a3::25) To VI1PR05MB1232.eurprd05.prod.outlook.com (2a01:111:e400:582e::28) X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: a1272a80-7803-4618-5225-08d50690c390 X-MS-Office365-Filtering-HT: Tenant X-Microsoft-Antispam: UriScan:; BCL:0; PCL:0; RULEID:(22001)(2017030254152)(48565401081)(2017052603199)(201703131423075)(201703031133081)(201702281549075); SRVR:VI1PR05MB1232; X-Microsoft-Exchange-Diagnostics: 1; VI1PR05MB1232; 3:+B1G+5iuIb5nwalh75EJ1XLZ9IK4IL9GWESB8FOrKeTzPYLlznfECpNkhWXQq8gRrC9J/mxdi9vXrU3u8WqQgM3SnnZ2PEh+u4CodBI3diMwxa986pNhXUH6vn5mBHzz5L9vfvrKQ0gKZP6rApNi9qNTu15OqcsLB+OjpAIu9/ChuH0L3NFdKp3zQcHN8BNe2BicfzDSAxao/Q+2xncK/vM5Bedj7HuU1DqTXwnHP9pX4VSj8peVL5dcVSCY3CH2; 25:XZydDgl47fPlhJR1Uso60cmoFc86F+YEU6AEVMnogT5HNmAHlypiJHRoyx4ZISjDN0JgxkrYOz4VOqUUi3xNqfE5pa2w1Pn+iNDr4n/BgdAmworPGKOBvUePUiq3MR4uD8lDn/53qmgSZAkv5Qe1rV3ZQdBlYmKtzzXck2M4BK9Q8ZAP3iSKGJXdResov9wTbqIo4B9sa6Pe9sG3tkTLvvhxH6+5aLtK9mdE2HnYBUnBjgqqno3EdrnGv/Tzi6hnybiSyHcQCCv3xSdGATupst9tZ4VZCcVr2jDYbYfVh+8sRR2eB7QKB7Lz9Ivr1Et++4JrWPoehbwbK+0GTO3GRg==; 31:5VGlU0SUR+ekqRtmvQPhUY8fn7iP74PH3p0Es8J9JCh4vGEPytj1X55j4kB6PxqdUGUT2T4qfGTQmuHUEUUJ3h4bZlgChIU3EFb3GcNJuxsiUnQxU2fC5bqlZ5tq4WVdggY4Zu1CeMBO/9bLLqsDYdoVenVfFeIQXlBONjs73aowfLXX2Jgng0mSOzDSCNfmKWiLj/7X/QqOcNdCnWICkeJDYyzgfTPYxJvr3nTgh/U= X-MS-TrafficTypeDiagnostic: VI1PR05MB1232: X-Microsoft-Exchange-Diagnostics: 1; VI1PR05MB1232; 20:DZXTrb2m8forfROVc29NuoaFXrigbCeN2vplO2SnBnLulgg4g9X0bq4qiSKY3QpSrg7yff+geIb+il5Y9x3dP0YGzm8Tp7a4+kMXLnIUeaQwqHMPY+COqEDn86Zk9kldEP3V/bCVfrVoP2Qv6dXUWOb5jadra0BQEWgEag1p49Z7yIL+gUh8XIs1DEH6wUzu0Z3H2LOyUybLTwFF0XTO3P8+BoLvhC/sAxGo5XoHxOsAxbJuKf0yHJQocA2dW0OFA9cBYTO8uHUEqmwpfN3gGQsmEKBJQynLH5Cpjk3ERja++sTQ25T4hd/wH3b6wbgiiquL0joMT22XfbWdPrJZw63Z/RjqVDt7ftmQ3Vb43ZFPCm9JbakBmJq8f3z3doHDjnPQW3+0JYQ2YyBmhFsWaF/KJLzYSZJuBKTGZUxn3ef7iXq4uRzta18NRvoVkUzA3XICe87tisESEmtxEmRhMHSOVUf7Ns9pRBpp5mSVWOTelTGn8+bfMlvVM7LO7a44; 4:kvlW3iVfgVh+eAbS5h5oDgMkWZBlqwNNNma6gSGBIbiJ7FwNZSo0AC7hc22oTUhD4WPW9PoNMlyzR8zgR4I0Ytjz/ZUlXEswgtLKq1B4g6OPnffA1ioE9NtfFYlQ0yq8a35U0t5miAUczom+dSKjFA65msMiMGCdrZbfYLZxcjag3kIUkwvBgibhgRbRxRYDvl/PvjvXNAlRryJOUZ0ML+gZ6bI7xuReh6qmFdkBmjE6WR7Kl9WH4yiFEWryG7qw X-Exchange-Antispam-Report-Test: UriScan:; X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-CFA-Test: BCL:0; PCL:0; RULEID:(100000700101)(100105000095)(100000701101)(100105300095)(100000702101)(100105100095)(6040450)(2401047)(8121501046)(5005006)(100000703101)(100105400095)(3002001)(10201501046)(93006095)(93001095)(6055026)(6041248)(20161123562025)(20161123560025)(20161123558100)(20161123564025)(201703131423075)(201702281528075)(201703061421075)(201703061406153)(20161123555025)(6072148)(201708071742011)(100000704101)(100105200095)(100000705101)(100105500095); SRVR:VI1PR05MB1232; BCL:0; PCL:0; RULEID:(100000800101)(100110000095)(100000801101)(100110300095)(100000802101)(100110100095)(100000803101)(100110400095)(100000804101)(100110200095)(100000805101)(100110500095); SRVR:VI1PR05MB1232; X-Forefront-PRVS: 0444EB1997 X-Forefront-Antispam-Report: SFV:NSPM; SFS:(10009020)(6009001)(39860400002)(346002)(376002)(189002)(199003)(5003940100001)(106356001)(50986999)(105586002)(6666003)(107886003)(81156014)(36756003)(50226002)(68736007)(2950100002)(33646002)(8936002)(8676002)(2351001)(6916009)(2361001)(6116002)(3846002)(478600001)(101416001)(189998001)(53936002)(86362001)(4326008)(76176999)(50466002)(5660300001)(97736004)(7736002)(47776003)(33026002)(81166006)(69596002)(2906002)(48376002)(21086003)(305945005)(16526017)(66066001)(16586007)(55016002)(25786009)(316002)(309714004); DIR:OUT; SFP:1101; SCL:1; SRVR:VI1PR05MB1232; H:mellanox.com; FPR:; SPF:None; PTR:InfoNoRecords; MX:1; A:1; LANG:en; Received-SPF: None (protection.outlook.com: mellanox.com does not designate permitted sender hosts) X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1; VI1PR05MB1232; 23:nh7qH5p40NbMDIRfzk53ZrZPR2PWqIUnJnO2zhik1?= xPT65o1fTPdIPSbBwSksVCsp3i7RCTG6Qn0K3eogeCzlbUijm9R2V0yZFCeBanbI863Q4e3OIVUN6J6kWnzwpidNmK8RDBrkEIkgydjWLHX/snToe6PK4JpBtrPdAVkyLrZfY/Lc4IcvL2YWNhP2DV5ebHRADPu/E7Ju/LB1Pl5yqT2QlIn+6yDnrg9ZnMwrmGErE6ig9B3Ypb2DcS4HNKtgTfTOIGYZK2AC9KdJsmUaXdSp2C5eVr0H+MY9uyZJ28tEA3cLQ3Bz5R9RUcP/jH35aZJG7NlgotNVgM6I0gDV7214JB+pyWHrSmHJwDhuVeV+ZmZwM9P2lHwSxO/HVNJEr9njVZM//AKgd77QJf3L6OtiPDQ65P1s/mOyXeFtsKu97Anw9FXz6sFPG+D8XMNQVVF6zq15XgOvnBwG3iG6mnAs5xM7YCwqLLstWcWNJTl6XZO+0D1gQsPB504HDlcgr0sYXQJ3YfSgwfzLH3CPwPfGedg5ukzOMj7/K2ZBJpLr2Rpk0JwgnKYALA+FYIQgVvZoyC7TB9TEe7D/KULcvem4ao0wTRRVn56iA3PZqz2rZZmtfMh+HO3BPiBZu5IXX9GTdw3GHKaBAofcfhM5aXUNFI2d3jFie+Ikrl66heBomwjNRhebu4FIl+BBmvN6bQwt+Ws+NmvyxFt+dZ6som5VBwqzon7JShFFbA7NLLAQRvvs1CjLUADdC7H1MAU11e53sEHkG1J1HWBpC8vKQnytnVPd/HtTMqI1fJx95tkwTq4ABdRKQ+NGcjBqsPNI74vnzJe/r1lLU1KUej4QJsVy2mdtuWUDpc3PwFXyBJikl7uulbyt0E901HYSCdOuANTXV1drV6cXGa1oiGprjCjg14LxvTKEE9rCnnT/3I3DDlaUnAZOTT84EJtrs1/MSRj19sn5HXDYD2zBOaGs7mhHYyRog/KK6Cj/T5xDVIDFHsZmVJrhei4+1SjPsOTdRQebmaAh/ChS9EAW5TvqQ0ClMr3jd49/HMYOt7xnMCxaZahlzfdNyjGYpoFz4M12YyKZR8PkA2/aZzh6IWf/nkcokgyD/Eykzvf4eYOmnKkRchqj8HLulKHBm/pDgIEdex0nf3/H1eotWnoK3zB+XGocIm9/ICYGNyJjBJL2a6ohJEAgvziwxQdTvg2dzoX X-Microsoft-Exchange-Diagnostics: 1; VI1PR05MB1232; 6:MTwJsLKzsDplQp27Djoz/koUP1v8EOmqZBMvosYs8SUzTF3jPnSGNpsxbGjYLRcVr6anM+j7geyckfVcNnMcCkizVbzYGkcGdScLDtLaqJp8Ee5hvuCIuhueKo1hTR2U0424d6IZg8HGPLY0y+zVAF7gpaxLxZVFUekYPwHNpDD9KmzrVihoTSURmFsXZ72ufJC3qutOiW43jIaYfaWp1YTEorw0CJg4Lqb/kNGcc/en49x11fPTIHEK0IXOLXi+rjHLP/dc3pVJ+oGcnD8A5zBM32PHsP2Yly1nssjmeC9t1gNcEGxPYrUrso7ZHm1YHmzGVBVuz9DUj1JioUjoGQ==; 5:8LfMM7qIRn0llDAt0wh23fc4DL9UlEKy1un68hOWv3Cm5WXbGOuaAKxt0NyaCCUs1naOjmV76fT6zyx5enW/ESk5F9lFsU/VC9rPPsZGpkaTiCySyyqabaQDcohoaofNKmcJt2vBf5dJ9TZD/buVZw==; 24:SyASnbdZqyD2V9w+JLIOYTacXaDgma9Ac9D+PmF0QM4weti9WF9zRXri896BwBpKXDQN/NNSrfCW9K9KyeHrT+jN96IW3lmNRwBhHxIMPLI=; 7:i8JYASaa4jgsCejSxXRQd6EkBuYYfatKAvF0EL9ub80vBUyeesENufi3qcn+Y8Kqm0CUSdDdpDNd0DB0jYZ7ecZXST5TO+f8YIJdCXlD1VEAOxZJvm48nquT6PKHP6JGTUALpP2SwTcf7v/RGimI4IA+0DmasDbtrOGCR3TYAMYS6Yaf22+ZR8gfguPsZRGWjGC9IAthC+Fo07R97EEEXde5ZaMEid8fqyVBBTswKXM= SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-OriginatorOrg: Mellanox.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 28 Sep 2017 16:48:36.4021 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: a652971c-7d2e-4d9b-a6a4-d149256f461b X-MS-Exchange-Transport-CrossTenantHeadersStamped: VI1PR05MB1232 Subject: [dpdk-dev] [PATCH v3 3/3] net/mlx5: add Rx HW timestamp 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" Expose Rx HW timestamp to packet mbufs. Signed-off-by :Raslan Darawsheh Acked-by: Yongseok Koh --- drivers/net/mlx5/mlx5_ethdev.c | 3 ++- drivers/net/mlx5/mlx5_rxq.c | 6 +++++- drivers/net/mlx5/mlx5_rxtx.c | 5 +++++ drivers/net/mlx5/mlx5_rxtx.h | 3 ++- drivers/net/mlx5/mlx5_rxtx_vec_sse.c | 13 ++++++++++++- 5 files changed, 26 insertions(+), 4 deletions(-) diff --git a/drivers/net/mlx5/mlx5_ethdev.c b/drivers/net/mlx5/mlx5_ethdev.c index 6f17a95..f5fc7d6 100644 --- a/drivers/net/mlx5/mlx5_ethdev.c +++ b/drivers/net/mlx5/mlx5_ethdev.c @@ -674,7 +674,8 @@ mlx5_dev_infos_get(struct rte_eth_dev *dev, struct rte_eth_dev_info *info) DEV_RX_OFFLOAD_UDP_CKSUM | DEV_RX_OFFLOAD_TCP_CKSUM) : 0) | - (priv->hw_vlan_strip ? DEV_RX_OFFLOAD_VLAN_STRIP : 0); + (priv->hw_vlan_strip ? DEV_RX_OFFLOAD_VLAN_STRIP : 0) | + DEV_RX_OFFLOAD_TIMESTAMP; if (!priv->mps) info->tx_offload_capa = DEV_TX_OFFLOAD_VLAN_INSERT; if (priv->hw_csum) diff --git a/drivers/net/mlx5/mlx5_rxq.c b/drivers/net/mlx5/mlx5_rxq.c index 22448c9..77e980b 100644 --- a/drivers/net/mlx5/mlx5_rxq.c +++ b/drivers/net/mlx5/mlx5_rxq.c @@ -930,6 +930,8 @@ rxq_ctrl_setup(struct rte_eth_dev *dev, struct rxq_ctrl *rxq_ctrl, if (priv->hw_csum_l2tun) tmpl.rxq.csum_l2tun = !!dev->data->dev_conf.rxmode.hw_ip_checksum; + tmpl.rxq.hw_timestamp = + !!dev->data->dev_conf.rxmode.hw_timestamp; /* Use the entire RX mempool as the memory region. */ tmpl.mr = mlx5_mp2mr(priv->pd, mp); if (tmpl.mr == NULL) { @@ -951,7 +953,7 @@ rxq_ctrl_setup(struct rte_eth_dev *dev, struct rxq_ctrl *rxq_ctrl, attr.cq = (struct ibv_cq_init_attr_ex){ .comp_mask = 0, }; - if (priv->cqe_comp) { + if (priv->cqe_comp && !tmpl.rxq.hw_timestamp) { attr.cq.comp_mask |= IBV_CQ_INIT_ATTR_MASK_FLAGS; attr.cq.flags |= MLX5DV_CQ_INIT_ATTR_MASK_COMPRESSED_CQE; /* @@ -960,6 +962,8 @@ rxq_ctrl_setup(struct rte_eth_dev *dev, struct rxq_ctrl *rxq_ctrl, */ if (rxq_check_vec_support(&tmpl.rxq) < 0) cqe_n = (desc * 2) - 1; /* Double the number of CQEs. */ + } else if (priv->cqe_comp && tmpl.rxq.hw_timestamp) { + DEBUG("Rx CQE compression is disabled for HW timestamp"); } tmpl.cq = ibv_create_cq(priv->ctx, cqe_n, NULL, tmpl.channel, 0); if (tmpl.cq == NULL) { diff --git a/drivers/net/mlx5/mlx5_rxtx.c b/drivers/net/mlx5/mlx5_rxtx.c index 4808348..3476122 100644 --- a/drivers/net/mlx5/mlx5_rxtx.c +++ b/drivers/net/mlx5/mlx5_rxtx.c @@ -1870,6 +1870,11 @@ mlx5_rx_burst(void *dpdk_rxq, struct rte_mbuf **pkts, uint16_t pkts_n) pkt->vlan_tci = rte_be_to_cpu_16(cqe->vlan_info); } + if (rxq->hw_timestamp) { + pkt->timestamp = + rte_be_to_cpu_64(cqe->timestamp); + pkt->ol_flags |= PKT_RX_TIMESTAMP; + } if (rxq->crc_present) len -= ETHER_CRC_LEN; PKT_LEN(pkt) = len; diff --git a/drivers/net/mlx5/mlx5_rxtx.h b/drivers/net/mlx5/mlx5_rxtx.h index e352a1e..2d7b960 100644 --- a/drivers/net/mlx5/mlx5_rxtx.h +++ b/drivers/net/mlx5/mlx5_rxtx.h @@ -101,6 +101,7 @@ struct rxq_zip { struct rxq { unsigned int csum:1; /* Enable checksum offloading. */ unsigned int csum_l2tun:1; /* Same for L2 tunnels. */ + unsigned int hw_timestamp:1; /* Enable HW timestamp. */ unsigned int vlan_strip:1; /* Enable VLAN stripping. */ unsigned int crc_present:1; /* CRC must be subtracted. */ unsigned int sges_n:2; /* Log 2 of SGEs (max buffers per packet). */ @@ -110,7 +111,7 @@ struct rxq { unsigned int rss_hash:1; /* RSS hash result is enabled. */ unsigned int mark:1; /* Marked flow available on the queue. */ unsigned int pending_err:1; /* CQE error needs to be handled. */ - unsigned int :7; /* Remaining bits. */ + unsigned int :6; /* Remaining bits. */ volatile uint32_t *rq_db; volatile uint32_t *cq_db; uint16_t rq_ci; diff --git a/drivers/net/mlx5/mlx5_rxtx_vec_sse.c b/drivers/net/mlx5/mlx5_rxtx_vec_sse.c index a7ef17e..ad97cd7 100644 --- a/drivers/net/mlx5/mlx5_rxtx_vec_sse.c +++ b/drivers/net/mlx5/mlx5_rxtx_vec_sse.c @@ -744,7 +744,8 @@ rxq_cq_to_ptype_oflags_v(struct rxq *rxq, __m128i cqes[4], __m128i op_err, { __m128i pinfo0, pinfo1; __m128i pinfo, ptype; - __m128i ol_flags = _mm_set1_epi32(rxq->rss_hash * PKT_RX_RSS_HASH); + __m128i ol_flags = _mm_set1_epi32(rxq->rss_hash * PKT_RX_RSS_HASH | + rxq->hw_timestamp * PKT_RX_TIMESTAMP); __m128i cv_flags; const __m128i zero = _mm_setzero_si128(); const __m128i ptype_mask = @@ -1206,6 +1207,16 @@ rxq_burst_v(struct rxq *rxq, struct rte_mbuf **pkts, uint16_t pkts_n) rxq->pending_err |= !!_mm_cvtsi128_si64(opcode); /* D.5 fill in mbuf - rearm_data and packet_type. */ rxq_cq_to_ptype_oflags_v(rxq, cqes, opcode, &pkts[pos]); + if (rxq->hw_timestamp) { + pkts[pos]->timestamp = + rte_be_to_cpu_64(cq[pos].timestamp); + pkts[pos + 1]->timestamp = + rte_be_to_cpu_64(cq[pos + p1].timestamp); + pkts[pos + 2]->timestamp = + rte_be_to_cpu_64(cq[pos + p2].timestamp); + pkts[pos + 3]->timestamp = + rte_be_to_cpu_64(cq[pos + p3].timestamp); + } #ifdef MLX5_PMD_SOFT_COUNTERS /* Add up received bytes count. */ byte_cnt = _mm_shuffle_epi8(op_own, len_shuf_mask);