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 D9406CF9C64 for ; Sat, 21 Sep 2024 21:07:39 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 35D736B007B; Sat, 21 Sep 2024 17:07:39 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 30E7E6B0082; Sat, 21 Sep 2024 17:07:39 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 1D5B26B0085; Sat, 21 Sep 2024 17:07:39 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0013.hostedemail.com [216.40.44.13]) by kanga.kvack.org (Postfix) with ESMTP id F3F5C6B007B for ; Sat, 21 Sep 2024 17:07:38 -0400 (EDT) Received: from smtpin29.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay07.hostedemail.com (Postfix) with ESMTP id 96E86160B5F for ; Sat, 21 Sep 2024 21:07:38 +0000 (UTC) X-FDA: 82589981796.29.947C262 Received: from mail-pg1-f170.google.com (mail-pg1-f170.google.com [209.85.215.170]) by imf23.hostedemail.com (Postfix) with ESMTP id D2343140020 for ; Sat, 21 Sep 2024 21:07:36 +0000 (UTC) Authentication-Results: imf23.hostedemail.com; dkim=pass header.d=gmail.com header.s=20230601 header.b=E4bKZJLO; dmarc=pass (policy=none) header.from=gmail.com; spf=pass (imf23.hostedemail.com: domain of jiangshanlai@gmail.com designates 209.85.215.170 as permitted sender) smtp.mailfrom=jiangshanlai@gmail.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1726952823; a=rsa-sha256; cv=none; b=TcEvE7L7jf3Chch4xNd5xTxDl80aXIxVGILz+DYvnTDLStzN6eaJTHqqoHj5RCtaKZnYUQ RLBgF9l7+iWqTYLcuu01TySYXt1jTgJKbIh646K6SwJEQ3vUm+3AttLMmtRgmYkH79OqzC btqjuIk6Uk5dzlZvLx7MpqZweGN1XGU= ARC-Authentication-Results: i=1; imf23.hostedemail.com; dkim=pass header.d=gmail.com header.s=20230601 header.b=E4bKZJLO; dmarc=pass (policy=none) header.from=gmail.com; spf=pass (imf23.hostedemail.com: domain of jiangshanlai@gmail.com designates 209.85.215.170 as permitted sender) smtp.mailfrom=jiangshanlai@gmail.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1726952823; 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: in-reply-to:in-reply-to:references:references:dkim-signature; bh=hp63dP1vIuDmvqlV49DXovWDm3PAu6Ul2JWTXyenPI4=; b=ZzPySxE+ectmKQAqrTF/ruzpmYqfjiItnV5hfN5zhJVdUdtzgjFSaBx4Dm9VwtLbd18cwF bE65boL+VbsOxu/kQC0kCyAzTEczWYtBzmFyoGbFis0mpND5HFTfsO+Lw9xijgZKTetDHf yjgpjM4IoXUDlpk8WnDXnhvRXJBuYYk= Received: by mail-pg1-f170.google.com with SMTP id 41be03b00d2f7-7db1f13b14aso2552442a12.1 for ; Sat, 21 Sep 2024 14:07:36 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1726952855; x=1727557655; darn=kvack.org; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:from:to:cc:subject:date:message-id:reply-to; bh=hp63dP1vIuDmvqlV49DXovWDm3PAu6Ul2JWTXyenPI4=; b=E4bKZJLODLK9OludWXddykD0pBEEcxwc8C8je1Fr63pBzzE6G9/McqMWwAZe1mzGUk pjKiqZgA9CJhkEtbLJFK/9fdlvoVaq3juHkKQVzzwi8wFTQrHgPAinFcw38jYx1WVlny Evct7j2kT81ZtoiPGfMYf3AMaz62Nhfj7CnWJ13ME4Ma8yANmD+gt20G9HN4SUumV6Jb KZpmO4uyQXcKpOTqBZJwyRVHMBHGM2KZLqHCJZMGQ7hPqlF9cmX+V6S2LYZintnwoFKi HwDe3kAa7VdxJE9I2X3D/mGRIeZv0M40hwnOo+9FYa4JlLCRu7nKg0/RldpkQKhUtEML FUpg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1726952855; x=1727557655; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=hp63dP1vIuDmvqlV49DXovWDm3PAu6Ul2JWTXyenPI4=; b=XQmRMM/jJhD4SOFOVje9Ay4RcQg1kUky8SJ50XUS/AD5fHXbbS1o/u3Qc/rUq4LM1C JWX1NdL26CpXwHmmoRuZdUbbMw1R4Qd3gStBeoHM0hcGeoNteau61Rqe6lIw3v6EBy3b yM04PygPC6qGUXOqRd2Z7JRIPRINm3wtdSCPiOKdwzWHyMa/hrxAqRXnvHI1DIVtEk3u 0yYewHL2civePLshnB5V7T3zGd2aAmS5jBK3rCMdEPrLipEvUo3QodYk5Am7wN5ViueK G0cFhEtVIBYPY7NK/fpf4UBkY1kHlJyW2P66A3qBKUgFF2pceEQ7U0h2ZOlLA6NtL2Fo gdlA== X-Forwarded-Encrypted: i=1; AJvYcCUKfLcrbnjKB0tAcswI/AJGTOnFqxH1iLJRVlpEsTJzn608OWbYnWMwXK+Ac32fbBdEd+FMcqbPgw==@kvack.org X-Gm-Message-State: AOJu0YyOQWP0qpaOfY87/xA1nEbld684FcDKotyuWL3KCKtblDDfgLjq aX7P89SgLGheQnix1QilpUEgG884SDujJXNNmmmJQiCoywxGyLL7QJOhBBA+jLR4zaX2MEJdD+S dO1gfRgLuzJIRzGqgIb9tlM0vdE0= X-Google-Smtp-Source: AGHT+IFPDomxth+vXXT4e8DSQaPpBIrEW3tjeUXSZGZ0lRBYZWDifbwG+csE5HvRoTEna3+xfdCTpG/AjzzHz8zXHdw= X-Received: by 2002:a17:90b:a4a:b0:2d2:453:12cb with SMTP id 98e67ed59e1d1-2dd80c02ad9mr10560062a91.2.1726952855430; Sat, 21 Sep 2024 14:07:35 -0700 (PDT) MIME-Version: 1.0 References: <20240921164210.256278-1-mathieu.desnoyers@efficios.com> In-Reply-To: <20240921164210.256278-1-mathieu.desnoyers@efficios.com> From: Lai Jiangshan Date: Sun, 22 Sep 2024 05:07:23 +0800 Message-ID: Subject: Re: [RFC PATCH 1/1] hpref: Hazard Pointers with Reference Counter To: Mathieu Desnoyers Cc: Boqun Feng , "Paul E. McKenney" , linux-kernel@vger.kernel.org, Will Deacon , Peter Zijlstra , Alan Stern , John Stultz , Linus Torvalds , Frederic Weisbecker , Joel Fernandes , Josh Triplett , Uladzislau Rezki , Steven Rostedt , Zqiang , Ingo Molnar , Waiman Long , Mark Rutland , Thomas Gleixner , Vlastimil Babka , maged.michael@gmail.com, Mateusz Guzik , rcu@vger.kernel.org, linux-mm@kvack.org, lkmm@lists.linux.dev Content-Type: text/plain; charset="UTF-8" X-Rspam-User: X-Rspamd-Queue-Id: D2343140020 X-Rspamd-Server: rspam01 X-Stat-Signature: mcizrftsmkwood7tymbd7xqw4dk7i8p3 X-HE-Tag: 1726952856-579811 X-HE-Meta: U2FsdGVkX197c1D8PM//J5wPRqPDObaFRcPbaT+yRuAPr96r3f6kcjsJQPb7yXlULGtMZdE91g19Im25wTxRuGCCuJ0AiD5w/mBblawZtdgHSoJgmLEN0NOgo97PeH6+F2l7eEFGCsoZ/P3HGqctPA9Iq9btDQd0sFi+ULGF8iypd+3iMJ3UGFo7J/jL6Usaww1hpKVSSFESSZicsGRyxuLr7b+kxuu/UFkZAl92vHpQvU3W3Hmwvfr9FwMWt851PMwLsbIxG1PtiBs3V5C8ChWCkb0Uf4nEepUTGWsBxZysxEfQiRnzvbrgaqiW1TGGxIozUusxm9fwrZJvJbIAfPjSd8fYceI/aZelVENRydCJLLHP83eBrz+zwv6lx+rHmoHweMgtZxrVi92pSdFVJPAm4+jubIDLjfcVUGBacqUFHUVJQc6t5ktPVXqmvXzPKXREQe1eOsL/Zc5vl5p/c85uRXwnMokDWlbNrAiU14Pq5lIgcPLff1F98Q1TddzZnVqhixgQZHIcNHOzzDdkg25D7RtLiP6kZxPbxMhPqGKV8hBfVcgRIs6CV0TbtREEGU1AdwP5+OMLkmcdowxyYtRvYgDqQ6KjG6eKSB5mXIjNzIRDBH9y/Rsnc0bKGeOrmCImTsVFvVNI69FtaCB+wQq9ejH9iWnXPC+A1nNe6IwnbR0qttYo9AqLCzqw0OLiaelmetWazkb1bjKPLnUyg2DbcLNVJ8HLQ/nYKhOp+vQyAJ/5Vgk3yX+oshtTiu9I9o4JzdWOZkrJ/6hw7YL1zF+U6RWJzkdQA4mxrRODGUdmhAkjKzvaGTh9DirO0VKG+yRYRW5m/o2omAm6U9a/2ckg8jU0JWGNJvcBJsL33kbwNZ5P3Csw9V6a32xpjdeabEVyRScIfQ6yeisp5Y/BtQkV8JvrHNkdPlA78rz3ThbgbVuBCdg9TgT2xJZwg2F+hAsamlZlihdS5w/SSJn hFmX6AO6 HfF14hK6GVM4B+Oh9mR98v3Ife9rHY2bq3RjFLp+c+VuEn9wSjmTBsXuFmZcKcX4HtKeGZQB14zsDuoMCaAFbJX1GBZTidMb35ezySJY+/gel1YhLk7lsNopfZ/Te7j8DYOLCUDZnenTd0+gCxvQnXItRcDih/F/kNkNM3Vw2yrgUYe3I9K1IMFz7No3l+BPEnj7EWEMfBkf9A6+pTU5WHVf+2jMAeaviALDQ5U6HMU3V6sBP4sv8/BADZZSdCVFlPacedQVdfFYcTi3TdQ+48tJZMuzySK4eQdPBbAfQtD5caZOT8uUsxdNO78bhqJPD3bRbDZ7nURP6KujVzwjIv3+yCxW3dKCqLprE36rDJfQn+EsHKjrmebGDyiO6s9Sjvprh8qEydlpo9do= 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: > +/* > + * hpref_hp_get: Obtain a reference to a stable object, protected either > + * by hazard pointer (fast-path) or using reference > + * counter as fall-back. > + */ > +static inline > +bool hpref_hp_get(struct hpref_node **node_p, struct hpref_ctx *ctx) > +{ > + int cpu = rseq_current_cpu_raw(); > + struct hpref_percpu_slots *cpu_slots = rseq_percpu_ptr(hpref_percpu_slots, cpu); > + struct hpref_slot *slot = &cpu_slots->slots[cpu_slots->current_slot]; > + bool use_refcount = false; > + struct hpref_node *node, *node2; > + unsigned int next_slot; > + > +retry: > + node = uatomic_load(node_p, CMM_RELAXED); > + if (!node) > + return false; > + /* Use rseq to try setting current slot hp. Store B. */ > + if (rseq_load_cbne_store__ptr(RSEQ_MO_RELAXED, RSEQ_PERCPU_CPU_ID, > + (intptr_t *) &slot->node, (intptr_t) NULL, > + (intptr_t) node, cpu)) { > + slot = &cpu_slots->slots[HPREF_EMERGENCY_SLOT]; Can @cpu be possibly changed? if it can, it seems @cpu and @cpu_slots should be updated first. > + use_refcount = true; > + /* > + * This may busy-wait for another reader using the > + * emergency slot to transition to refcount. > + */ > + caa_cpu_relax(); > + goto retry; > + }