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 206854367C; Tue, 5 Dec 2023 19:50:37 +0100 (CET) Received: from mails.dpdk.org (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id B050742DA3; Tue, 5 Dec 2023 19:50:36 +0100 (CET) Received: from mail-pg1-f177.google.com (mail-pg1-f177.google.com [209.85.215.177]) by mails.dpdk.org (Postfix) with ESMTP id EACF440297 for ; Tue, 5 Dec 2023 19:50:35 +0100 (CET) Received: by mail-pg1-f177.google.com with SMTP id 41be03b00d2f7-5bdf5a025c1so2703321a12.0 for ; Tue, 05 Dec 2023 10:50:35 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=networkplumber-org.20230601.gappssmtp.com; s=20230601; t=1701802234; x=1702407034; 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=Ps6bOa9S6WB3eYJfByM7d6SKV92R0FkRRyem5JdRqaE=; b=V8Yy3jPIyeRjE26zEBbOmXVlKPrDTZNOD+0dkmUmsvPL7lWSiJJ36EeV0DdbeSOPAJ QjjudyZWd0gdkndupV9wH9qW72IuoevveA1Hfg9zhQbqBivsnrwjSC4Ji62LEyMQt+KO 2E6F5UGcC2C/ZbMOMIl9098MeiKMH1mZ4xDxpiSXYUEKKSqBjzKLwutIuXf5coVzLMUe CNv3pkJSSw2ry+5vxv1OdPWEG6MpUsn/RFvg+Fb1htDuanzp3P2clfY39Qxe2xsf3WDS U0mCLrOS1LPCm9PK9+46aMnjBhEwE7vSutF+qeEN1gw4ydCNgbk1VQeDR2uzD0E1YPbp vIWQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1701802234; x=1702407034; 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=Ps6bOa9S6WB3eYJfByM7d6SKV92R0FkRRyem5JdRqaE=; b=XtVM/XbyyP7LBg3Apicgb7l3RAXrcgCRolME03CkvHj0Or7SIcsB+HPGIdQq+nL609 yi4kMULWlG3rl57UbBqLuJKOO35z7CWYbnG043rL3cf7CU+dvd0nwUOVlr/iKe86CzIJ eBNldDBqxCIhy8SoryhjskPwO0OWpMIx89xb77DocBbh/O6AafGOctHaMpg0VZODSq4n Pi7x5NZpnplvM9yIt/qE+a6fkCvu8ELmwvziXoiXawW+O+/F5CJXUTq69TtAqeTzrqPi ddQIfQDp0betIM7vKhS0jy8lXtOzSSeRWD41vGxny3JobrRGpfmoBwBHzCk/Si9o9eiv xdfg== X-Gm-Message-State: AOJu0Yy+697sH9NCBHhbblCor1CY42TW3qjG2BXgSu+2+zB8JSy8HdV6 XKNLkU61wTJziYYJXMg+5MAKLA== X-Google-Smtp-Source: AGHT+IE+tpWT/nWiK3IX3Zj9Xoux2E8yoEKTkrirj81/zUzjidgWLuWGzvDm0EtI28BgCEv0n3gBkg== X-Received: by 2002:a05:6a20:8f13:b0:18c:af15:7e73 with SMTP id b19-20020a056a208f1300b0018caf157e73mr4733275pzk.48.1701802234647; Tue, 05 Dec 2023 10:50:34 -0800 (PST) Received: from hermes.local (204-195-123-141.wavecable.com. [204.195.123.141]) by smtp.gmail.com with ESMTPSA id q8-20020a632a08000000b0056606274e54sm9765794pgq.31.2023.12.05.10.50.34 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 05 Dec 2023 10:50:34 -0800 (PST) Date: Tue, 5 Dec 2023 10:50:32 -0800 From: Stephen Hemminger To: Konstantin Ananyev Cc: Morten =?UTF-8?B?QnLDuHJ1cA==?= , Feifei Wang , "dev@dpdk.org" , "nd@arm.com" , Ruifeng Wang Subject: Re: [PATCH v1] mbuf: remove the redundant code for mbuf prefree Message-ID: <20231205105032.4b81e3da@hermes.local> In-Reply-To: References: <20231204023910.1714667-1-feifei.wang2@arm.com> <98CBD80474FA8B44BF855DF32C47DC35E9F081@smartserver.smartshare.dk> MIME-Version: 1.0 Content-Type: text/plain; charset=US-ASCII Content-Transfer-Encoding: 7bit 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 On Mon, 4 Dec 2023 11:07:08 +0000 Konstantin Ananyev wrote: > > > 2.25.1 > > > > NAK. > > > > This patch is not race safe. > > +1, It is a bad idea. The patch does raise a couple of issues that could be addressed by rearranging. There is duplicate code, and there are no comments to explain the rationale. Maybe something like the following (untested): diff --git a/lib/mbuf/rte_mbuf.h b/lib/mbuf/rte_mbuf.h index 286b32b788a5..b43c055fbe3f 100644 --- a/lib/mbuf/rte_mbuf.h +++ b/lib/mbuf/rte_mbuf.h @@ -1342,42 +1342,32 @@ rte_pktmbuf_prefree_seg(struct rte_mbuf *m) { __rte_mbuf_sanity_check(m, 0); - if (likely(rte_mbuf_refcnt_read(m) == 1)) { - - if (!RTE_MBUF_DIRECT(m)) { - rte_pktmbuf_detach(m); - if (RTE_MBUF_HAS_EXTBUF(m) && - RTE_MBUF_HAS_PINNED_EXTBUF(m) && - __rte_pktmbuf_pinned_extbuf_decref(m)) - return NULL; - } - - if (m->next != NULL) - m->next = NULL; - if (m->nb_segs != 1) - m->nb_segs = 1; - - return m; - - } else if (__rte_mbuf_refcnt_update(m, -1) == 0) { - - if (!RTE_MBUF_DIRECT(m)) { - rte_pktmbuf_detach(m); - if (RTE_MBUF_HAS_EXTBUF(m) && - RTE_MBUF_HAS_PINNED_EXTBUF(m) && - __rte_pktmbuf_pinned_extbuf_decref(m)) - return NULL; - } - - if (m->next != NULL) - m->next = NULL; - if (m->nb_segs != 1) - m->nb_segs = 1; + if (likely(rte_mbuf_refcnt_read(m) != 1) ) { + /* If this is the only reference to the mbuf it can just + * be setup for reuse without modifying reference count. + */ + } else if (unlikely(__rte_mbuf_refcnt_update(m, -1) == 0)) { + /* This was last reference reset to 1 for recycling/free. */ rte_mbuf_refcnt_set(m, 1); + } else { + /* mbuf is still in use */ + return NULL; + } - return m; + if (!RTE_MBUF_DIRECT(m)) { + rte_pktmbuf_detach(m); + if (RTE_MBUF_HAS_EXTBUF(m) && + RTE_MBUF_HAS_PINNED_EXTBUF(m) && + __rte_pktmbuf_pinned_extbuf_decref(m)) + + return NULL; } - return NULL; + + if (m->next != NULL) + m->next = NULL; + if (m->nb_segs != 1) + m->nb_segs = 1; + return m; } /**