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 29CBFC433EF for ; Tue, 5 Apr 2022 10:59:17 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 3D0636B0071; Tue, 5 Apr 2022 06:59:06 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 357836B0073; Tue, 5 Apr 2022 06:59:06 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 1F87C6B0074; Tue, 5 Apr 2022 06:59:06 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (relay.a.hostedemail.com [64.99.140.24]) by kanga.kvack.org (Postfix) with ESMTP id 0A0046B0071 for ; Tue, 5 Apr 2022 06:59:06 -0400 (EDT) Received: from smtpin07.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay11.hostedemail.com (Postfix) with ESMTP id CB48F80DD8 for ; Tue, 5 Apr 2022 10:58:55 +0000 (UTC) X-FDA: 79322527830.07.5917125 Received: from smtp-out1.suse.de (smtp-out1.suse.de [195.135.220.28]) by imf05.hostedemail.com (Postfix) with ESMTP id 3B43B100002 for ; Tue, 5 Apr 2022 10:58:55 +0000 (UTC) Received: from imap2.suse-dmz.suse.de (imap2.suse-dmz.suse.de [192.168.254.74]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature ECDSA (P-521) server-digest SHA512) (No client certificate requested) by smtp-out1.suse.de (Postfix) with ESMTPS id EFBB1210EF; Tue, 5 Apr 2022 10:58:53 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.cz; s=susede2_rsa; t=1649156333; h=from:from:reply-to: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; bh=Nf3ZDaKTrRzXkI+pJ7Q1ZD2cYGQo886ywTK7Jv1y/Qw=; b=PjYcX31FOxDDcaqN5UeNk4rUL6BG8T7xdfeOSAM0G5UE2xX+ybG5QvtTfg1Dab8vQNjfOZ PZhawNHpUSvAholwj2Wb9vPnBjRwssAVq90ow2micmeK8rzb4DkEi9Ln3uSOSm7/YQ5s1x PSPyZjniIyb6r4sR/PMOXZGu7eTYyx4= DKIM-Signature: v=1; a=ed25519-sha256; c=relaxed/relaxed; d=suse.cz; s=susede2_ed25519; t=1649156333; h=from:from:reply-to: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; bh=Nf3ZDaKTrRzXkI+pJ7Q1ZD2cYGQo886ywTK7Jv1y/Qw=; b=cxQFnl4GrmcAqbRIVvCmbbPx9C/Ri6gFIY/GDcDxkQ4HVTZ+MGboEzdzws23N8zyt1C+4T LSJf1GNgD5xLnIDg== Received: from imap2.suse-dmz.suse.de (imap2.suse-dmz.suse.de [192.168.254.74]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature ECDSA (P-521) server-digest SHA512) (No client certificate requested) by imap2.suse-dmz.suse.de (Postfix) with ESMTPS id C758613522; Tue, 5 Apr 2022 10:58:53 +0000 (UTC) Received: from dovecot-director2.suse.de ([192.168.254.65]) by imap2.suse-dmz.suse.de with ESMTPSA id jc/7L+0gTGI5YgAAMHmgww (envelope-from ); Tue, 05 Apr 2022 10:58:53 +0000 Message-ID: Date: Tue, 5 Apr 2022 12:58:53 +0200 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:91.0) Gecko/20100101 Thunderbird/91.7.0 Subject: Re: [PATCH] mm/slub, kunit: Make slub_kunit unaffected by global slub debugging flags Content-Language: en-US To: Hyeonggon Yoo <42.hyeyoo@gmail.com> Cc: linux-mm@kvack.org, Christoph Lameter , Pekka Enberg , David Rientjes , Joonsoo Kim , Andrew Morton , Roman Gushchin , Oliver Glitta References: From: Vlastimil Babka In-Reply-To: Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 7bit X-Rspamd-Server: rspam05 X-Rspamd-Queue-Id: 3B43B100002 X-Stat-Signature: x93dq6n81jnj8q95px4s3thfzbpagfuc X-Rspam-User: Authentication-Results: imf05.hostedemail.com; dkim=pass header.d=suse.cz header.s=susede2_rsa header.b=PjYcX31F; dkim=pass header.d=suse.cz header.s=susede2_ed25519 header.b=cxQFnl4G; dmarc=none; spf=pass (imf05.hostedemail.com: domain of vbabka@suse.cz designates 195.135.220.28 as permitted sender) smtp.mailfrom=vbabka@suse.cz X-HE-Tag: 1649156335-984737 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: On 3/17/22 09:10, Hyeonggon Yoo wrote: > slub_kunit does not expect other debugging flags to be set when running > tests. When SLAB_RED_ZONE flag is set globally, test fails because the > flag affects number of errors reported. > > To make slub_kunit unaffected by global slub debugging flags, introduce > SLAB_NO_GLOBAL_FLAGS to ignore them. It's still allowed to specify > debugging flags by specifying cache name(s) in slub_debug parameter. Given how we support globbing, I think it would be safest to just ignore everything that comes from slub_debug parameter when the SLAB_NO_GLOBAL_FLAGS flag is specified, even if it involves a (partial) cache name match. Maybe name it SLAB_NO_USER_FLAGS then? > Suggested-by: Vlastimil Babka > Signed-off-by: Hyeonggon Yoo <42.hyeyoo@gmail.com> > --- > include/linux/slab.h | 3 +++ > lib/slub_kunit.c | 10 +++++----- > mm/slab.h | 5 +++-- > mm/slub.c | 3 +++ > 4 files changed, 14 insertions(+), 7 deletions(-) > > diff --git a/include/linux/slab.h b/include/linux/slab.h > index 0381868e5118..11fe2c28422d 100644 > --- a/include/linux/slab.h > +++ b/include/linux/slab.h > @@ -112,6 +112,9 @@ > #define SLAB_KASAN 0 > #endif > > +/* Ignore globally specified debugging flags */ I'd add that this is intended for caches created for self-tests so they always have flags as specified in the code. > +#define SLAB_NO_GLOBAL_FLAGS ((slab_flags_t __force)0x10000000U) > + > /* The following flags affect the page allocator grouping pages by mobility */ > /* Objects are reclaimable */ > #define SLAB_RECLAIM_ACCOUNT ((slab_flags_t __force)0x00020000U) > diff --git a/lib/slub_kunit.c b/lib/slub_kunit.c > index 8662dc6cb509..acf061dc558d 100644 > --- a/lib/slub_kunit.c > +++ b/lib/slub_kunit.c > @@ -12,7 +12,7 @@ static int slab_errors; > static void test_clobber_zone(struct kunit *test) > { > struct kmem_cache *s = kmem_cache_create("TestSlub_RZ_alloc", 64, 0, > - SLAB_RED_ZONE, NULL); > + SLAB_RED_ZONE|SLAB_NO_GLOBAL_FLAGS, NULL); > u8 *p = kmem_cache_alloc(s, GFP_KERNEL); > > kasan_disable_current(); > @@ -30,7 +30,7 @@ static void test_clobber_zone(struct kunit *test) > static void test_next_pointer(struct kunit *test) > { > struct kmem_cache *s = kmem_cache_create("TestSlub_next_ptr_free", 64, 0, > - SLAB_POISON, NULL); > + SLAB_POISON|SLAB_NO_GLOBAL_FLAGS, NULL); > u8 *p = kmem_cache_alloc(s, GFP_KERNEL); > unsigned long tmp; > unsigned long *ptr_addr; > @@ -75,7 +75,7 @@ static void test_next_pointer(struct kunit *test) > static void test_first_word(struct kunit *test) > { > struct kmem_cache *s = kmem_cache_create("TestSlub_1th_word_free", 64, 0, > - SLAB_POISON, NULL); > + SLAB_POISON|SLAB_NO_GLOBAL_FLAGS, NULL); > u8 *p = kmem_cache_alloc(s, GFP_KERNEL); > > kmem_cache_free(s, p); > @@ -90,7 +90,7 @@ static void test_first_word(struct kunit *test) > static void test_clobber_50th_byte(struct kunit *test) > { > struct kmem_cache *s = kmem_cache_create("TestSlub_50th_word_free", 64, 0, > - SLAB_POISON, NULL); > + SLAB_POISON|SLAB_NO_GLOBAL_FLAGS, NULL); > u8 *p = kmem_cache_alloc(s, GFP_KERNEL); > > kmem_cache_free(s, p); > @@ -106,7 +106,7 @@ static void test_clobber_50th_byte(struct kunit *test) > static void test_clobber_redzone_free(struct kunit *test) > { > struct kmem_cache *s = kmem_cache_create("TestSlub_RZ_free", 64, 0, > - SLAB_RED_ZONE, NULL); > + SLAB_RED_ZONE|SLAB_NO_GLOBAL_FLAGS, NULL); > u8 *p = kmem_cache_alloc(s, GFP_KERNEL); > > kasan_disable_current(); > diff --git a/mm/slab.h b/mm/slab.h > index c7f2abc2b154..69946131208a 100644 > --- a/mm/slab.h > +++ b/mm/slab.h > @@ -330,7 +330,7 @@ static inline slab_flags_t kmem_cache_flags(unsigned int object_size, > SLAB_ACCOUNT) > #elif defined(CONFIG_SLUB) > #define SLAB_CACHE_FLAGS (SLAB_NOLEAKTRACE | SLAB_RECLAIM_ACCOUNT | \ > - SLAB_TEMPORARY | SLAB_ACCOUNT) > + SLAB_TEMPORARY | SLAB_ACCOUNT | SLAB_NO_GLOBAL_FLAGS) > #else > #define SLAB_CACHE_FLAGS (SLAB_NOLEAKTRACE) > #endif > @@ -349,7 +349,8 @@ static inline slab_flags_t kmem_cache_flags(unsigned int object_size, > SLAB_NOLEAKTRACE | \ > SLAB_RECLAIM_ACCOUNT | \ > SLAB_TEMPORARY | \ > - SLAB_ACCOUNT) > + SLAB_ACCOUNT | \ > + SLAB_NO_GLOBAL_FLAGS) > > bool __kmem_cache_empty(struct kmem_cache *); > int __kmem_cache_shutdown(struct kmem_cache *); > diff --git a/mm/slub.c b/mm/slub.c > index 71e8663f6037..2a3cffd7b27f 100644 > --- a/mm/slub.c > +++ b/mm/slub.c > @@ -1592,6 +1592,9 @@ slab_flags_t kmem_cache_flags(unsigned int object_size, > if (flags & SLAB_NOLEAKTRACE) > slub_debug_local &= ~SLAB_STORE_USER; > > + if (flags & SLAB_NO_GLOBAL_FLAGS) > + slub_debug_local = 0; > + > len = strlen(name); > next_block = slub_debug_string; > /* Go through all blocks of debug options, see if any matches our slab's name */