From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from NAM02-CY1-obe.outbound.protection.outlook.com (mail-cys01nam02on0070.outbound.protection.outlook.com [104.47.37.70]) by dpdk.org (Postfix) with ESMTP id 38DAAF94 for ; Fri, 14 Apr 2017 11:41:58 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=CAVIUMNETWORKS.onmicrosoft.com; s=selector1-cavium-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version; bh=j7lyjqKZlxJIg4HGgjtUEMfm6fUiLOcZ95Ifj5l6xgo=; b=X3ROkHw4oUZ04mGem+SSTy0G3FrqYS4O3LG3qHWDhlsgSzwtlfs/fixz1d5ge+Ml9P584yna27iGeGOM6EyfKSwPjm2jXrE7AdmLtb8DzyK0wp+vS2O2fXfM8vEzpwurhnNN06xW9+oTFPW83MlfDxBgSDLbnyGEX3c+NjoPdbE= Authentication-Results: dpdk.org; dkim=none (message not signed) header.d=none;dpdk.org; dmarc=none action=none header.from=caviumnetworks.com; Received: from localhost.localdomain (111.93.218.67) by BN3PR0701MB1718.namprd07.prod.outlook.com (10.163.39.17) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256_P256) id 15.1.1034.10; Fri, 14 Apr 2017 09:41:53 +0000 From: Jerin Jacob To: dev@dpdk.org Cc: ferruh.yigit@intel.com, Jerin Jacob , Maciej Czekaj Date: Fri, 14 Apr 2017 15:11:07 +0530 Message-Id: <20170414094107.14684-1-jerin.jacob@caviumnetworks.com> X-Mailer: git-send-email 2.12.2 MIME-Version: 1.0 Content-Type: text/plain X-Originating-IP: [111.93.218.67] X-ClientProxiedBy: PN1PR01CA0041.INDPRD01.PROD.OUTLOOK.COM (10.164.136.141) To BN3PR0701MB1718.namprd07.prod.outlook.com (10.163.39.17) X-MS-Office365-Filtering-Correlation-Id: 92c66edd-7ec7-4b24-c251-08d4831a7d11 X-Microsoft-Antispam: UriScan:; BCL:0; PCL:0; RULEID:(22001)(201703131423075)(201703031133081); SRVR:BN3PR0701MB1718; X-Microsoft-Exchange-Diagnostics: 1; BN3PR0701MB1718; 3:J+xzEueyqKAQM20HAgQ+koolSEzMh8lbAxvYIX1XtopNKTx3voY2zfBFD0L06O9wa9Mpof45irE5TL1kv2dkF47ZLP4tf380mWRri2G9SrlivS6dgrBE+9zCpSdwvAUpZU30512/6lKjyr8BdsmooraWbbx5TSs8nS5PNOFk1Ra0UQpCzgix0gHJRUsGAG4Fd7G0CFVy4YXClVxkIIyicnfgou7spVj7eriJx/J1gHlPwIS2KxOeh6oWKnmT8MOqf/HEFCZmWPbmsgtC9q90w922qgpb8ZvaMWRRdpPfIHhQtAtZhsNt52AiOunR0x8s2kXDr+TL0Y84DEW+KkStow==; 25:AoMkWuOhDWFc38FA0TZ1ISSPWxq/xwvjDYa7yr6NSksr3B3janMlML/j4wLDPRc4n6GKmaRbhVcp0e5bDdJcC1QAXotnD79075C4ULnau7uls4odeD356uhd5pGXiRDT0x20DMV0Pkrk2y+yrPxGan5oNef8T2DBmZr8imEiyC6DhDjT6nXkrRpoju7YMSiigrzdnpJV1e00CKQG/igGhvObwf4Y830Pfni3R8Pti8O1uklpi7LFQ7vPKirXclkvCZrsjZnuv6gxEPzGnfY85bYNNweMD1Je8RLn98D+l3FQ4STH6bGjDoeH1IPBTDSmN0c2Hwm3xuFTCK+tJKTlMLOWqx8/7bTjuI5HpGhVRGO2RrLRWUKeisYPMKaXy4GO1Uzwv4n/9e8UYDA6nwyQSQDYI+/KPfgIeg8UnDO3L6OmYetuGJFLRrl/HXatAfii5sP3oo3kCmfGtMuKWbcC8g== X-Microsoft-Exchange-Diagnostics: 1; BN3PR0701MB1718; 31:VUvHrwW7s1T0psSWEFiQNg/+pxha9zpdcSXnBAhItfws5KF7f61sPVSiqP75a3IhHBZWNTa9o3jrZ0b9R+dRnaHfn0N1jlmUF7GHGCcCCcOYXna17SzDLz7uIcfqLGiH40X+bCyzlfWx3fYLVF809UGW08Jo5sKop0sDJUSqkG2oyQt7nhne1/iG+3161q8yQ+UcKcqYRIo3OMV6mLjIg33vfQE82/2Rp+Ydk4+Q6ors/AyU2TfSw17Hla0loEDs; 20:PRVlv5wMLeG24nO08nJYMgh8EUjBZEzvRt3h81hf3Ire8uKtwfBQF2Xwoo+kZn7D9/ouXZwIoUaBWcstEeKxOi3SRcxSskqp9Q8BgCVoRBqhhqgq2+MV3/M/bp47Oq/HR4zFTGo9hCfVL6Dav8YgZb7T9Z4e3BoG77XReqAHDfpM56GhPxYBizp0kAGHSYvgjUAtqLvQCCv9OvwyOjOSxLmFrlZxmXwGHSwr/3TiKiv/2OAk89Dk8wwLOUdBJMvy31WACY98C2/GT84HRuQZJZBu0nB4aUT4zM7Cf+6vPWvoojJZAnyUWcJPldDaGrok88JPTUl36x4MaqaNjTifpm3vCln+GYewYNVYt/6wDVFmvKSUYs/Xa0heGXXkyBtnF4JhGRji5ZA0qWC5FEIMrrvwzinrSOsIcdWWnPWIabc5Y8KivGKIfE8/10u+b9J26BrO/YHl8+8RxQHbxXcI7aqmrqf2DgllAiPGoFl4dUQy/e/0qgRQ9cIJb/2UKSkpfYrox4ubmtyYrIaiivKOzNHbsSqzYOzdlAZiGyvQ2fpHzQ1wBgTiuTNd2pMjXKf9pHUivHzC/EzYyf8YlnmUfAGXd4CBxb8yPg7eAdn5Aiw= X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:; X-Exchange-Antispam-Report-CFA-Test: BCL:0; PCL:0; RULEID:(6040450)(601004)(2401047)(8121501046)(5005006)(3002001)(10201501046)(93006095)(6041248)(20161123562025)(201703131423075)(201702281528075)(201703061421075)(20161123560025)(20161123555025)(20161123564025)(6072148); SRVR:BN3PR0701MB1718; BCL:0; PCL:0; RULEID:; SRVR:BN3PR0701MB1718; X-Microsoft-Exchange-Diagnostics: 1; BN3PR0701MB1718; 4:gD7a7UcGty0px9WXl6aN7sEXgcFVXUCgj4IZyr2078H03zCQEoGqh1WSDnobOWRXyHyZOezZZITiThaAKozPf8KjYCXzdJmkZtR7IBlE1m47VSCUom5HWOZLimziAFFlgRJ2QzQFglq36lnREfgXaRtGT2E6g9NKYznLgBA6UgUl1G28MtTiLcwVwpa83QA6CnflPmrhbCUkVCy6Sa0irFYBI3zzzBu/DM407GO4c3+BZdmPuZ/wQcc/WNmFS6Yi28RH9KG8Q7pKupfa9cnzW6rYmiV3U4oa9H9X6IDM+IFmeV3P1vSHwGcQQ81p4YngBC7FM3yJppOlUmEz8+FW+gWnsTwFENFXHEsUaBf+VdU6aPyR0/nyYmmi2/kbTd6KHR5wGkVGlz8cZAReVnlJYlMoSenRtk1yo4J/Sk2oIRow5mqHph6NQyUOBG4P8nHAjk23yc7edM+9L/eTm401U4ykNc+9HaT4JwRGdjXSrSDrL2T6ymXSpx4NRppV8iVRVVc8PPeWNmOcxiMjKhtRngoeLbgsaFXXAT2g0fDPmKTHV9Np79nkeT7SbC3lSUZ/jkj8AgejZINGVrziWg6DudiwlTP8KEAufSpioBlokP69Dt7yPM1jU5eeszZckM8fKqisZipdZqnCaLykvXbgm9Z/o+FkXFKI3ZQAwG/+8Z+OYj/L7Kq/nkujgyk8AdVl X-Forefront-PRVS: 02778BF158 X-Forefront-Antispam-Report: SFV:NSPM; SFS:(10009020)(4630300001)(6009001)(6069001)(39400400002)(39850400002)(39410400002)(39450400003)(6506006)(6512007)(6486002)(25786009)(2906002)(53936002)(8676002)(5009440100003)(42882006)(6916009)(6666003)(81166006)(50226002)(6116002)(3846002)(42186005)(1076002)(2361001)(2351001)(5660300001)(4326008)(66066001)(47776003)(110136004)(107886003)(33646002)(38730400002)(305945005)(189998001)(7736002)(50466002)(48376002)(50986999)(36756003); DIR:OUT; SFP:1101; SCL:1; SRVR:BN3PR0701MB1718; H:localhost.localdomain; FPR:; SPF:None; MLV:sfv; LANG:en; X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1; BN3PR0701MB1718; 23:gQECZnhTbu38z5vLC1GrhwzJsS3LnQAgrLYzQmM?= =?us-ascii?Q?6TtrGYX3oGTRHTN/VGygO2x/QsTQu+0QjuIss48QCAUULDIm7S7loqZ+FMYv?= =?us-ascii?Q?6ymRRZv3NEA2NmDxLmN9JsrL/gtz4JUOTimGN/RbRVA0rA3Sbgr7hR/lqCLw?= =?us-ascii?Q?7622+LcGPT5JlKKevG0SaAi2HWzowkZs5kY+gRcIC3JvN3dmCDpVbdCIKmAQ?= =?us-ascii?Q?Jg83hocOvpI0JcwCV5ZvM0fT1EgJ4Q4KJa+VRJhhInsC6vRwX7rGF1MV+AeR?= =?us-ascii?Q?aCq3EI5fMqHdqDHLKr9EBy/dEllpNzMYtVYttWB2Kb3HZy2nGXKM+6fcAKuR?= =?us-ascii?Q?7wD10Qe9r92eG1+rw2heqbUM5u3WCHDigXAdjg23sZKfx+d9zYvE6mn3+c0n?= =?us-ascii?Q?NxzsRdhvdaqZ68hsej4BD1xVOjV4Vf13aVVNbI3mw7EiSr8qiYvFV8W9ETtp?= =?us-ascii?Q?oJY0u4LRiCGpKTJuOPEPCzy2mZQC6+XwGXn2WP5SX3Yubuki/PKu/tlbBhJh?= =?us-ascii?Q?idBOYZ/MsiWILGf/oDDSTfRHbwL0Mkb381AXjolSnOzspwtRzSvsk1fbMQWW?= =?us-ascii?Q?EytJ6JC/47svCzjaW29A9UQU5w31BFToKndJ4rHueURDUueAjhgfc4rcyTMh?= =?us-ascii?Q?+5G8w/L48/hvxGUDK7pUkvtXoAJF6vogFbN+ONZr88pSEMUo6rOYKaIv333S?= =?us-ascii?Q?yuGFDgeJWds6m6UbU3jDbR6UvTe6WPVwUqoYbEIRyHqp+7IvL5/eTaFkN6tu?= =?us-ascii?Q?CdGKcmigyey3LExKyOl/7wBk/XYysKwK4tGiY09xc5AuejdnEn6/GxIPNlGd?= =?us-ascii?Q?01Zz8kpJlTdCAZGDCMXyTXEh2Twpids7/XLAgZA6kN+koYpkdD8ns/qJXkWf?= =?us-ascii?Q?QyvwcsrZYApVK6nN/r6HZLcgYI84f3RfSY7ValOnIn1hkb1XYTsAyry9iHUA?= =?us-ascii?Q?KojsJ9HXX1p54Cdz+m6TPjQ/CQdMt643+aoC5lsvnmVg87dS6Ggn53m16Qix?= =?us-ascii?Q?18ASZ3anYnho9Ap8Led7EbWCmBR+4y/Df08TvLXE2cet2sg=3D=3D?= X-Microsoft-Exchange-Diagnostics: 1; BN3PR0701MB1718; 6:LtpqfFZdXv3Q1HKV6LpPAplYSfuvSqUvdMfWsekSysn82mYAT/jbhjLfnOJsRbS91qXrmHlwAt2rWZl0MdtNKPaBZYAxEKP+N0mN7u75uSrv2D+kq9dqHtU5hnYWezxNgbXc3EJmsc5DIiI+a0Jqn173Q82+SC/pFtx5HVAa0SF/3x6PcW8Ui4tUa3jjaajs8GsHq3IYOXcWQ+JSwtlkBmTxo+oEAeeCk6+XuZbIlOQPXdNhmfjp5vq2eoMDrksWfoYk8jcL0pBu1jAUMJhaCMi5Ada+tkJwBcX6Ki8qDGnk9PFpl0qzrdreU3eG2yT+Yw21QGoMoQD1pxAovdAdvSiArqOCtqoNWyqS2W9qUtWsFbJhrOSVbCqcd/pToWgbhO+jT0/mdS5iBH7/TufXYy4zX+2/iyR+cO4r5zj4PGilAaFBHqz9pnY25oiAQVg6IVkQ3cjXEyDaN92Ig12hNQ==; 5:K0b9/w8TT/H+abwYtI/+yuI7q20h3xmZh3toLJu83DwLEl3ptiQdRGNKSUbALZaOmfsDoPq86N/MO75ojUwpBexN+yQHTn3IbV3MObKsv8dfaKm+b4a7MwfMdzbQL7w1p2s9rma3+CaQ0SwuhvYUZw==; 24:QMgs7eyJW451xrb1wR0VvkaUSoVsjYwyCqGX1SNcbBNhdSPvMpIo3/ZWsK+rw8av2wBTo0N47/dDAjad9lD1Ln44lFKGzK2O+phjvnkpSnk= SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-Microsoft-Exchange-Diagnostics: 1; BN3PR0701MB1718; 7:4WD0JCCqMnVXSWDzNLHhJ1McNCIohene27apgNj7gGgI2iLu+eXWaGSIh5vtMJbPTQf4WRplB9SE/IKxxp5wy0bOxo3gzfH92P5rFjZcrAHDHEEzUbMo6MrDeJF9pMfU8dQLF2VW8xEstuTwrxiuc3ehljOZC55US3/yG5asm+vFvs+GJLFT694FHeqJQ8kO7aijrcCqLLiPbH2F4fXgBUYRlCAyyUUnpo+tzuUqw+ZAcR+ebQGgawOWOPx2MeSuOeVB72q7TrsTSf0Z5iZ7PcsXtWNOO+haWk98OYZ/3r1/ssuv6kIyKUY25lak432SpHEo+HNfAKuJJXAvBCX5eQ== X-OriginatorOrg: caviumnetworks.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 14 Apr 2017 09:41:53.6161 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-Transport-CrossTenantHeadersStamped: BN3PR0701MB1718 Subject: [dpdk-dev] [PATCH] net/thunderx: reduce writes to mbuf 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: , X-List-Received-Date: Fri, 14 Apr 2017 09:41:58 -0000 With the mbuf rework, we now have 8 contiguous bytes to be rearmed in the mbuf at 8B naturally aligned address. Use single 8B write to avoid multiple 2B writes in Rx path. Signed-off-by: Jerin Jacob Signed-off-by: Maciej Czekaj --- drivers/net/thunderx/nicvf_ethdev.c | 18 ++++++++++++++++++ drivers/net/thunderx/nicvf_rxtx.c | 28 ++++++++++------------------ drivers/net/thunderx/nicvf_rxtx.h | 27 +++++++++++++++++++++++++++ drivers/net/thunderx/nicvf_struct.h | 11 +++++++++++ 4 files changed, 66 insertions(+), 18 deletions(-) diff --git a/drivers/net/thunderx/nicvf_ethdev.c b/drivers/net/thunderx/nicvf_ethdev.c index 6c3670aee..76a2ae649 100644 --- a/drivers/net/thunderx/nicvf_ethdev.c +++ b/drivers/net/thunderx/nicvf_ethdev.c @@ -1231,6 +1231,23 @@ nicvf_dev_tx_queue_stop(struct rte_eth_dev *dev, uint16_t qidx) return nicvf_vf_stop_tx_queue(dev, nic, qidx); } +static inline void +nicvf_rxq_mbuf_setup(struct nicvf_rxq *rxq) +{ + uintptr_t p; + struct rte_mbuf mb_def; + + RTE_BUILD_BUG_ON(sizeof(union mbuf_initializer) != 8); + mb_def.nb_segs = 1; + mb_def.data_off = RTE_PKTMBUF_HEADROOM; + mb_def.port = rxq->port_id; + rte_mbuf_refcnt_set(&mb_def, 1); + + /* Prevent compiler reordering: rearm_data covers previous fields */ + rte_compiler_barrier(); + p = (uintptr_t)&mb_def.rearm_data; + rxq->mbuf_initializer.value = *(uint64_t *)p; +} static int nicvf_dev_rx_queue_setup(struct rte_eth_dev *dev, uint16_t qidx, @@ -1323,6 +1340,7 @@ nicvf_dev_rx_queue_setup(struct rte_eth_dev *dev, uint16_t qidx, else rxq->rbptr_offset = NICVF_CQE_RBPTR_WORD; + nicvf_rxq_mbuf_setup(rxq); /* Alloc completion queue */ if (nicvf_qset_cq_alloc(dev, nic, rxq, rxq->queue_id, nb_desc)) { diff --git a/drivers/net/thunderx/nicvf_rxtx.c b/drivers/net/thunderx/nicvf_rxtx.c index fc43b747a..003ab0693 100644 --- a/drivers/net/thunderx/nicvf_rxtx.c +++ b/drivers/net/thunderx/nicvf_rxtx.c @@ -430,9 +430,9 @@ nicvf_recv_pkts(void *rx_queue, struct rte_mbuf **rx_pkts, uint16_t nb_pkts) union cq_entry_t *desc = rxq->desc; const uint64_t cqe_mask = rxq->qlen_mask; uint64_t rb0_ptr, mbuf_phys_off = rxq->mbuf_phys_off; + const uint64_t mbuf_init = rxq->mbuf_initializer.value; uint32_t cqe_head = rxq->head & cqe_mask; int32_t available_space = rxq->available_space; - uint8_t port_id = rxq->port_id; const uint8_t rbptr_offset = rxq->rbptr_offset; to_process = nicvf_rx_pkts_to_process(rxq, nb_pkts, available_space); @@ -448,17 +448,12 @@ nicvf_recv_pkts(void *rx_queue, struct rte_mbuf **rx_pkts, uint16_t nb_pkts) rb0_ptr = *((uint64_t *)cqe_rx + rbptr_offset); pkt = (struct rte_mbuf *)nicvf_mbuff_phy2virt (rb0_ptr - cqe_rx_w1.align_pad, mbuf_phys_off); - pkt->ol_flags = 0; - pkt->port = port_id; pkt->data_len = cqe_rx_w3.rb0_sz; - pkt->data_off = RTE_PKTMBUF_HEADROOM + cqe_rx_w1.align_pad; - pkt->nb_segs = 1; pkt->pkt_len = cqe_rx_w3.rb0_sz; pkt->packet_type = nicvf_rx_classify_pkt(cqe_rx_w0); - + nicvf_mbuff_init_update(pkt, mbuf_init, cqe_rx_w1.align_pad); nicvf_rx_offload(cqe_rx_w0, cqe_rx_w2, pkt); - rte_mbuf_refcnt_set(pkt, 1); rx_pkts[i] = pkt; cqe_head = (cqe_head + 1) & cqe_mask; nicvf_prefetch_store_keep(pkt); @@ -481,8 +476,9 @@ nicvf_recv_pkts(void *rx_queue, struct rte_mbuf **rx_pkts, uint16_t nb_pkts) static inline uint16_t __hot nicvf_process_cq_mseg_entry(struct cqe_rx_t *cqe_rx, - uint64_t mbuf_phys_off, uint8_t port_id, - struct rte_mbuf **rx_pkt, uint8_t rbptr_offset) + uint64_t mbuf_phys_off, + struct rte_mbuf **rx_pkt, uint8_t rbptr_offset, + uint64_t mbuf_init) { struct rte_mbuf *pkt, *seg, *prev; cqe_rx_word0_t cqe_rx_w0; @@ -501,12 +497,10 @@ nicvf_process_cq_mseg_entry(struct cqe_rx_t *cqe_rx, (rb_ptr[0] - cqe_rx_w1.align_pad, mbuf_phys_off); pkt->ol_flags = 0; - pkt->port = port_id; - pkt->data_off = RTE_PKTMBUF_HEADROOM + cqe_rx_w1.align_pad; - pkt->nb_segs = nb_segs; pkt->pkt_len = cqe_rx_w1.pkt_len; pkt->data_len = rb_sz[nicvf_frag_num(0)]; - rte_mbuf_refcnt_set(pkt, 1); + nicvf_mbuff_init_mseg_update( + pkt, mbuf_init, cqe_rx_w1.align_pad, nb_segs); pkt->packet_type = nicvf_rx_classify_pkt(cqe_rx_w0); nicvf_rx_offload(cqe_rx_w0, cqe_rx_w2, pkt); @@ -518,9 +512,7 @@ nicvf_process_cq_mseg_entry(struct cqe_rx_t *cqe_rx, prev->next = seg; seg->data_len = rb_sz[nicvf_frag_num(seg_idx)]; - seg->port = port_id; - seg->data_off = RTE_PKTMBUF_HEADROOM; - rte_mbuf_refcnt_set(seg, 1); + nicvf_mbuff_init_update(seg, mbuf_init, 0); prev = seg; } @@ -541,7 +533,7 @@ nicvf_recv_pkts_multiseg(void *rx_queue, struct rte_mbuf **rx_pkts, uint32_t i, to_process, cqe_head, buffers_consumed = 0; int32_t available_space = rxq->available_space; uint16_t nb_segs; - const uint8_t port_id = rxq->port_id; + const uint64_t mbuf_init = rxq->mbuf_initializer.value; const uint8_t rbptr_offset = rxq->rbptr_offset; cqe_head = rxq->head & cqe_mask; @@ -552,7 +544,7 @@ nicvf_recv_pkts_multiseg(void *rx_queue, struct rte_mbuf **rx_pkts, cq_entry = &desc[cqe_head]; cqe_rx = (struct cqe_rx_t *)cq_entry; nb_segs = nicvf_process_cq_mseg_entry(cqe_rx, mbuf_phys_off, - port_id, rx_pkts + i, rbptr_offset); + rx_pkts + i, rbptr_offset, mbuf_init); buffers_consumed += nb_segs; cqe_head = (cqe_head + 1) & cqe_mask; nicvf_prefetch_store_keep(rx_pkts[i]); diff --git a/drivers/net/thunderx/nicvf_rxtx.h b/drivers/net/thunderx/nicvf_rxtx.h index 9dad8a5ab..3631ff22f 100644 --- a/drivers/net/thunderx/nicvf_rxtx.h +++ b/drivers/net/thunderx/nicvf_rxtx.h @@ -84,6 +84,33 @@ fill_sq_desc_gather(union sq_entry_t *entry, struct rte_mbuf *pkt) } #endif +static inline void +nicvf_mbuff_init_update(struct rte_mbuf *pkt, const uint64_t mbuf_init, + uint16_t apad) +{ + union mbuf_initializer init = {.value = mbuf_init}; +#if RTE_BYTE_ORDER == RTE_BIG_ENDIAN + init.fields.data_off += apad; +#else + init.value += apad; +#endif + *(uint64_t *)(&pkt->rearm_data) = init.value; +} + +static inline void +nicvf_mbuff_init_mseg_update(struct rte_mbuf *pkt, const uint64_t mbuf_init, + uint16_t apad, uint16_t nb_segs) +{ + union mbuf_initializer init = {.value = mbuf_init}; +#if RTE_BYTE_ORDER == RTE_BIG_ENDIAN + init.fields.data_off += apad; +#else + init.value += apad; +#endif + init.fields.nb_segs = nb_segs; + *(uint64_t *)(&pkt->rearm_data) = init.value; +} + uint32_t nicvf_dev_rx_queue_count(struct rte_eth_dev *dev, uint16_t queue_idx); uint32_t nicvf_dev_rbdr_refill(struct rte_eth_dev *dev, uint16_t queue_idx); diff --git a/drivers/net/thunderx/nicvf_struct.h b/drivers/net/thunderx/nicvf_struct.h index 5bc6d5773..34c41b791 100644 --- a/drivers/net/thunderx/nicvf_struct.h +++ b/drivers/net/thunderx/nicvf_struct.h @@ -72,10 +72,21 @@ struct nicvf_txq { uint16_t tx_free_thresh; } __rte_cache_aligned; +union mbuf_initializer { + struct { + uint16_t data_off; + uint16_t refcnt; + uint16_t nb_segs; + uint16_t port; + } fields; + uint64_t value; +}; + struct nicvf_rxq { uint64_t mbuf_phys_off; uintptr_t cq_status; uintptr_t cq_door; + union mbuf_initializer mbuf_initializer; nicvf_phys_addr_t phys; union cq_entry_t *desc; struct nicvf_rbdr *shared_rbdr; -- 2.12.2