From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mails.dpdk.org (mails.dpdk.org [217.70.189.124]) by inbox.dpdk.org (Postfix) with ESMTP id 17CA8462CC for ; Wed, 26 Feb 2025 20:55:54 +0100 (CET) Received: from mails.dpdk.org (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 04C1040676; Wed, 26 Feb 2025 20:55:54 +0100 (CET) Received: from mail-ej1-f99.google.com (mail-ej1-f99.google.com [209.85.218.99]) by mails.dpdk.org (Postfix) with ESMTP id 932D940395 for ; Wed, 26 Feb 2025 20:55:51 +0100 (CET) Received: by mail-ej1-f99.google.com with SMTP id a640c23a62f3a-aaecf50578eso22342266b.2 for ; Wed, 26 Feb 2025 11:55:51 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=6wind.com; s=google; t=1740599751; x=1741204551; darn=dpdk.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=QhhuRDDB3LRiPIWIJf85Y+mnxcsa9XIjUBNSZDC6M2Y=; b=RIsnSC/dH4PuSzwthASGhYWHYL3IYcyajICkiaSjM6kxNxjAtOVFI3kuElOL60vZp0 OEQGez6uHNm9hRuC7gyc756ketRGXIVJ4FYryBEEh0G9SYxpLnwm6MzYSsu1ElEWG+r9 HM9l0j4bndcZVAOSFz7vZ9fqZpGfMEnUFVhal+SiD05U31rzICYonBOYuIODGbisYE+f URMNILm4GL/4vPvfdsl6UN6SetmKAeb96mH4Dy6isWlG6L6L4QLJzFyokaNQTblUIegG JZjwT3NG4w5L/Psbxe/Jnqjh2dhXmypgP8Tp/r86MLbMqZoTkIVBOBwP6ApNu40vdT2C JKEg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1740599751; x=1741204551; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=QhhuRDDB3LRiPIWIJf85Y+mnxcsa9XIjUBNSZDC6M2Y=; b=oxE0SGmt+2F89uQDvOOROENLvry4v+ZLAY3/vp5oMzv4MxgJx4vhGVNJhDAOKXMTWX OPjxeivev39cIevn4Df+5GnMaYYuXsQVSRZCMcZPFlG1bB/c6IGYxES8Xv9vAaEJqy9b qf/PxVPk+pha1fqg6J805RdlnkY1f/LLrmwi1XMzhL0Rn/o8DJTXjLcA1Ms1ugsWoxgE 4jtl1ywTvjRdDtIKCO2waHiY5zWSQEqTaETDWQJgogL29FVVUst1Q7MjyKxQb5B3xZ6b TM/U2y2zreeHrtRGbo/MdeK/xdvgd1lXXAZWdpksT37WDZndxM/TgD23IL0dxfhOxbMv E4tQ== X-Forwarded-Encrypted: i=1; AJvYcCVip1rIUzgUNKFUQQFBgi3UGjEgKkRd+aYszcwJnKkD3HvTAp5K6QeGE9TMwC9hd3c+AZ5czgE=@dpdk.org X-Gm-Message-State: AOJu0Yyzv2BmX4sjDw3mWMKBhTTHHuJ6o/x3OUD3e1WTdOv//DdbqAmL zhCOBHyWIoINUC1QNC04kXNqU+/lPDQ/Sigy3O/9Og7k56tSBmsRZtePcal8rTdnnfUiXmC/vk9 zbDsl4M7JkTOvIt3YpZKgqZZIUSXELofQ X-Gm-Gg: ASbGncu61q1avlaw/BgKKrSnWxONGlwt+q0K0Bgfl0+oLcs05fgHSX9+YGsPhCQIC81 sDIdc3rITOGbWtJElYlo4m70BSb07q8E+ZCLmuYXU9e+ZB2wqrRP4L/ezu878T6mM3GM/o0UeN/ 7Gckje912m39smcFvlPZv0H16JwoyN8cSc1Xylid2fiHVPwiXRAgdvh1c+U91T98pkde0iim/aR 9xCRLxxL8sv6ZCoSaYHvkB/Y8PQvxxSQGI57zKchDUoHHHgJvUK4J9ScVEA6q0BO3fNFctR8u+n MDGFKWdnBsm3NDa+ctvI+3Cmq1x601ce4YxGaSfO0IubI2k8jADYRF0QLfwr X-Google-Smtp-Source: AGHT+IHkbhUWybAJ3OYhQwmQn3jozcV053QYj/efLqzg98q12m+XLYJBWoNGcwJq8+UdHcMqLoyK6oSIpe0A X-Received: by 2002:a17:907:9619:b0:abe:ebe2:6747 with SMTP id a640c23a62f3a-abeebe26b4amr701713666b.9.1740599751193; Wed, 26 Feb 2025 11:55:51 -0800 (PST) Received: from smtpservice.6wind.com ([185.13.181.2]) by smtp-relay.gmail.com with ESMTP id a640c23a62f3a-abed1b14785sm26701966b.95.2025.02.26.11.55.51; Wed, 26 Feb 2025 11:55:51 -0800 (PST) X-Relaying-Domain: 6wind.com Received: from localhost (rainbow.dev.6wind.com [10.17.1.165]) by smtpservice.6wind.com (Postfix) with ESMTP id 08FA2175F1; Wed, 26 Feb 2025 20:55:51 +0100 (CET) From: Ariel Otilibili To: dev@dpdk.org Cc: Thomas Monjalon , David Marchand , stable@dpdk.org, Stephen Hemminger , Ciara Loftus , Maryam Tahhan , Ariel Otilibili Subject: [PATCH v11 2/2] net/af_xdp: Refactor af_xdp_tx_zc Date: Wed, 26 Feb 2025 20:55:04 +0100 Message-Id: <20250226195504.2340737-3-ariel.otilibili@6wind.com> X-Mailer: git-send-email 2.30.2 In-Reply-To: <20250226195504.2340737-1-ariel.otilibili@6wind.com> References: <20250116195640.68885-1-ariel.otilibili@6wind.com> <20250226195504.2340737-1-ariel.otilibili@6wind.com> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-BeenThere: stable@dpdk.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: patches for DPDK stable branches List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: stable-bounces@dpdk.org Both legs of the loop share the same logic: the common parts are about reserving and filling both address and length into the description. This is moved into reserve_and_fill(). Bugzilla ID: 1440 Suggested-by: Maryam Tahhan Signed-off-by: Ariel Otilibili Acked-by: Maryam Tahhan --- drivers/net/af_xdp/rte_eth_af_xdp.c | 75 ++++++++++++++++------------- 1 file changed, 42 insertions(+), 33 deletions(-) diff --git a/drivers/net/af_xdp/rte_eth_af_xdp.c b/drivers/net/af_xdp/rte_eth_af_xdp.c index 092bcb73aa0a..013f30dfc3bf 100644 --- a/drivers/net/af_xdp/rte_eth_af_xdp.c +++ b/drivers/net/af_xdp/rte_eth_af_xdp.c @@ -536,21 +536,49 @@ kick_tx(struct pkt_tx_queue *txq, struct xsk_ring_cons *cq) } } +static inline struct xdp_desc * +reserve_and_fill(struct pkt_tx_queue *txq, struct rte_mbuf *mbuf, + struct xsk_umem_info *umem, void **pkt_ptr) +{ + struct xdp_desc *desc = NULL; + uint64_t addr, offset; + uint32_t idx_tx; + + if (!xsk_ring_prod__reserve(&txq->tx, 1, &idx_tx)) + goto out; + + desc = xsk_ring_prod__tx_desc(&txq->tx, idx_tx); + desc->len = mbuf->pkt_len; + + addr = (uint64_t)mbuf - (uint64_t)umem->buffer + - umem->mb_pool->header_size; + offset = rte_pktmbuf_mtod(mbuf, uint64_t) - (uint64_t)mbuf + + umem->mb_pool->header_size; + + if (pkt_ptr) + *pkt_ptr = xsk_umem__get_data(umem->buffer, addr + offset); + + offset = offset << XSK_UNALIGNED_BUF_OFFSET_SHIFT; + desc->addr = addr | offset; + +out: + return desc; +} + #if defined(XDP_UMEM_UNALIGNED_CHUNK_FLAG) static uint16_t af_xdp_tx_zc(void *queue, struct rte_mbuf **bufs, uint16_t nb_pkts) { struct pkt_tx_queue *txq = queue; struct xsk_umem_info *umem = txq->umem; - struct rte_mbuf *mbuf; + struct rte_mbuf *mbuf, *local_mbuf = NULL; unsigned long tx_bytes = 0; int i; - uint32_t idx_tx; uint16_t count = 0; struct xdp_desc *desc; - uint64_t addr, offset; struct xsk_ring_cons *cq = &txq->pair->cq; uint32_t free_thresh = cq->size >> 1; + void *pkt; if (xsk_cons_nb_avail(cq, free_thresh) >= free_thresh) pull_umem_cq(umem, XSK_RING_CONS__DEFAULT_NUM_DESCS, cq); @@ -559,51 +587,32 @@ af_xdp_tx_zc(void *queue, struct rte_mbuf **bufs, uint16_t nb_pkts) mbuf = bufs[i]; if (mbuf->pool == umem->mb_pool) { - if (!xsk_ring_prod__reserve(&txq->tx, 1, &idx_tx)) { + desc = reserve_and_fill(txq, mbuf, umem, NULL); + if (!desc) { kick_tx(txq, cq); - if (!xsk_ring_prod__reserve(&txq->tx, 1, - &idx_tx)) + desc = reserve_and_fill(txq, mbuf, umem, NULL); + if (!desc) goto out; } - desc = xsk_ring_prod__tx_desc(&txq->tx, idx_tx); - desc->len = mbuf->pkt_len; - addr = (uint64_t)mbuf - (uint64_t)umem->buffer - - umem->mb_pool->header_size; - offset = rte_pktmbuf_mtod(mbuf, uint64_t) - - (uint64_t)mbuf + - umem->mb_pool->header_size; - offset = offset << XSK_UNALIGNED_BUF_OFFSET_SHIFT; - desc->addr = addr | offset; + tx_bytes += desc->len; count++; } else { - struct rte_mbuf *local_mbuf = - rte_pktmbuf_alloc(umem->mb_pool); - void *pkt; - - if (local_mbuf == NULL) + local_mbuf = rte_pktmbuf_alloc(umem->mb_pool); + if (!local_mbuf) goto out; - if (!xsk_ring_prod__reserve(&txq->tx, 1, &idx_tx)) { + desc = reserve_and_fill(txq, local_mbuf, umem, &pkt); + if (!desc) { rte_pktmbuf_free(local_mbuf); goto out; } - desc = xsk_ring_prod__tx_desc(&txq->tx, idx_tx); desc->len = mbuf->pkt_len; - - addr = (uint64_t)local_mbuf - (uint64_t)umem->buffer - - umem->mb_pool->header_size; - offset = rte_pktmbuf_mtod(local_mbuf, uint64_t) - - (uint64_t)local_mbuf + - umem->mb_pool->header_size; - pkt = xsk_umem__get_data(umem->buffer, addr + offset); - offset = offset << XSK_UNALIGNED_BUF_OFFSET_SHIFT; - desc->addr = addr | offset; rte_memcpy(pkt, rte_pktmbuf_mtod(mbuf, void *), - desc->len); - tx_bytes += desc->len; + desc->len); rte_pktmbuf_free(mbuf); + tx_bytes += desc->len; count++; } } -- 2.30.2