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 9212E46546 for ; Wed, 9 Apr 2025 18:24:38 +0200 (CEST) Received: from mails.dpdk.org (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 66ADE40656; Wed, 9 Apr 2025 18:24:38 +0200 (CEST) Received: from mail-pj1-f51.google.com (mail-pj1-f51.google.com [209.85.216.51]) by mails.dpdk.org (Postfix) with ESMTP id F0F4B402B7 for ; Wed, 9 Apr 2025 18:24:36 +0200 (CEST) Received: by mail-pj1-f51.google.com with SMTP id 98e67ed59e1d1-2ff694d2d4dso6245605a91.0 for ; Wed, 09 Apr 2025 09:24:36 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=networkplumber-org.20230601.gappssmtp.com; s=20230601; t=1744215876; x=1744820676; darn=dpdk.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:subject:cc:to:from:date:from:to:cc:subject:date :message-id:reply-to; bh=U4m66mBbYvEhmkI1E7ZrqqncJNGABF1BI0C1RZMGi68=; b=L7ZLlrAQtLL1F8eD1c6Marm1VegkuHfN4RYHPqSXAdOPJpRZ0BKU8tLM88YkkkaQ55 FeVlGz/PsLDrR0DrwaaDY08xf++vO+69lSl5f0qEMex3iaw2s8gwiO2u1C43cCYxKYf7 xcyGBOlwCVDVgwqDmQwG4aKW3JGT2VpJx1CfwqmGNrSObhZo7Ruq2NOU3zSMnUNyu16m gk6X5l9gckaFCeaYhh7obVkGMMDTqqv9FLHZgleWPTcY01sLO9dH+YlcQQWgOQlXy3fg Y97MiLYqyzlDsMVj33GXn1N59Va2wDjyvhgEyd7cklulUqQWZ5YYHiCLJb64uWmBemGP 6YGw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1744215876; x=1744820676; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:subject:cc:to:from:date:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=U4m66mBbYvEhmkI1E7ZrqqncJNGABF1BI0C1RZMGi68=; b=pisf4YLbTd1YLyrX0fqtsXouj2AsEtFdkrIku7zqAcsiVOfA8nkYKpsiR65lNF07Am 9vomxocgDkdDQdzvDZoJI6jrJRhRK33le+jvZakU/X0ajCWrSlTqL8jXjIVWhLxTyx2t 1skUzF2nDD66/w6DcXVPTStH2I5oG0tmBC9Vq9nusbZOY2EeDAxlQylfLCxwPOXP+XEp 8sftWSXPdgWiAlDO6zbkbcQq2WIWdDeOOiwx1Vas7EpZkNT/ld4UWWRvEkoiowT2T9LM m+GdHwCyfRkr8wci57Mgr/RbhfKEZlgeRgMxqPoGxIYXx6/KBu8p/Fsaw4121Xu0nO17 i8zQ== X-Forwarded-Encrypted: i=1; AJvYcCWvIW0Tarojf0nKME1MoCHmk31pH6H+KaEEYFGKtrbE/i9H4MeM01MUVtxnLP91h2bNPY/uWg==@dpdk.org X-Gm-Message-State: AOJu0YzXkDAmfST9uZC/tA6UehME5FfyNmudtUzkrqqsCgI1Htb98LDl gjieuzQsPJl9wHdxvWkv2sz84762rCNsTAfzx5CkcSvAijSUKT+XllhnujDVvZQ= X-Gm-Gg: ASbGncv4OzHKHn7WNcqFNe5QW4I4hI7u8+ffqnUv9nnmf9gT/753xnck+qvQ23MbTnm LPYh+3Lr5JWnSczo2cmxDUjTfyVmGvRD9HfzPdxknfeZqCY6jugXWrmRirx2jQjxyA8YUG9Flty 1pLQ1BG+FUQ4e8sjvJFt0ZyF/WxLzu79ciQVKZ4v89r0C/fVXq4KuBph3OxwmKaTQmO12wHbPsX nauKPH1VPNoteoXuNW33WDCRHBTUzDmHF8cc5gmXfCNxmTslc+DJ/2NCWWqAgnRvTVxlrlUUWqn kKwvc0h99sd+7bhYrIhNYbsObMO5PeBCs/+gvyFFBS/t8a2hvP9xMPao1NoQyZX6MNTmZA/TgUD avIg4pMw9Hz9DcvAD X-Google-Smtp-Source: AGHT+IFbvHVAlTnPwHeHq64hrd0l7hh5uObZKIt/pSkaPQhqzGfM4vgtI0oi/YWyLPAX8tSxmdD4wg== X-Received: by 2002:a17:90b:53c6:b0:2ff:5a9d:9390 with SMTP id 98e67ed59e1d1-306dbbae29amr5057037a91.8.1744215875922; Wed, 09 Apr 2025 09:24:35 -0700 (PDT) Received: from hermes.local (204-195-96-226.wavecable.com. [204.195.96.226]) by smtp.gmail.com with ESMTPSA id 98e67ed59e1d1-306dd11e67dsm1856858a91.13.2025.04.09.09.24.35 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 09 Apr 2025 09:24:35 -0700 (PDT) Date: Wed, 9 Apr 2025 09:24:18 -0700 From: Stephen Hemminger To: "Lombardo, Ed" Cc: Dmitry Kozlyuk , "users@dpdk.org" Subject: Re: mbuf refcnt issue Message-ID: <20250409092418.70c5eb3d@hermes.local> In-Reply-To: References: <20250408205341.68d37d0a@hermes.local> MIME-Version: 1.0 Content-Type: text/plain; charset=US-ASCII Content-Transfer-Encoding: 7bit X-BeenThere: users@dpdk.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: DPDK usage discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: users-bounces@dpdk.org On Wed, 9 Apr 2025 04:46:09 +0000 "Lombardo, Ed" wrote: > Hi Stephen, > I am looking a the rte_mbuf.h file for rte_pktmbuf_free() and it is not clear to me that it checks if the mbuf refcnt is 1 before decrementing it and allowing the mbuf and segments (if any) to be returned to free pool. > > Could my application issue be I have tx threads that transmit packets and does rte_pktmbuf_free(), while one other thread will perform rte_pktmbuf_free() on the same mbuf? I ensured I bump the mbuf refcnt to 2 before other threads can process the same mbuf. > > Thanks, > Ed It doesn't need to check refcnt there. The check is done later (since mbuf can be multi segment). rte_pktmbuf_free -> rte_pktmbuf_free_seg -> rte_pktmbuf_prefree_seg static __rte_always_inline struct rte_mbuf * rte_pktmbuf_prefree_seg(struct rte_mbuf *m) { __rte_mbuf_sanity_check(m, 0); if (likely(rte_mbuf_refcnt_read(m) == 1)) { normal fast path. breaks the chain. } else if (__rte_mbuf_refcnt_update(m, -1) == 0) { refcnt > 1 logic Note, the refcnt doesn't always go to zero when the mbuf is put back in the pool. The refcnt for a freed mbuf (in the pool) doesn't matter, it is free, it is dead. The refcnt is reset to 1 when mbuf is extracted from the pool.