From: Hyeonggon Yoo <42.hyeyoo@gmail.com>
To: Vlastimil Babka <vbabka@suse.cz>
Cc: Rongwei Wang <rongwei.wang@linux.alibaba.com>,
Christoph Lameter <cl@linux.com>,
Joonsoo Kim <iamjoonsoo.kim@lge.com>,
David Rientjes <rientjes@google.com>,
Pekka Enberg <penberg@kernel.org>,
Roman Gushchin <roman.gushchin@linux.dev>,
linux-mm@kvack.org,
Sebastian Andrzej Siewior <bigeasy@linutronix.de>,
Thomas Gleixner <tglx@linutronix.de>,
Mike Galbraith <efault@gmx.de>
Subject: Re: [PATCH 4/5] mm/slub: convert object_map_lock to non-raw spinlock
Date: Mon, 15 Aug 2022 21:53:12 +0900 [thread overview]
Message-ID: <YvpBuDTghDGXRqdI@hyeyoo> (raw)
In-Reply-To: <20220812091426.18418-5-vbabka@suse.cz>
On Fri, Aug 12, 2022 at 11:14:25AM +0200, Vlastimil Babka wrote:
> The only remaining user of object_map_lock is list_slab_objects().
> Obtaining the lock there used to happen under slab_lock() which implied
> disabling irqs on PREEMPT_RT, thus it's a raw_spinlock. With the
> slab_lock() removed, we can convert it to a normal spinlock.
>
> Also remove the get_map()/put_map() wrappers as list_slab_objects()
> became their only remaining user.
>
> Signed-off-by: Vlastimil Babka <vbabka@suse.cz>
> ---
> mm/slub.c | 36 ++++++------------------------------
> 1 file changed, 6 insertions(+), 30 deletions(-)
>
> diff --git a/mm/slub.c b/mm/slub.c
> index 32b79bc3ae6d..dffb5063acbf 100644
> --- a/mm/slub.c
> +++ b/mm/slub.c
> @@ -565,7 +565,7 @@ static inline bool cmpxchg_double_slab(struct kmem_cache *s, struct slab *slab,
>
> #ifdef CONFIG_SLUB_DEBUG
> static unsigned long object_map[BITS_TO_LONGS(MAX_OBJS_PER_PAGE)];
> -static DEFINE_RAW_SPINLOCK(object_map_lock);
> +static DEFINE_SPINLOCK(object_map_lock);
>
> static void __fill_map(unsigned long *obj_map, struct kmem_cache *s,
> struct slab *slab)
> @@ -599,30 +599,6 @@ static bool slab_add_kunit_errors(void)
> static inline bool slab_add_kunit_errors(void) { return false; }
> #endif
>
> -/*
> - * Determine a map of objects in use in a slab.
> - *
> - * Node listlock must be held to guarantee that the slab does
> - * not vanish from under us.
> - */
> -static unsigned long *get_map(struct kmem_cache *s, struct slab *slab)
> - __acquires(&object_map_lock)
> -{
> - VM_BUG_ON(!irqs_disabled());
> -
> - raw_spin_lock(&object_map_lock);
> -
> - __fill_map(object_map, s, slab);
> -
> - return object_map;
> -}
> -
> -static void put_map(unsigned long *map) __releases(&object_map_lock)
> -{
> - VM_BUG_ON(map != object_map);
> - raw_spin_unlock(&object_map_lock);
> -}
> -
> static inline unsigned int size_from_object(struct kmem_cache *s)
> {
> if (s->flags & SLAB_RED_ZONE)
> @@ -4368,21 +4344,21 @@ static void list_slab_objects(struct kmem_cache *s, struct slab *slab,
> {
> #ifdef CONFIG_SLUB_DEBUG
> void *addr = slab_address(slab);
> - unsigned long flags;
> - unsigned long *map;
> void *p;
>
> slab_err(s, slab, text, s->name);
>
> - map = get_map(s, slab);
> + spin_lock(&object_map_lock);
> + __fill_map(object_map, s, slab);
> +
> for_each_object(p, s, addr, slab->objects) {
>
> - if (!test_bit(__obj_to_index(s, addr, p), map)) {
> + if (!test_bit(__obj_to_index(s, addr, p), object_map)) {
> pr_err("Object 0x%p @offset=%tu\n", p, p - addr);
> print_tracking(s, p);
> }
> }
> - put_map(map);
> + spin_unlock(&object_map_lock);
> #endif
> }
>
> --
> 2.37.1
>
Looks good to me.
Reviewed-by: Hyeonggon Yoo <42.hyeyoo@gmail.com>
--
Thanks,
Hyeonggon
next prev parent reply other threads:[~2022-08-15 12:53 UTC|newest]
Thread overview: 12+ messages / expand[flat|nested] mbox.gz Atom feed top
2022-08-12 9:14 [PATCH 0/5] fix validation races and cleanup locking Vlastimil Babka
2022-08-12 9:14 ` [PATCH 2/5] mm/slub: restrict sysfs validation to debug caches and make it safe Vlastimil Babka
2022-08-14 14:39 ` Hyeonggon Yoo
2022-08-23 16:39 ` Vlastimil Babka
2022-08-12 9:16 ` [PATCH 0/5] fix validation races and cleanup locking Vlastimil Babka
[not found] ` <20220812091426.18418-2-vbabka@suse.cz>
2022-08-14 13:42 ` [PATCH 1/5] mm/slub: move free_debug_processing() further Hyeonggon Yoo
2022-08-15 0:03 ` David Rientjes
[not found] ` <20220812091426.18418-5-vbabka@suse.cz>
2022-08-15 0:03 ` [PATCH 4/5] mm/slub: convert object_map_lock to non-raw spinlock David Rientjes
2022-08-15 12:53 ` Hyeonggon Yoo [this message]
[not found] ` <20220812091426.18418-4-vbabka@suse.cz>
2022-08-14 14:54 ` [PATCH 3/5] mm/slub: remove slab_lock() usage for debug operations Hyeonggon Yoo
2022-08-15 0:04 ` David Rientjes
[not found] ` <20220812091426.18418-6-vbabka@suse.cz>
2022-08-15 0:04 ` [PATCH 5/5] mm/slub: simplify __cmpxchg_double_slab() and slab_[un]lock() David Rientjes
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=YvpBuDTghDGXRqdI@hyeyoo \
--to=42.hyeyoo@gmail.com \
--cc=bigeasy@linutronix.de \
--cc=cl@linux.com \
--cc=efault@gmx.de \
--cc=iamjoonsoo.kim@lge.com \
--cc=linux-mm@kvack.org \
--cc=penberg@kernel.org \
--cc=rientjes@google.com \
--cc=roman.gushchin@linux.dev \
--cc=rongwei.wang@linux.alibaba.com \
--cc=tglx@linutronix.de \
--cc=vbabka@suse.cz \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.