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 BE8A5CF8862 for ; Sat, 5 Oct 2024 11:44:06 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 18CE76B036A; Sat, 5 Oct 2024 07:44:06 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 13D296B036B; Sat, 5 Oct 2024 07:44:06 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 004006B036C; Sat, 5 Oct 2024 07:44:05 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0017.hostedemail.com [216.40.44.17]) by kanga.kvack.org (Postfix) with ESMTP id CDCEA6B036A for ; Sat, 5 Oct 2024 07:44:05 -0400 (EDT) Received: from smtpin07.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay06.hostedemail.com (Postfix) with ESMTP id 63970AC426 for ; Sat, 5 Oct 2024 11:44:05 +0000 (UTC) X-FDA: 82639364850.07.0FBB781 Received: from smtpout.efficios.com (smtpout.efficios.com [167.114.26.122]) by imf18.hostedemail.com (Postfix) with ESMTP id 8C6E91C0003 for ; Sat, 5 Oct 2024 11:44:03 +0000 (UTC) Authentication-Results: imf18.hostedemail.com; dkim=pass header.d=efficios.com header.s=smtpout1 header.b=lAp1iGgy; spf=pass (imf18.hostedemail.com: domain of mathieu.desnoyers@efficios.com designates 167.114.26.122 as permitted sender) smtp.mailfrom=mathieu.desnoyers@efficios.com; dmarc=pass (policy=none) header.from=efficios.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1728128576; a=rsa-sha256; cv=none; b=AWHlHjX67aElPwKwj3BCcq3Tm73M3m3t7Yfxl//qXvU1gfVj15/quYk963lCtOA5g/cnfO UL4IKUbzMLiZASK3ZT+C+Uw1U3G/ivsuf5YNMmaHSqz3HpCMZGs3JlHCOhxRgtAny3tM+o Ol37SK3CR7XQxxXi+8C1ecN4Ufzs3m8= ARC-Authentication-Results: i=1; imf18.hostedemail.com; dkim=pass header.d=efficios.com header.s=smtpout1 header.b=lAp1iGgy; spf=pass (imf18.hostedemail.com: domain of mathieu.desnoyers@efficios.com designates 167.114.26.122 as permitted sender) smtp.mailfrom=mathieu.desnoyers@efficios.com; dmarc=pass (policy=none) header.from=efficios.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1728128576; 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=3/atr5xqQcOpl8h294wXmWczzcBDKIQpZCsKpQUxRZ4=; b=VNmQiNJwKDJVcTVo1xSQ2buen417BqYo8zx4mwus8nGtFMk249ffA58MK/hkki1NiZYT01 W6edgCe+R44aqsv2G4vCGZpK+fWFt/uEZx5KJCyo3Qd9nkuzRy39ldhSjsqzzO5z5ArSM4 SQqKax4Mgt4unrJzM1YvtlyFSrQXXC4= DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=efficios.com; s=smtpout1; t=1728128642; bh=RiefWV/KnAglaCg6B6xncMJjyAlrwOW9ZGgZzmAcY6E=; h=Date:Subject:To:Cc:References:From:In-Reply-To:From; b=lAp1iGgyHY00422nQo2IXiANrNtcwoGGpu/Q/yTRhPo+ujfznQp6cl4HBq7AhsOpL 21ZQ8MdYARUwcdE7GNTczciAk7ANkmARtjNx7lA8Lr6mc7agBv4/6yCR0ZpzM010cC Qb5qJNKeIphzrKLWqqrawY0fOmv9cmqhDnEWLihttea3Jv43/V3VRzc+wQAK+l92Sz j4cglAbqVrCrBkm+CwIFz9nR/btJpFu+rWE/1Zo8x4BmdsEfR3UT8/njbuEAsuWEic Ua05+k7AGFd/Ke4HceCjC93SLf1gn3cuy3i8uupiQ87dUA/JdQk7jpR5X3Kn4tlN/W PUB04rqPtmiRQ== Received: from [IPV6:2606:6d00:100:4000:cacb:9855:de1f:ded2] (unknown [IPv6:2606:6d00:100:4000:cacb:9855:de1f:ded2]) by smtpout.efficios.com (Postfix) with ESMTPSA id 4XLNq60jHFzXmb; Sat, 5 Oct 2024 07:44:02 -0400 (EDT) Message-ID: Date: Sat, 5 Oct 2024 07:42:01 -0400 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Subject: Re: [RFC PATCH v2 3/4] hp: Implement Hazard Pointers To: Frederic Weisbecker Cc: Boqun Feng , linux-kernel@vger.kernel.org, Linus Torvalds , Andrew Morton , Peter Zijlstra , Nicholas Piggin , Michael Ellerman , Greg Kroah-Hartman , Sebastian Andrzej Siewior , "Paul E. McKenney" , Will Deacon , Alan Stern , John Stultz , Neeraj Upadhyay , Joel Fernandes , Josh Triplett , Uladzislau Rezki , Steven Rostedt , Lai Jiangshan , Zqiang , Ingo Molnar , Waiman Long , Mark Rutland , Thomas Gleixner , Vlastimil Babka , maged.michael@gmail.com, Mateusz Guzik , Jonas Oberhauser , rcu@vger.kernel.org, linux-mm@kvack.org, lkmm@lists.linux.dev References: <20241004182734.1761555-1-mathieu.desnoyers@efficios.com> <20241004182734.1761555-4-mathieu.desnoyers@efficios.com> From: Mathieu Desnoyers Content-Language: en-US In-Reply-To: Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 8bit X-Stat-Signature: aea8n6cpkphcpdqdye5xkfxywpqhkajz X-Rspamd-Queue-Id: 8C6E91C0003 X-Rspam-User: X-Rspamd-Server: rspam10 X-HE-Tag: 1728128643-465320 X-HE-Meta: U2FsdGVkX19Dk1rJ9Yd08P5dPYmyn1MDktJIvpPrzJU6+3MvmDg9G+2w3KgeQLBRXYNOAXKEbWyMG9RZ6Ym1sQBmD66ZHSeimJwpuWY+R9PILXSNlYsR69Hr8macgxwPSo1Eaxyo4TEfqljKhDmNwRvkFTSw5MGj9ZhiVnA9+s80gI+W/VNhdTSiSAdmMhM1b139W7F7dGb937rSX+iutqF6BHRaafSG6vqOz7WVmtx4VwawkPec7VFU0cCNyFJowB6niwgceT2DT4KqRzkvtl/XmoReoQAtIlu7XutS5hshCrlIV5+v05JV+oP5csNYESLdflPt2naNCWqEk+IIdU5lzhX/hO2/2OJbkIHvx1VpwE86iAb//CjtNTBku89x5zkP6h8KgpUBk0pjQOnpeBzcXrEBSj6JTJTNDrpQDDOmJ0stJ6U3ZgdiY+oTfoJs6VA4r3p6u00pVH0trRERppgaCJSQW58VlBNzopQeBHNH+rrWv994y7MHWP7VaDfFxkSH1jG3AMLbSSPNma2L8FTdR+Wu3XPxTsbs0//51eJA0PNnpW3bdUupdCVZ6mlpvEjvPKx0YR5A/FljNafZZHkwnYRwE02U77JqZYrxBqGQPJ6Uol5IlQmZx1qxqaUJa1+sTo/VwsDCAwL7oihzH/vDd3UHZEnEtHI5Y/mJsWqH7o2Ds/95cOGRO/qs8hQXsFO4MFY+K2DQ5x69gPH3xuME5QZRK9LZDhbf72wjlAxiB5x71LeprBpyIQcxNtDKGnS3dvdpYtmzVffq4ps9nExBP2Zwpm3Khse39RmUKqgwo8kXOsDVpCe7Oek7bSr1EP/HPU3FHac28RkkdPcNUOtgcNWL7adko2VL3oNdJWGXGUgGEHKtS246PbtIrOWHERSdEq32BMTmrayyQTqaeReG6+7edjLTNgbKFAzXgiLwF6ONikWpb6ZW/+33DdKi1h6OMRhsfWJg4jEC9Eh sGxbNQEc vy/m7tYjt9fEXQvE6oRXLq4Uugb6ajRvLX39H8alD493X8TGKd8e4wSxr32YGo9hbxkgXoTa98nO6Npucn2pVkPqDAsQzgkSgz2BKPfUB91X+7p/bw/39mtMKg/rLrivngIB2ifLfC0Qx8lnkcnTZHkFsE2PaIBVOv6ez+6ndhUTm4phWN4Me5z3HtJFZ/z+13U6YGP58lb3RtQK6cTHw7yahRgUgpez+MIS6XyL0y4JOf4PfTUIVAcTsGjaKA9iZ1OzGYfGRscGW6ADSqgTjcPbhkGoknrWgOHot+P0NzrHQOO+HL8EITpPARO11JVzc6MTFTlEWzm8Wyc7cxeqMnJg5FLVBVWEYNoeOyZUMXLXqkOuOCobb4MPOVAToBa05+TMgDViPkdnpXxn4oW/ApiobQwSx3VhKiewKcvdwmkjJuxJh2M0mTIBN1ufErEVd3GtI8PJRZ2sQqIMYP9NBH4XOPvtNlEaVdBuo 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: On 2024-10-05 13:19, Frederic Weisbecker wrote: > Le Fri, Oct 04, 2024 at 02:27:33PM -0400, Mathieu Desnoyers a écrit : >> +void hp_scan(struct hp_slot __percpu *percpu_slots, void *addr, >> + void (*retire_cb)(int cpu, struct hp_slot *slot, void *addr)) >> +{ >> + int cpu; >> + >> + /* >> + * Store A precedes hp_scan(): it unpublishes addr (sets it to >> + * NULL or to a different value), and thus hides it from hazard >> + * pointer readers. >> + */ >> + >> + if (!addr) >> + return; >> + /* Memory ordering: Store A before Load B. */ >> + smp_mb(); >> + /* Scan all CPUs slots. */ >> + for_each_possible_cpu(cpu) { >> + struct hp_slot *slot = per_cpu_ptr(percpu_slots, cpu); >> + >> + if (retire_cb && smp_load_acquire(&slot->addr) == addr) /* Load B */ >> + retire_cb(cpu, slot, addr); >> + /* Busy-wait if node is found. */ >> + while ((smp_load_acquire(&slot->addr)) == addr) /* Load B */ >> + cpu_relax(); > > You agree that having a single possible per-cpu pointer per context and a busy > waiting update side pointer release can't be a general purpose hazard pointer > implementation, right? :-) Of course. This is a minimalist implementation, which can be extended in various ways, some of which I've implemented as POC in userspace already: - Increase the number of per-cpu slots available, - Distinguish between current scan depth target and available per-cpu slots, - Fall-back to reference counter when slots are full, - Allow scanning for a range of addresses (useful for type-safe memory), - Allow scanning for a set of hazard pointers (scan batching) using Bloom filters to probabilistically speed up the comparison (not implemented yet). - Implement a queued blocking wait/wakeup when HP scan must wait (not implemented yet). - Implement a HP-to-refcount promotion triggered by the HP scan callback to promote hazard pointers which would be blocked on to a reference count increment. (not implemented yet) - Use hazard pointers + refcount to implement smart pointers, which could be useful for Rust. (not implemented yet) But my general approach is to wait until the use-cases justify adding features. Although if you are curious about any of the points listed above, just ask and I'll be happy to discuss them in more depth. Thanks, Mathieu > > Thanks. > >> + } >> +} >> -- >> 2.39.2 >> -- Mathieu Desnoyers EfficiOS Inc. https://www.efficios.com