From patchwork Mon Jan 18 20:35:08 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andrew Boyer X-Patchwork-Id: 86833 X-Patchwork-Delegate: ferruh.yigit@amd.com Return-Path: X-Original-To: patchwork@inbox.dpdk.org Delivered-To: patchwork@inbox.dpdk.org Received: from mails.dpdk.org (mails.dpdk.org [217.70.189.124]) by inbox.dpdk.org (Postfix) with ESMTP id CD090A0A03; Mon, 18 Jan 2021 21:37:07 +0100 (CET) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id DDA93140EA6; Mon, 18 Jan 2021 21:36:00 +0100 (CET) Received: from mail-pj1-f53.google.com (mail-pj1-f53.google.com [209.85.216.53]) by mails.dpdk.org (Postfix) with ESMTP id 8BC51140EBD for ; Mon, 18 Jan 2021 21:35:57 +0100 (CET) Received: by mail-pj1-f53.google.com with SMTP id cq1so10289568pjb.4 for ; Mon, 18 Jan 2021 12:35:57 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=pensando.io; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=g3NiWdwLg9vTUwSHmEQgrP78GNOtC7XVo7532k4wI0Y=; b=UBzDW58uqEJtYt1FGcHAUbWd8cMAjRYTkL1boxiYFRRKe6BVPqWxz5A2YX0CVkHgzP pmER+NECaG5siudMOfFFvVOIyukDKuPLfhrFnVSZ7zcQjQIfPs3IpCb+AQXrQJqNAUmx 5w3LpjNlw8FSf51LFim/BFf4GmPRIdVwPWiuvYfcOMIqp2jzduiW8xEYTglrIEhLoqIx tNGD+pBu9ELOtqhkVwBdu2smz9Bn7zIbHYMhtdj6KQpYcr7Bj23FUhQtmYMJuEJgZTB9 8LVglLgiWLUX6wB546Rrck2xT6ZwXl+cL4GhoYVpfFkL5bleB7HVCAX5Rivm0tib3jTH OWoA== 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=g3NiWdwLg9vTUwSHmEQgrP78GNOtC7XVo7532k4wI0Y=; b=iDCGqcKzQ4pzVM7e95ClgRE9H4Es3aBRfBq4VP0BoBmV9v/n7f5cdfOnI03dCINyXx nem7fRmNgzOp+RcU/Rb8izCZjsbjyduiNjFvGvU8xS0kWsofeBKwOv3+VmXRzqTv94gS uKQysWBbk4JLQFiXC/O6Ir6cse8x7Zu3abDP0CtjqY4re7mjc8OPJ/F+CQAvsuEc23x9 R1DyiKMPr7+a3FZEAm9xVUEeHEjax6Tx6pMchdVq6f7ZZYMqzv/OD2iWlOL8GyvzK7MQ WKhXXQ7mdqgtXSG1mFB48ycSicsXG6f/jqdGbUIGXREG3Vxyp89UvFztEoWz1C2O4lHe +reg== X-Gm-Message-State: AOAM530HT2WM822WPbs1VQbbtl1k2b2f9lFWCKglsLFbxvL9DSymFH8Z p0J4LxXZ8qXnh68M8boEWQY4Ilut8lwMSg== X-Google-Smtp-Source: ABdhPJw2D8WT5erjx4Xqu8AuhmJgrqFk88X1Bhh6FrNQNg7c8SpaOXWmkC7LCvEeneUUImYIcUFSbA== X-Received: by 2002:a17:90b:513:: with SMTP id r19mr1192547pjz.38.1611002156614; Mon, 18 Jan 2021 12:35:56 -0800 (PST) Received: from driver-dev1.pensando.io ([12.226.153.42]) by smtp.gmail.com with ESMTPSA id g201sm795160pfb.81.2021.01.18.12.35.55 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 18 Jan 2021 12:35:56 -0800 (PST) From: Andrew Boyer To: dev@dpdk.org Cc: Alfredo Cardigliano , Andrew Boyer , stable@dpdk.org Date: Mon, 18 Jan 2021 12:35:08 -0800 Message-Id: <20210118203508.1332-14-aboyer@pensando.io> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20210118203508.1332-1-aboyer@pensando.io> References: <20210118203508.1332-1-aboyer@pensando.io> Subject: [dpdk-dev] [PATCH 13/13] net/ionic: fix address handling in transmit code X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.29 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" Don't assume standard headroom. Use helper variables to improve readability. Fixes: a27d901331da ("net/ionic: add Rx and Tx handling") Cc: stable@dpdk.org Signed-off-by: Andrew Boyer --- drivers/net/ionic/ionic_rxtx.c | 20 ++++++++++++-------- 1 file changed, 12 insertions(+), 8 deletions(-) diff --git a/drivers/net/ionic/ionic_rxtx.c b/drivers/net/ionic/ionic_rxtx.c index f49a7cdb0e..b8b3364d11 100644 --- a/drivers/net/ionic/ionic_rxtx.c +++ b/drivers/net/ionic/ionic_rxtx.c @@ -334,7 +334,8 @@ ionic_tx_tso(struct ionic_qcq *txq, struct rte_mbuf *txm, struct ionic_txq_desc *desc; struct ionic_txq_sg_elem *elem; struct rte_mbuf *txm_seg; - uint64_t desc_addr = 0; + rte_iova_t data_iova; + uint64_t desc_addr = 0, next_addr; uint16_t desc_len = 0; uint8_t desc_nsge; uint32_t hdrlen; @@ -371,6 +372,7 @@ ionic_tx_tso(struct ionic_qcq *txq, struct rte_mbuf *txm, seglen = hdrlen + mss; left = txm->data_len; + data_iova = rte_mbuf_data_iova(txm); desc = ionic_tx_tso_next(q, &elem); start = true; @@ -380,7 +382,7 @@ ionic_tx_tso(struct ionic_qcq *txq, struct rte_mbuf *txm, while (left > 0) { len = RTE_MIN(seglen, left); frag_left = seglen - len; - desc_addr = rte_cpu_to_le_64(rte_mbuf_data_iova_default(txm)); + desc_addr = rte_cpu_to_le_64(data_iova + offset); desc_len = len; desc_nsge = 0; left -= len; @@ -404,24 +406,23 @@ ionic_tx_tso(struct ionic_qcq *txq, struct rte_mbuf *txm, txm_seg = txm->next; while (txm_seg != NULL) { offset = 0; + data_iova = rte_mbuf_data_iova(txm_seg); left = txm_seg->data_len; stats->frags++; while (left > 0) { - rte_iova_t data_iova; - data_iova = rte_mbuf_data_iova(txm_seg); - elem->addr = rte_cpu_to_le_64(data_iova) + offset; + next_addr = rte_cpu_to_le_64(data_iova + offset); if (frag_left > 0) { len = RTE_MIN(frag_left, left); frag_left -= len; + elem->addr = next_addr; elem->len = len; elem++; desc_nsge++; } else { len = RTE_MIN(mss, left); frag_left = mss - len; - data_iova = rte_mbuf_data_iova(txm_seg); - desc_addr = rte_cpu_to_le_64(data_iova); + desc_addr = next_addr; desc_len = len; desc_nsge = 0; } @@ -429,6 +430,7 @@ ionic_tx_tso(struct ionic_qcq *txq, struct rte_mbuf *txm, offset += len; if (txm_seg->next != NULL && frag_left > 0) continue; + done = (txm_seg->next == NULL && left == 0); ionic_tx_tso_post(q, desc, txm_seg, desc_addr, desc_nsge, desc_len, @@ -463,7 +465,7 @@ ionic_tx(struct ionic_qcq *txq, struct rte_mbuf *txm, bool encap; bool has_vlan; uint64_t ol_flags = txm->ol_flags; - uint64_t addr = rte_cpu_to_le_64(rte_mbuf_data_iova_default(txm)); + uint64_t addr; uint8_t opcode = IONIC_TXQ_DESC_OPCODE_CSUM_NONE; uint8_t flags = 0; @@ -493,6 +495,8 @@ ionic_tx(struct ionic_qcq *txq, struct rte_mbuf *txm, flags |= has_vlan ? IONIC_TXQ_DESC_FLAG_VLAN : 0; flags |= encap ? IONIC_TXQ_DESC_FLAG_ENCAP : 0; + addr = rte_cpu_to_le_64(rte_mbuf_data_iova(txm)); + desc->cmd = encode_txq_desc_cmd(opcode, flags, txm->nb_segs - 1, addr); desc->len = txm->data_len; desc->vlan_tci = txm->vlan_tci;