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 A8FCCC433EF for ; Wed, 6 Apr 2022 06:15:13 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id BECA38D000F; Wed, 6 Apr 2022 02:06:56 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id B9BE58D0005; Wed, 6 Apr 2022 02:06:56 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id A15F18D000F; Wed, 6 Apr 2022 02:06:56 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from forelay.hostedemail.com (smtprelay0197.hostedemail.com [216.40.44.197]) by kanga.kvack.org (Postfix) with ESMTP id 92C188D0005 for ; Wed, 6 Apr 2022 02:06:56 -0400 (EDT) Received: from smtpin25.hostedemail.com (10.5.19.251.rfc1918.com [10.5.19.251]) by forelay03.hostedemail.com (Postfix) with ESMTP id 4BC1F8249980 for ; Wed, 6 Apr 2022 06:06:46 +0000 (UTC) X-FDA: 79325420412.25.814E2A6 Received: from mail-pl1-f170.google.com (mail-pl1-f170.google.com [209.85.214.170]) by imf20.hostedemail.com (Postfix) with ESMTP id C5B351C0017 for ; Wed, 6 Apr 2022 06:06:45 +0000 (UTC) Received: by mail-pl1-f170.google.com with SMTP id y6so1106026plg.2 for ; Tue, 05 Apr 2022 23:06:45 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=date:from:to:cc:subject:message-id:references:mime-version :content-disposition:in-reply-to; bh=p9GHdSUG4FEi60vlWtGB7+a+MAU8Kdc4GcjNODgUdeg=; b=SA6OI6Y0/8BVaz7bekG2kst+xCmzWP4KkaaGM3Mi0aRXdPqd0ZIy1wKZY2QfyksVMw XjOqhE/baikux95F87MZUsrppF0lecdInngYp+Xi87sxPidPVRIwiu8paZ2ITQ379UP0 WfGUjzHBtpqeXMpvMuvYNsznD0LFQXrQpGDRifd5Va28IxhdxBELjbUSgH+TNjEL0awp R00jIUH/8GPBwwV1CVuZhYcJ8oT6QBj1EU4Tdr9bnKMBzHSjpmBZig764Tm0TYSd8qHX nyKd5kgzrLczu6nq9sq4IUcMAWEk+2j7rDTP/G/ZM/rpIYI9WrHoszTIhFRMwptEOTmJ m7sg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:date:from:to:cc:subject:message-id:references :mime-version:content-disposition:in-reply-to; bh=p9GHdSUG4FEi60vlWtGB7+a+MAU8Kdc4GcjNODgUdeg=; b=MF7G1Q51Mq+oHLjluVqFXbUZmkAcueBypFMM3ki8KQ6DCDbwEzU3B2UhRH5/RfMwRF De9ArxhcwSo3rx89THsnAqocV0HCT+oq9D3B7VgEUIwmM9b+7/KXqkHX9q7GbbB9Rqib lowXBjkuISGEAahVSG1W3U2AupCavwGe86RmYrKpIVUHzURUpLA69HUs18PnfskDja7/ IohuQ839ylqHEOJJHamTMkcMkL/rbYMIhvFQcJ6u+aAS2JVNezsV2SlkUnnTGt0J57cx xLcP2alTkXFhCmGb8vFE+3lE0uO34wL+TcU3pIuyx99yhFyKBhvTB/+dJRwVZ4D4liNp il7Q== X-Gm-Message-State: AOAM532ROCixA9HymtYXkWW1+UuK6kEIy+Zs2oxRR6Rt03yH26Ram75L gUW5AryaWor6yEoDlwvLijU= X-Google-Smtp-Source: ABdhPJwApwqnEg6V8epT62axbTmr/lybASCZP9SeLitLh5DWzqWJt85Rqv3t9BQdy8d/PJiUil+5Sw== X-Received: by 2002:a17:902:ab57:b0:156:c63e:9d1a with SMTP id ij23-20020a170902ab5700b00156c63e9d1amr7147753plb.49.1649225204713; Tue, 05 Apr 2022 23:06:44 -0700 (PDT) Received: from hyeyoo ([114.29.24.243]) by smtp.gmail.com with ESMTPSA id w129-20020a628287000000b004fdc453b49asm17771169pfd.39.2022.04.05.23.06.40 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 05 Apr 2022 23:06:43 -0700 (PDT) Date: Wed, 6 Apr 2022 15:06:37 +0900 From: Hyeonggon Yoo <42.hyeyoo@gmail.com> To: Vlastimil Babka Cc: linux-mm@kvack.org, Christoph Lameter , Pekka Enberg , David Rientjes , Joonsoo Kim , Andrew Morton , Roman Gushchin , Oliver Glitta Subject: Re: [PATCH] mm/slub, kunit: Make slub_kunit unaffected by global slub debugging flags Message-ID: References: MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: X-Rspamd-Server: rspam06 X-Rspamd-Queue-Id: C5B351C0017 X-Rspam-User: Authentication-Results: imf20.hostedemail.com; dkim=pass header.d=gmail.com header.s=20210112 header.b=SA6OI6Y0; dmarc=pass (policy=none) header.from=gmail.com; spf=pass (imf20.hostedemail.com: domain of 42.hyeyoo@gmail.com designates 209.85.214.170 as permitted sender) smtp.mailfrom=42.hyeyoo@gmail.com X-Stat-Signature: pyp3cmwp79jpjnjr764cbc34obengks7 X-HE-Tag: 1649225205-655601 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 Tue, Apr 05, 2022 at 12:58:53PM +0200, Vlastimil Babka wrote: > 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? > Seems reasonable. letting your specify debugging flags for self-test cache is not useful for any case. Let's make self-test caches completely isolated from user-specified flags. I sent v2 with your comments in mind. > > 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. > Did it in v2. Thanks! Hyeonggon > > +#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 */ >