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 DC1D14562D for ; Tue, 16 Jul 2024 23:06:36 +0200 (CEST) Received: from mails.dpdk.org (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id D6812402C8; Tue, 16 Jul 2024 23:06:36 +0200 (CEST) Received: from mail-qt1-f171.google.com (mail-qt1-f171.google.com [209.85.160.171]) by mails.dpdk.org (Postfix) with ESMTP id 9366A40270 for ; Tue, 16 Jul 2024 23:06:35 +0200 (CEST) Received: by mail-qt1-f171.google.com with SMTP id d75a77b69052e-447fda5a010so33141401cf.3 for ; Tue, 16 Jul 2024 14:06:35 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=atomicrules-com.20230601.gappssmtp.com; s=20230601; t=1721163995; x=1721768795; darn=dpdk.org; h=content-transfer-encoding:mime-version:message-id:date:subject:cc :to:from:from:to:cc:subject:date:message-id:reply-to; bh=KkqAfdjh2/UpYS9WxLYXO3TAJAkKkSi5kyD/8a6vS0o=; b=QIWtuHwPdfcS+2Qu5JwgH5yvGFzFUl4AW1UbNdIV/WGn9uERfXiavySr+WNiG2QtA+ RfDDJMCAUybOvRWdinToucPvYtDqUYzmGZ3NhxgHmY2HIEEPOTc4VTRPWeTrbUkyv2r2 APUVpOenSapWmoyyetX4TVMO1r0/1QSv6SsSLZgpvDNWSsJV2dkSHf2gAfpzb7iO9YvF 5p1yL93pHNpqznr40gRBjCvwuc7kcamt49zXytOTFfQvKbfD46/tkm1niHOlWJ71Lr34 C4T9wnahKfv+3yz/kbEhT3uhYZHLk6Qy3kOxI/Qb73cY3fYPW1er8qtgaaFj0H+Es/B4 yb1A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1721163995; x=1721768795; h=content-transfer-encoding:mime-version:message-id:date:subject:cc :to:from:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=KkqAfdjh2/UpYS9WxLYXO3TAJAkKkSi5kyD/8a6vS0o=; b=dYQwXNqeHKlg8un7a34mRhL6DdFyX+I0gyH23UO1nXo1RBUZ/j/+gpt/7l1r/n6SKk s0cLNkye04/PqQHsACGwmp+8PiwaCU605Czw6lD0cGcIiENf/fRXvRFbaRQ9lelqno/o fbtoRh8ICestZNPC/n2WYFqDXuQFMDRLyAsA++Iyku3Oy80ckpIMQ/3cKT7yE9J2tBB5 TwutHYHyFX3XUEahrhqaVqH/OljeqMW3SYf96JjkgITBTo4USZ4751gYbi4Bk3TcNRKR 7xgr2AgHM5rBXRw+9tMceW3qsv5O5seO91Naz3KD5SPvr+wpft9k7hQDHYt52PvIF7cj eN+Q== X-Gm-Message-State: AOJu0YysiW3Uf7c2Ujel2t8QWKw46EDnA79l9vGuxKXOGYCAHoVehAF8 VUklZHT3qpcm5nrgTqmcuUlWBo8zsoJ0gQZaGfw5q+rV4DKpAmUUzPcw7yaoPQ== X-Google-Smtp-Source: AGHT+IG6VbCofuZbnTBfhP2Bw4dTti7eq8XC4/Rhk1ZSqKjyGkvREelNVUxUAV+cjkTT0x4hFoynOQ== X-Received: by 2002:a05:622a:1b8d:b0:447:df17:5116 with SMTP id d75a77b69052e-44f7abc6be4mr41531331cf.7.1721163994618; Tue, 16 Jul 2024 14:06:34 -0700 (PDT) Received: from localhost.localdomain (pool-173-48-111-149.bstnma.fios.verizon.net. [173.48.111.149]) by smtp.gmail.com with ESMTPSA id d75a77b69052e-44f5b845d30sm39164361cf.89.2024.07.16.14.06.33 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 16 Jul 2024 14:06:34 -0700 (PDT) From: Ed Czeck To: dev@dpdk.org, ferruh.yigit@amd.com Cc: stable@dpdk.org, Shepard Siegel , John Miller Subject: [PATCH] net/ark: fix index arithmetic optimization bug Date: Tue, 16 Jul 2024 17:06:31 -0400 Message-Id: <20240716210631.2557642-1-ed.czeck@atomicrules.com> X-Mailer: git-send-email 2.34.1 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 fix for compiler optimizer error using int32_t. (a - b) > 0 can behave differently under optimization at values near max and min bounds. This patch replaces int32_t with uint32_t except for necessary casts. Fixes: 9ee9e0d3b85e ("net/ark: update to reflect FPGA updates") Cc: stable@dpdk.org Signed-off-by: Ed Czeck --- drivers/net/ark/ark_ethdev_tx.c | 19 ++++++++++--------- 1 file changed, 10 insertions(+), 9 deletions(-) diff --git a/drivers/net/ark/ark_ethdev_tx.c b/drivers/net/ark/ark_ethdev_tx.c index d02a786ee0..b387dadf80 100644 --- a/drivers/net/ark/ark_ethdev_tx.c +++ b/drivers/net/ark/ark_ethdev_tx.c @@ -39,8 +39,8 @@ struct ark_tx_queue { uint32_t queue_mask; /* 3 indexes to the paired data rings. */ - int32_t prod_index; /* where to put the next one */ - int32_t free_index; /* mbuf has been freed */ + uint32_t prod_index; /* where to put the next one */ + uint32_t free_index; /* mbuf has been freed */ /* The queue Id is used to identify the HW Q */ uint16_t phys_qid; @@ -49,7 +49,7 @@ struct ark_tx_queue { /* next cache line - fields written by device */ RTE_MARKER cacheline1 __rte_cache_min_aligned; - volatile int32_t cons_index; /* hw is done, can be freed */ + volatile uint32_t cons_index; /* hw is done, can be freed */ } __rte_cache_aligned; /* Forward declarations */ @@ -108,7 +108,7 @@ eth_ark_xmit_pkts(void *vtxq, struct rte_mbuf **tx_pkts, uint16_t nb_pkts) uint32_t user_meta[5]; int stat; - int32_t prod_index_limit; + uint32_t prod_index_limit; uint16_t nb; uint8_t user_len = 0; const uint32_t min_pkt_len = ARK_MIN_TX_PKTLEN; @@ -124,7 +124,7 @@ eth_ark_xmit_pkts(void *vtxq, struct rte_mbuf **tx_pkts, uint16_t nb_pkts) prod_index_limit = queue->queue_size + queue->free_index - 4; for (nb = 0; - (nb < nb_pkts) && (prod_index_limit - queue->prod_index) > 0; + (nb < nb_pkts) && (int32_t)(prod_index_limit - queue->prod_index) > 0; ++nb) { mbuf = tx_pkts[nb]; @@ -194,13 +194,13 @@ eth_ark_tx_jumbo(struct ark_tx_queue *queue, struct rte_mbuf *mbuf, uint32_t *user_meta, uint8_t meta_cnt) { struct rte_mbuf *next; - int32_t free_queue_space; + uint32_t free_queue_space; uint8_t flags = ARK_DDM_SOP; free_queue_space = queue->queue_mask - (queue->prod_index - queue->free_index); /* We need up to 4 mbufs for first header and 2 for subsequent ones */ - if (unlikely(free_queue_space < (2 + (2 * mbuf->nb_segs)))) + if (unlikely(free_queue_space < (2U + (2U * mbuf->nb_segs)))) return -1; while (mbuf != NULL) { @@ -392,10 +392,11 @@ free_completed_tx(struct ark_tx_queue *queue) { struct rte_mbuf *mbuf; union ark_tx_meta *meta; - int32_t top_index; + uint32_t top_index; top_index = queue->cons_index; /* read once */ - while ((top_index - queue->free_index) > 0) { + + while ((int32_t)(top_index - queue->free_index) > 0) { meta = &queue->meta_q[queue->free_index & queue->queue_mask]; if (likely((meta->flags & ARK_DDM_SOP) != 0)) { mbuf = queue->bufs[queue->free_index & -- 2.34.1