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 kanga.kvack.org (kanga.kvack.org [205.233.56.17]) by smtp.lore.kernel.org (Postfix) with ESMTP id 8EC2ACAC5B5 for ; Thu, 19 Sep 2024 12:33:51 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id AF4E16B0083; Thu, 19 Sep 2024 08:33:50 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id AA4EF6B0085; Thu, 19 Sep 2024 08:33:50 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 944D36B0088; Thu, 19 Sep 2024 08:33:50 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0015.hostedemail.com [216.40.44.15]) by kanga.kvack.org (Postfix) with ESMTP id 78BA46B0083 for ; Thu, 19 Sep 2024 08:33:50 -0400 (EDT) Received: from smtpin11.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay05.hostedemail.com (Postfix) with ESMTP id 2552940CCC for ; Thu, 19 Sep 2024 12:33:50 +0000 (UTC) X-FDA: 82581429420.11.DE663A3 Received: from mail-pj1-f45.google.com (mail-pj1-f45.google.com [209.85.216.45]) by imf01.hostedemail.com (Postfix) with ESMTP id 4141640004 for ; Thu, 19 Sep 2024 12:33:48 +0000 (UTC) Authentication-Results: imf01.hostedemail.com; dkim=pass header.d=gmail.com header.s=20230601 header.b=KAnA2Cq0; dmarc=pass (policy=none) header.from=gmail.com; spf=pass (imf01.hostedemail.com: domain of mmpgouride@gmail.com designates 209.85.216.45 as permitted sender) smtp.mailfrom=mmpgouride@gmail.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1726749103; h=from:from:sender:reply-to:subject:subject:date:date: message-id:message-id:to:to:cc:cc:mime-version:mime-version: content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references:dkim-signature; bh=QmKwDE+vQbJFZKx1pG1WdGf3eu6TWhTPyNHtYBECpZw=; b=wBEIcMraeScTu73uAw31YfjuLhHlZY/QcxPkngWS2aIHmkzRbdMKeskRML4JAF2hV5Q0G2 uZ+2FPkyTa6FzR9j2/aKbeUufJ21cwGW4QwDIat6CXDb6xbjrKnl+FDW5am2sXaPATRI9G CIndS1WuoC3qlNio9yl5xEggIiItv9A= ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1726749103; a=rsa-sha256; cv=none; b=fE8B/5DGR3I1AA+BPO8tVkPFT9S9nsVzcX30yNFWk5RrWyXZke96gPGgEiFOCCfP5f+npM 3JscapJrsru6LLsPISFqqf8gpvZaAp0vvJO/cvtdKXx/At9hTkX4HQEGkUDQMjwixzJn9o aEteMhvPY74hK1Ooa9oxfCPCwsBI23w= ARC-Authentication-Results: i=1; imf01.hostedemail.com; dkim=pass header.d=gmail.com header.s=20230601 header.b=KAnA2Cq0; dmarc=pass (policy=none) header.from=gmail.com; spf=pass (imf01.hostedemail.com: domain of mmpgouride@gmail.com designates 209.85.216.45 as permitted sender) smtp.mailfrom=mmpgouride@gmail.com Received: by mail-pj1-f45.google.com with SMTP id 98e67ed59e1d1-2d86f713557so572416a91.2 for ; Thu, 19 Sep 2024 05:33:47 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1726749227; x=1727354027; darn=kvack.org; h=to:references:message-id:content-transfer-encoding:cc:date :in-reply-to:from:subject:mime-version:from:to:cc:subject:date :message-id:reply-to; bh=QmKwDE+vQbJFZKx1pG1WdGf3eu6TWhTPyNHtYBECpZw=; b=KAnA2Cq0F26W/6vU+Vs0hGk3CUFc/QTT9dpuGQl79xsjcZTPpOAaQE6Z506RFILjPf XBWb20hee9tnTepgXvM2oYfyNBgs30q4+n3Mpq0a5ql9/ALhBj7CV60KlsoTngMxX82J KwVytexNR3ox6A+xy1NLaP7p6CotJP/Kb17HndKa29fa8crex/x+/bKjaOZslwA+2shi aIwTJDLWA5umlJ94bAFot47dzu9rjsaXzkLNS3IX2hJIqGHnrEvvTW4Y2RsXrinc2NRr hi7Zdn7P+YS8xcJKC1xOgn0gstZgE2EI2VI+Cey150+Y91iiu3ebnFYu2kS9kdupvnIp Puxg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1726749227; x=1727354027; h=to:references:message-id:content-transfer-encoding:cc:date :in-reply-to:from:subject:mime-version:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=QmKwDE+vQbJFZKx1pG1WdGf3eu6TWhTPyNHtYBECpZw=; b=XBYJxabOdrcpR/6TKvYPVVm0Cv/XRBhwdGQzfzqy2VSJ+W1mWNv/ehyxoTAKg9nRHC sTpvK/1Uz2BDto7SsFHmIKIQ9lb3Yv/8ouwlN6ql+/MRVibNBmjue34u2XxRdVuZB+mt x1GLS08AYRjAb0p0kgbXdMa/uuIIOUsdGdz9Iddv0LKfd9TFBF18oEkVT0n7AuqpSBfU wEWYCuc+Xcpx2yzY0rqjDfTFOjn5qGA9NSE3vrxv+5DBzpbQt5GUnhapvwK3ZuGVefdE Tbizi+t7wXQNBf6cnPOk/8rBjw6GPcbP2g+JIobxwiKXRAJ6fMW+nE8Ci/S1jb3ZGWwz qAHA== X-Forwarded-Encrypted: i=1; AJvYcCVGoXADX5a1idFS/dY65x4217L70arUoRvestpTYi9fldFqfHQikR56s1+/VoVVtQohrbvBtSnjIQ==@kvack.org X-Gm-Message-State: AOJu0YwbBu9IGz2E+1pcZ5yJigGA5GYS+aPol/YfPkh8NO57yn2fWFQr GMQzTcrT6SXYRXSTajF4vY/cuhon5k6iROWGWuhqp9nc7DpYcwu4 X-Google-Smtp-Source: AGHT+IEjFLx9rHSbMjqqXE9JnSVpBQ8FdB0R34tyP1bgjc3xd0VMFuHdGq+CTtZA/pDsiECQAkLVBA== X-Received: by 2002:a17:90a:6888:b0:2c4:e333:35e5 with SMTP id 98e67ed59e1d1-2dba00826f1mr31425087a91.36.1726749226750; Thu, 19 Sep 2024 05:33:46 -0700 (PDT) Received: from smtpclient.apple ([2402:d0c0:11:86::1]) by smtp.gmail.com with ESMTPSA id 98e67ed59e1d1-2dd6ee898b6sm1673500a91.6.2024.09.19.05.33.40 (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Thu, 19 Sep 2024 05:33:46 -0700 (PDT) Content-Type: text/plain; charset=utf-8 Mime-Version: 1.0 (Mac OS X Mail 16.0 \(3776.700.51\)) Subject: Re: [RFC PATCH 1/4] hazptr: Add initial implementation of hazard pointers From: Alan Huang In-Reply-To: Date: Thu, 19 Sep 2024 20:33:27 +0800 Cc: Lai Jiangshan , LKML , RCU , linux-mm@kvack.org, lkmm@lists.linux.dev, "Paul E. McKenney" , Frederic Weisbecker , Neeraj Upadhyay , Joel Fernandes , Josh Triplett , "Uladzislau Rezki (Sony)" , Steven Rostedt , Mathieu Desnoyers , Zqiang , Peter Zijlstra , Ingo Molnar , Will Deacon , Waiman Long , Mark Rutland , Thomas Gleixner , Kent Overstreet , Linus Torvalds , Vlastimil Babka , maged.michael@gmail.com, Neeraj upadhyay Content-Transfer-Encoding: quoted-printable Message-Id: <6B551C0A-3E09-45E2-9A00-03DEDB1EFEA7@gmail.com> References: <20240917143402.930114-1-boqun.feng@gmail.com> <20240917143402.930114-2-boqun.feng@gmail.com> To: Boqun Feng X-Mailer: Apple Mail (2.3776.700.51) X-Rspamd-Server: rspam07 X-Rspamd-Queue-Id: 4141640004 X-Stat-Signature: aqsoyxj6oee3z8s16n8kesm49bf9buas X-Rspam-User: X-HE-Tag: 1726749228-612026 X-HE-Meta: U2FsdGVkX1/fZ3+KotNLndCZD6RzzM7HnKwmvU3RwAU2p6xVbHngI470t6SmbGUGCq3e0vKiePQAzUTt0WujE97tUshlivEbhT3SFAvYXAZmM5Be+8qOQgp4NPG205cS+Ybj6dXcMEra8ngHU897JcEoW/rkUkpSv3r/nEGr6HVs7reKpmjjgzY8dcFTgZIqie8WXW6YMUPvrf9bzW9db2nTZQGzz/LhldB6Qt9TxD5nmsfzEEmGbzj9HkvkjzQNmndN6kZl1OsaL+24OAtCvZhpQHYJsAbQxAKOSuMn8JOE+Rk30HTrt9E8vmQOq1v3sTFkD4AINbAAERQwx8+Be/KWf+DbbMak/5EUZsUNgn+ubWksL88EWrVB6CAVsKgi4rq/WDqnKk0G+H8Eg3Vj+3A+5H4yQMk1H5A+D7UmQAOzDlYiyya6zfEreeKoNjawd9zbWz3KH5SiLGjCb8vi1Beo1VGIFR4y066vDE9IWgyj9oMEp1bW7mV0zWJv9NJc1uqTcnc6j/dpHcWNbH3pgXLFaKOu/7TASEG8dBQAXgaKiawuuEVK/oxACvMr3+vUmrtlW+Th5Y6RnCcdrLuhcMzO19Fy8FCK82wt07PF44wzzo7DIlw+6PrTScO2mroqKZeeJSOCoA5HQ3SpIZZ55RG8llqKX50tmnKNVCdfXj2bdQm9A9soZYIC9MV8kjKrWZIa727z+QB/cVlSdg60PM13mBUi+nIzTnIEjUAiYFrSG38N/QKq6DKCbidbk5viinHjPeNUB7mpP55REWqHjAJ4BTaLagwob0hsPaI5eyip3BD9DF3i03pn0XcZ6mHkj8cCZZS2ZPDafb1XLETQVjWo8p13uN5rxx6lQFgs3N5yiTdoTPdANxa71HODD5n2VW8J5D6+42RramQIlYLmamXsU2VuCK4T58q+1aiUvo1Fg6qgV3rxfkIZB8kFylk3c0COBK4QLyoZIhAqozo EsybW7+L UzBdU5ffdauxmcJPFVbUpAMVPRLk5zmIzruOaKPKQoLupoaisAHu57qxralfAHUviXu3wA2nwb8ym1KkAfyNng/TmBjPDp4PtW3P8XGk3VyKTjpTLViNFWC0JDzB9qfy/glRne5qxLIWbkaAq0iSgI95HP3uyTVcvHyv00sR7Ql0ZdQg64x5RwBaNWGGNZwXeQCiGb0H7z2B2TkJj1b6JWJgcfBLdgnYUCShlsXxPWCZ+x4bMQ6OLkpQwsXJth9UDajb97yhcjJa+2+Pe9UMOo0UYQVDwTb87X6IR6Oidcwu6cykzcuVhfjs+WcjIL4GTBOJFkhIzKAkCqTqB71pLwE0NKukBm6QokqbWFfWybMGQ4qaoSyv8Qa3+DXpHNsRBLtdiWNZwmNmN3usjjmudA654erczty1U1eyeSiwHQ++p+WdbW1HS4sOST/Kx0nGJCewiLMQ3u6EQwnayDCH55/9Cc2CJRegMskLJouvZG2ytulenR2hWJHQ+Mvgvh3y2bTVzy8biHm1nl1fe3+GcYYcS1uJ3NXr0UfNO X-Bogosity: Ham, tests=bogofilter, spamicity=0.000000, version=1.2.4 Sender: owner-linux-mm@kvack.org Precedence: bulk X-Loop: owner-majordomo@kvack.org List-ID: List-Subscribe: List-Unsubscribe: 2024=E5=B9=B49=E6=9C=8819=E6=97=A5 15:10=EF=BC=8CBoqun Feng = wrote=EF=BC=9A >=20 > On Thu, Sep 19, 2024 at 02:39:13PM +0800, Lai Jiangshan wrote: >> On Tue, Sep 17, 2024 at 10:34=E2=80=AFPM Boqun Feng = wrote: >>=20 >>> +static void hazptr_context_snap_readers_locked(struct = hazptr_reader_tree *tree, >>> + struct hazptr_context = *hzcp) >>> +{ >>> + lockdep_assert_held(hzcp->lock); >>> + >>> + for (int i =3D 0; i < HAZPTR_SLOT_PER_CTX; i++) { >>> + /* >>> + * Pairs with smp_store_release() in = hazptr_{clear,free}(). >>> + * >>> + * Ensure >>> + * >>> + * >>> + * >>> + * [access protected pointers] >>> + * hazptr_clear(); >>> + * smp_store_release() >>> + * // in reader scan. >>> + * smp_load_acquire(); // is = null or unused. >>> + * [run callbacks] // all = accesses from >>> + * // reader = must be >>> + * // observed. >>> + */ >>> + hazptr_t val =3D smp_load_acquire(&hzcp->slots[i]); >>> + >>> + if (!is_null_or_unused(val)) { >>> + struct hazptr_slot_snap *snap =3D = &hzcp->snaps[i]; >>> + >>> + // Already in the tree, need to remove = first. >>> + if (!is_null_or_unused(snap->slot)) { >>> + reader_del(tree, snap); >>> + } >>> + snap->slot =3D val; >>> + reader_add(tree, snap); >>> + } >>> + } >>> +} >>=20 >> Hello >>=20 >> I'm curious about whether there are any possible memory leaks here. >>=20 >> It seems that call_hazptr() never frees the memory until the slot is >> set to another valid value. >>=20 >> In the code here, the snap is not deleted when hzcp->snaps[i] is = null/unused >> and snap->slot is not which I think it should be. >>=20 >> And it can cause unneeded deletion and addition of the snap if the = slot >> value is unchanged. >>=20 >=20 > I think you're right. (Although the node will be eventually deleted at > cleanup_hazptr_context(), however there could be a long-live > hazptr_context). It should be: >=20 > hazptr_t val =3D smp_load_acquire(&hzcp->slots[i]); > struct hazptr_slot_snap *snap =3D &hzcp->snaps[i]; >=20 > if (val !=3D snap->slot) { // val changed, need to update the tree = node. > // Already in the tree, need to remove first. > if (!is_null_or_unused(snap->slot)) { > reader_del(tree, snap); > } >=20 > // use the latest snapshot. > snap->slot =3D val; >=20 > // Add it into tree if there is a reader > if (!is_null_or_unused(val)) > reader_add(tree, snap); > } With this changed, and force users call hazptr_clear() like = rcu_read_unlock(), we could remove the reader_del() in cleanup_hazptr_context(), then remove the = tree->lock? >=20 > Regards, > Boqun >=20 >> I'm not so sure... >>=20 >> Thanks >> Lai