[<prev] [next>] [thread-next>] [day] [month] [year] [list]
Message-ID: <20250312151634.2183278-1-bigeasy@linutronix.de>
Date: Wed, 12 Mar 2025 16:16:13 +0100
From: Sebastian Andrzej Siewior <bigeasy@...utronix.de>
To: linux-kernel@...r.kernel.org
Cc: André Almeida <andrealmeid@...lia.com>,
Darren Hart <dvhart@...radead.org>,
Davidlohr Bueso <dave@...olabs.net>,
Ingo Molnar <mingo@...hat.com>,
Juri Lelli <juri.lelli@...hat.com>,
Peter Zijlstra <peterz@...radead.org>,
Thomas Gleixner <tglx@...utronix.de>,
Valentin Schneider <vschneid@...hat.com>,
Waiman Long <longman@...hat.com>,
Sebastian Andrzej Siewior <bigeasy@...utronix.de>
Subject: [PATCH v10 00/21] futex: Add support task local hash maps, FUTEX2_NUMA and FUTEX2_MPOL
Hi,
this is a follow up on
https://lore.kernel.org/ZwVOMgBMxrw7BU9A@jlelli-thinkpadt14gen4.remote.csb
and adds support for task local futex_hash_bucket.
This is the local hash map series based on v9 extended with PeterZ
FUTEX2_NUMA and FUTEX2_MPOL plus a few fixes on top.
The complete tree is at
https://git.kernel.org/pub/scm/linux/kernel/git/bigeasy/staging.git/log/?h=futex_local_v10
https://git.kernel.org/pub/scm/linux/kernel/git/bigeasy/staging.git futex_local_v10
v9…v10: https://lore.kernel.org/all/20250225170914.289358-1-bigeasy@linutronix.de/
- The rcuref_read() check in __futex_hash_private() has been replaced
with rcuref_is_dead() which is added as part of the series.
- The local hash support depended on !CONFIG_BASE_SMALL which has been
replaced with CONFIG_FUTEX_PRIVATE_HASH. This is defined as
"!BASE_SMALL && MMU" because as part of the rework
futex_key::private::mm is used which is not set on !CONFIG_MMU builds
- Added CONFIG_FUTEX_MPOL to build on !NUMA configs.
- Replaced direct access of mm_struct::futex_phash with a RCU
accessor.
- futex_hash_allocate() for !CONFIG_FUTEX_PRIVATE_HASH returns an
error. This does not affect fork() but is noticed by
PR_FUTEX_HASH_SET_SLOTS.
- futex_init() ensures the computed hashsize is not less than 4 after
the divide by num_possible_nodes().
- futex_init() added info output about used hash table entries (in the
global hash) and occupied memory, allocation method. This vanished
after the removal of alloc_large_system_hash().
- There is a WARN_ON again in futex_hash_free() path if the task
failed to free all references (that would be a leak).
- vmalloc_huge_node_noprof():
- Replced __vmalloc_node_range() with __vmalloc_node_range_noprof()
to skip the alloc_hooks() layer which is already part of
vmalloc_huge_node().
- Added vmalloc_huge_node_noprof for !MMU.
v8…v9 https://lore.kernel.org/all/20250203135935.440018-1-bigeasy@linutronix.de
- Rebase on top PeterZ futex_class
- A few patches vanished due to class rework.
- struct futex_hash_bucket has now pointer to futex_private_hash
instead of slot number
- CONFIG_BASE_SMALL now removes support for the "futex local hash"
instead of restricting it to to 2 slots.
- Number of threads, used to determine the number of slots, is capped
at num_online_cpus.
Peter Zijlstra (11):
futex: Move futex_queue() into futex_wait_setup()
futex: Pull futex_hash() out of futex_q_lock()
futex: Create hb scopes
futex: Create futex_hash() get/put class
futex: s/hb_p/fph/
futex: Remove superfluous state
futex: Untangle and naming
futex: Rework SET_SLOTS
mm: Add vmalloc_huge_node()
futex: Implement FUTEX2_NUMA
futex: Implement FUTEX2_MPOL
Sebastian Andrzej Siewior (10):
rcuref: Provide rcuref_is_dead().
futex: Create helper function to initialize a hash slot.
futex: Add basic infrastructure for local task local hash.
futex: Hash only the address for private futexes.
futex: Allow automatic allocation of process wide futex hash.
futex: Decrease the waiter count before the unlock operation.
futex: Introduce futex_q_lockptr_lock().
futex: Acquire a hash reference in futex_wait_multiple_setup().
futex: Allow to re-allocate the private local hash.
futex: Resize local futex hash table based on number of threads.
include/linux/futex.h | 34 +-
include/linux/mm_types.h | 7 +-
include/linux/mmap_lock.h | 4 +
include/linux/rcuref.h | 22 +-
include/linux/vmalloc.h | 3 +
include/uapi/linux/futex.h | 10 +-
include/uapi/linux/prctl.h | 5 +
init/Kconfig | 10 +
io_uring/futex.c | 4 +-
kernel/fork.c | 24 ++
kernel/futex/core.c | 746 +++++++++++++++++++++++++++++++++----
kernel/futex/futex.h | 81 +++-
kernel/futex/pi.c | 300 ++++++++-------
kernel/futex/requeue.c | 480 ++++++++++++------------
kernel/futex/waitwake.c | 203 +++++-----
kernel/sys.c | 4 +
mm/nommu.c | 5 +
mm/vmalloc.c | 7 +
18 files changed, 1396 insertions(+), 553 deletions(-)
--
2.47.2
Powered by blists - more mailing lists