From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from mails.dpdk.org (mails.dpdk.org [217.70.189.124]) by smtp.lore.kernel.org (Postfix) with ESMTP id E81F8C55167 for ; Fri, 31 Jul 2026 05:01:15 +0000 (UTC) Received: from mails.dpdk.org (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 9254B40BA3; Fri, 31 Jul 2026 07:00:06 +0200 (CEST) Received: from mail-pf1-f169.google.com (mail-pf1-f169.google.com [209.85.210.169]) by mails.dpdk.org (Postfix) with ESMTP id 205B640C35 for ; Fri, 31 Jul 2026 07:00:05 +0200 (CEST) Received: by mail-pf1-f169.google.com with SMTP id d2e1a72fcca58-8486672f03cso753454b3a.0 for ; Thu, 30 Jul 2026 22:00:05 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=networkplumber-org.20251104.gappssmtp.com; s=20251104; t=1785474004; x=1786078804; 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:content-type; bh=W1TlseSdBJK5er3s/+rcCXjNtQ4TRuzlkUpmqPk7UwY=; b=ISzEag2yf9qBlh0Zl2vjg1wxLc77ReDa3CqVoIdMNJZ7Mp5o1NxCBDjoUiztESA5b8 onLr8vS2Mq+9arOLDf1hidrx2+tx+fPvWoIjwzWkdIYc1wjDBck2KfxzPED1TDBxt9p2 bxZ2Me5bNJSdWovg+WitpjozH4/eeQzfKeRfPn5AH36236/Rm9+6q6ZMYHQB+zsfiqtR M3ZYGixNWIXsE6GqiS/6/w+F/4fo34gsaR/xVhpjhqeXy+11dqA9+lNPSdr6/cA28qHM AKUUe8r3GkgWdq5Ud2/IC59afzxi/BigaU/tlZC+H9QQiE1HgerSHF+SgCl9pyTxpZjJ Lu1w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1785474004; x=1786078804; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to:content-type; bh=W1TlseSdBJK5er3s/+rcCXjNtQ4TRuzlkUpmqPk7UwY=; b=e7+Gz3Uwq8guYcR8wvIasghKyYn+Zh5oTzBZkcpEjHNvnx0JaeX197a5aRt5/Y1kSS 3fbGJQDqaL4gwnttKWKJMwhPekqV7mHQWyfHSJuquCvS4o43fCQa3y/dEx3tFrVOJh9d Q4UCqVCVuMy6R0ioHqNrwtPZkViXxP18Szk6oIRSCt8TD6kR7c1vgJiKGmvTmwIl+hqS DOsDlcukTB7cfVjos9iFt4bs813tmVV7Jtz9dTzk8N2H9KERjryHTRAgeAj3uNbeRZQJ EnYTH9YwVnC1vC0AjvrueGVLp+Zmkp+/PqwoCl2aooolFDg5QAUDv0WwWvU1nkt1cBcB MFuw== X-Gm-Message-State: AOJu0YwLiIMS9UnROYeNyVLyTRGne0A0Nuf+QMQvaEH6gClWoWu0ouhc /b1DQLWR/DkEG37QRX/9wGspRmbLrSfNDYFp8PMzMx3WFoHCTy/OwlVMxVO5ThDmsdevHM4WeUY cwX/G X-Gm-Gg: AR+sD12WTu8Io3aGloUTnnYLBJrXOT95bKH2AqUSgqwiIkRXkMrA6yVFNNQ/S9vzAoR +p7r9+2eBJqzcFwTNGK2RK73VGBIRvleUMwLu6vGVuQbnLKbW8X52t750FmK71AYq/eA4+ptB4l SFBNq0/boUTGXd2ravpN1AiWAJGnkIaT6mTaEdKgRM/K+2f/ZHU7QibmlRhfTKGPA8f6Rbl0aQg 7JW3eIKBWm4N04CCsS1xDUJ+FP4DEdyCPW2DQHmuAlg3ZuD+1gxgT8UNLNnazzFlfh5hJB94tOB cf+wex4XVFeVSj+qRmtUFnDBcjyPYT4y69JIGjN5Ae7MYXQ2dK26kHUMPZsyjQGW+MUYSboC/lO rgs8yPz2z/fko0IJQ4ao9EV0SEm2s7k/ZAKPF/iAXBplLbT4RUmvzE1epru08/EnUWcbvpFnPl9 YTdes7YvfXd4XZq1yBtwsgpYPgmx/BCJV9NPDwImEt7Vyi8aj1xHMBQFMx+IXqQP+rARPPe40do V9vQNLkdZKk/8w8TYlgrvSeLvU= X-Received: by 2002:a05:6a20:da14:b0:3bf:983d:e9b4 with SMTP id adf61e73a8af0-3c91b17da81mr467106637.33.1785474004290; Thu, 30 Jul 2026 22:00:04 -0700 (PDT) Received: from phoenix.lan (204-195-96-226.wavecable.com. [204.195.96.226]) by smtp.gmail.com with ESMTPSA id 5a478bee46e88-3153e06f0f9sm823245eec.23.2026.07.30.22.00.03 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 30 Jul 2026 22:00:03 -0700 (PDT) From: Stephen Hemminger To: dev@dpdk.org Cc: Stephen Hemminger , Long Li , Wei Hu Subject: [PATCH v6 12/24] net/netvsc: replace rte_atomic32 with stdatomic Date: Thu, 30 Jul 2026 21:57:50 -0700 Message-ID: <20260731045948.769926-13-stephen@networkplumber.org> X-Mailer: git-send-email 2.53.0 In-Reply-To: <20260731045948.769926-1-stephen@networkplumber.org> References: <20260521042043.1590536-1-stephen@networkplumber.org> <20260731045948.769926-1-stephen@networkplumber.org> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit 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 Change the rndis transaction id and buffer usage to use stdatomic functions. Signed-off-by: Stephen Hemminger --- drivers/net/netvsc/hn_rndis.c | 28 +++++++++++++++++++--------- drivers/net/netvsc/hn_rxtx.c | 12 +++++++----- drivers/net/netvsc/hn_var.h | 6 +++--- 3 files changed, 29 insertions(+), 17 deletions(-) diff --git a/drivers/net/netvsc/hn_rndis.c b/drivers/net/netvsc/hn_rndis.c index 7c54eebcef..4b1d3d5539 100644 --- a/drivers/net/netvsc/hn_rndis.c +++ b/drivers/net/netvsc/hn_rndis.c @@ -17,7 +17,7 @@ #include #include #include -#include +#include #include #include #include @@ -59,7 +59,8 @@ hn_rndis_rid(struct hn_data *hv) uint32_t rid; do { - rid = rte_atomic32_add_return(&hv->rndis_req_id, 1); + rid = rte_atomic_fetch_add_explicit(&hv->rndis_req_id, 1, + rte_memory_order_seq_cst); } while (rid == 0); return rid; @@ -357,12 +358,14 @@ void hn_rndis_receive_response(struct hn_data *hv, memcpy(hv->rndis_resp, data, len); /* make sure response copied before update */ - rte_smp_wmb(); - - if (rte_atomic32_cmpset(&hv->rndis_pending, hdr->rid, 0) == 0) { + uint32_t expected = hdr->rid; + if (!rte_atomic_compare_exchange_strong_explicit(&hv->rndis_pending, + &expected, 0, + rte_memory_order_release, + rte_memory_order_relaxed)) { PMD_DRV_LOG(NOTICE, "received id %#x pending id %#x", - hdr->rid, (uint32_t)hv->rndis_pending); + hdr->rid, expected); } } @@ -388,8 +391,11 @@ static int hn_rndis_exec1(struct hn_data *hv, return -EINVAL; } + uint32_t expected = 0; if (comp != NULL && - rte_atomic32_cmpset(&hv->rndis_pending, 0, rid) == 0) { + !rte_atomic_compare_exchange_strong_explicit( + &hv->rndis_pending, &expected, rid, + rte_memory_order_acquire, rte_memory_order_relaxed)) { PMD_DRV_LOG(ERR, "Request already pending"); return -EBUSY; @@ -405,7 +411,8 @@ static int hn_rndis_exec1(struct hn_data *hv, time_t start = time(NULL); /* Poll primary channel until response received */ - while (hv->rndis_pending == rid) { + while (rte_atomic_load_explicit(&hv->rndis_pending, + rte_memory_order_acquire) == rid) { if (hv->closed) return -ENETDOWN; @@ -413,7 +420,10 @@ static int hn_rndis_exec1(struct hn_data *hv, PMD_DRV_LOG(ERR, "RNDIS response timed out"); - rte_atomic32_cmpset(&hv->rndis_pending, rid, 0); + expected = rid; + rte_atomic_compare_exchange_strong_explicit( + &hv->rndis_pending, &expected, 0, + rte_memory_order_release, rte_memory_order_relaxed); return -ETIMEDOUT; } diff --git a/drivers/net/netvsc/hn_rxtx.c b/drivers/net/netvsc/hn_rxtx.c index 0d770d1b25..6f536610f2 100644 --- a/drivers/net/netvsc/hn_rxtx.c +++ b/drivers/net/netvsc/hn_rxtx.c @@ -17,7 +17,7 @@ #include #include #include -#include +#include #include #include #include @@ -558,7 +558,8 @@ static void hn_rx_buf_free_cb(void *buf __rte_unused, void *opaque) struct hn_rx_queue *rxq = rxb->rxq; struct hn_data *hv = rxq->hv; - rte_atomic32_dec(&rxq->rxbuf_outstanding); + rte_atomic_fetch_sub_explicit(&rxq->rxbuf_outstanding, 1, + rte_memory_order_release); hn_nvs_ack_rxbuf(hv, rxb->chan, rxb->xactid); } @@ -602,8 +603,8 @@ static void hn_rxpkt(struct hn_rx_queue *rxq, struct hn_rx_bufinfo *rxb, * some space available in receive area for later packets. */ if (hv->rx_extmbuf_enable && dlen > hv->rx_copybreak && - (uint32_t)rte_atomic32_read(&rxq->rxbuf_outstanding) < - hv->rxbuf_section_cnt / 2) { + rte_atomic_load_explicit(&rxq->rxbuf_outstanding, + rte_memory_order_relaxed) < hv->rxbuf_section_cnt / 2) { struct rte_mbuf_ext_shared_info *shinfo; const void *rxbuf; rte_iova_t iova; @@ -619,7 +620,8 @@ static void hn_rxpkt(struct hn_rx_queue *rxq, struct hn_rx_bufinfo *rxb, /* shinfo is already set to 1 by the caller */ if (rte_mbuf_ext_refcnt_update(shinfo, 1) == 2) - rte_atomic32_inc(&rxq->rxbuf_outstanding); + rte_atomic_fetch_add_explicit(&rxq->rxbuf_outstanding, 1, + rte_memory_order_acquire); rte_pktmbuf_attach_extbuf(m, data, iova, dlen + headroom, shinfo); diff --git a/drivers/net/netvsc/hn_var.h b/drivers/net/netvsc/hn_var.h index 574b909c82..d7124a7df9 100644 --- a/drivers/net/netvsc/hn_var.h +++ b/drivers/net/netvsc/hn_var.h @@ -85,7 +85,7 @@ struct hn_rx_queue { void *event_buf; struct hn_rx_bufinfo *rxbuf_info; - rte_atomic32_t rxbuf_outstanding; + RTE_ATOMIC(uint32_t) rxbuf_outstanding; }; @@ -167,8 +167,8 @@ struct hn_data { uint32_t rndis_agg_pkts; uint32_t rndis_agg_align; - volatile uint32_t rndis_pending; - rte_atomic32_t rndis_req_id; + RTE_ATOMIC(uint32_t) rndis_pending; + RTE_ATOMIC(uint32_t) rndis_req_id; uint8_t rndis_resp[256]; uint32_t rss_hash; -- 2.53.0