diff options
| author | Harry Yoo (Oracle) <harry@kernel.org> | 2026-07-29 17:20:12 +0900 |
|---|---|---|
| committer | Vlastimil Babka (SUSE) <vbabka@kernel.org> | 2026-07-31 15:56:46 +0200 |
| commit | 69abda97a09b2e7df26d21cb534f4930201b4186 (patch) | |
| tree | d578771178c4e5c713278ec87aeccfe9083cb7a4 /scripts/stackusage | |
| parent | f8e0c305995fa2931e77a6e669e8362458ae4eba (diff) | |
| download | linux-next-69abda97a09b2e7df26d21cb534f4930201b4186.tar.gz linux-next-69abda97a09b2e7df26d21cb534f4930201b4186.zip | |
mm/slab: extend deferred free mechanism to handle rcu sheaves
__kfree_rcu_sheaf() cannot invoke call_rcu() when spinning is not
allowed and IRQs are disabled. To relax the limitation, extend the
deferred free fallback so that a full rcu sheaf can be submitted to
call_rcu() via the existing IRQ work.
Since the deferred mechanism does more than deferred freeing of objects,
rename the struct to deferred_percpu_work and adjust names accordingly.
When a sheaf is queued on an IRQ work, it is detached from
pcs->rcu_free but call_rcu() is not invoked until the irq_work runs.
To keep the kvfree_rcu barrier's promise, call irq_work_sync() on each
CPU before calling rcu_barrier().
In the meantime, remove the TODO item as apparently there is no simple
and effective way to achieve that. This is because, unlike sheaves,
kfree_rcu() batches objects from different caches together.
Suggested-by: Alexei Starovoitov <ast@kernel.org>
Reviewed-by: Pedro Falcato <pfalcato@suse.de>
Reviewed-by: Vlastimil Babka (SUSE) <vbabka@kernel.org>
Signed-off-by: Harry Yoo (Oracle) <harry@kernel.org>
Link: https://patch.msgid.link/20260729-kfree_rcu_nolock-v5-4-a28cdcda9673@kernel.org
Signed-off-by: Vlastimil Babka (SUSE) <vbabka@kernel.org>
Diffstat (limited to 'scripts/stackusage')
0 files changed, 0 insertions, 0 deletions
