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 88527462CC for ; Wed, 26 Feb 2025 21:08:51 +0100 (CET) Received: from mails.dpdk.org (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 7AEB240678; Wed, 26 Feb 2025 21:08:51 +0100 (CET) Received: from mail-wr1-f97.google.com (mail-wr1-f97.google.com [209.85.221.97]) by mails.dpdk.org (Postfix) with ESMTP id E491A402AE for ; Wed, 26 Feb 2025 21:08:46 +0100 (CET) Received: by mail-wr1-f97.google.com with SMTP id ffacd0b85a97d-390df942558so124271f8f.2 for ; Wed, 26 Feb 2025 12:08:46 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=6wind.com; s=google; t=1740600526; x=1741205326; 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=ElBrWPjpset7vRFXvFajL/VkSevGKchRJ8ObYeh19zQ=; b=a7pv/Y7DEg/XM/To4xLpigNjEh7Uq4ENJIK0zGB1u3GmLv0WvRMcBVvtLXW9niadUV /vM0KvX6F2us44l8XFLHn9xc3WPoVmDYmMnAVax/7sBlNv79FWmtzqQkCuh2ESFb1J7Y sDaM26aaEqPoRFM6+yj1GvRIxNmPhCgo8ZTVkbNSvyrlb4cQeG0mDuUYyKq4p0v88lQb qS60pUVrc80/KgYmyKEFFAIB8YYBETq6WF/v80EWTQOc/vlmgPuEBjfOrjmegk+llPVb U1BEppwdpm/r2IaLkg63V1e8VeU7O7QcIqeCiiMGBzqGOkvQin/6g6DaOQT5sVCbZCzA Lkxw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1740600526; x=1741205326; 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=ElBrWPjpset7vRFXvFajL/VkSevGKchRJ8ObYeh19zQ=; b=E4lmubyrRtvRgbsTlhGEJMP4FPndqfBg5g3zb2ozgzBxlpOVTLu8chPpa/QqnmqEgZ IttJ21ydUFRjxER+o/VR2nph5CxBmYZrbDiXJO/0rNxZHc5mJwpGgyuFBmd5Rwl+R9+Q CRgeh4Ab/JqKQe+7ocPP+wRsvvula6O4KFd0HzPfhIIKj2SZoRpTOEUYc3JDXuEKlvbq 8/OV7feimeNJe9q5OWa7Tkkg+lMgcdkRejnj2E9aojLI2WpaVl+mpqG+pQzqcNQ0eRx9 X+f4mssZL3epzDHc+NUSWxK+NfrZvW8oWmyFPUPDA9mbqHykm2omrMcd+ndDluMX9vB9 aQ4w== X-Forwarded-Encrypted: i=1; AJvYcCUJyO4iqV/10q+jPsup8MHCKyIwN7kzvGvpz8AgZ3DCtJoBChbEf+kLauVvhSTDvGd30MfvZRI=@dpdk.org X-Gm-Message-State: AOJu0Yxj1xI3LO6oFDVy3HuREfxNcdWubT3BWUVFecKPJHGpxiKCGmEl XZaplI5YAGHSqxbtNSVYBXoYhIN5uNoA+ZzmNeZP2xBtg+0QlOzLiXtBCxDFoUt+ZqfF9ip5XB5 yy/dx+qX2KT0BYrFp3CrvrXch4Ucj6E2O X-Gm-Gg: ASbGncspuhUqxlUExnjvFgldh5m6kX5J878ICQdHC91CRNYg5KwatjBP3YjF6bixNsM nLnUoU5jBbaZFZSmnOiRUkiSRVqqtwvCtJEnA0i4yehwgr7dliQ543poHsd3FuWw0CoY16wXXDB GbhCz8b17CXTaX5aZxFmq8ZGNoibiWLBTpfUYwiuQ4u7QEwz3dwmQu5GyHIEWpNe2mDF6+P2UjF f7GWfrII39LTyi04eF0nvvm7dx7A1iFqxwGPt3eeu/eOWUAjRBxWYs36NC3J6rwLstt0Gec28HT Wts6vC7gliZ0vHyJA/cRhq7L5TuheZbWstiRBI9VEUY8ypBuQ6SytYSerTuI X-Google-Smtp-Source: AGHT+IH365pOPlQXvaHlP4cZX8wYiUb5LqW76l6Ee5ELelSakp8QDv6Fwtek5dPogoP+p5kmzEJm+kkBtAy2 X-Received: by 2002:a05:6000:18ad:b0:38f:2766:759f with SMTP id ffacd0b85a97d-390d4f8b640mr4201296f8f.41.1740600526516; Wed, 26 Feb 2025 12:08:46 -0800 (PST) Received: from smtpservice.6wind.com ([185.13.181.2]) by smtp-relay.gmail.com with ESMTP id ffacd0b85a97d-390cd8e63cesm181687f8f.67.2025.02.26.12.08.46; Wed, 26 Feb 2025 12:08:46 -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 65A7B17601; Wed, 26 Feb 2025 21:08:46 +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 v12 2/2] net/af_xdp: Refactor af_xdp_tx_zc Date: Wed, 26 Feb 2025 21:08:41 +0100 Message-Id: <20250226200841.2342632-3-ariel.otilibili@6wind.com> X-Mailer: git-send-email 2.30.2 In-Reply-To: <20250226200841.2342632-1-ariel.otilibili@6wind.com> References: <20250116195640.68885-1-ariel.otilibili@6wind.com> <20250226200841.2342632-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..05115150a7b9 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