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 9E488C43334 for ; Sat, 11 Jun 2022 03:48:43 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 23F4B8D0104; Fri, 10 Jun 2022 23:48:43 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 1EE578D00F7; Fri, 10 Jun 2022 23:48:43 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 0B6F78D0104; Fri, 10 Jun 2022 23:48:43 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0013.hostedemail.com [216.40.44.13]) by kanga.kvack.org (Postfix) with ESMTP id F02388D00F7 for ; Fri, 10 Jun 2022 23:48:42 -0400 (EDT) Received: from smtpin22.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay07.hostedemail.com (Postfix) with ESMTP id CF1B1204A5 for ; Sat, 11 Jun 2022 03:48:42 +0000 (UTC) X-FDA: 79564573284.22.DFF708D Received: from mail-pj1-f46.google.com (mail-pj1-f46.google.com [209.85.216.46]) by imf24.hostedemail.com (Postfix) with ESMTP id 720E018006D for ; Sat, 11 Jun 2022 03:48:42 +0000 (UTC) Received: by mail-pj1-f46.google.com with SMTP id c12-20020a17090a558c00b001ea95be66a5so30307pji.2 for ; Fri, 10 Jun 2022 20:48:42 -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=ps9PzyKsHra0mO7wRxOlf/oqD24MT3kaY/zjw7Hezl4=; b=qg3GxyR7bkY2y5AYqzshdiTCojNYRlB81xF7t3lZKgKfo/1Nm4SMetgvgUnmTG1aVo W0GbG+y/R046idLsfsf3EZDTwOKwBsiP2FRGdTsM030TTXcJ0WsAXYAC00qPXPpPYN3O Gglh80Y4ZlGks8OfghPhp5Puakn9RGdhQanqGlNtDJ9y9mrDRgmCz//W1IgibbP4GxTw miqfopiBAnnE0ET+CielBeMnAti0kFW4BOae90qpMVWJgmueQe6n8vtlB0sfm8uoCxnq pnkni6A2Gcar+OQJgIsbefMBvErJ/oABHyorYAFFPDCULlt/pjzpa7r8IjoIipGTByh0 EN/Q== 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=ps9PzyKsHra0mO7wRxOlf/oqD24MT3kaY/zjw7Hezl4=; b=hEgRdEXfBBwtnT9Q4bRTeUdEAYXZzi28i1DP6KDIwnbax77YoaKF4qkFD/4DSBp8M6 noW1OTMMGTUjp1GlgBPc+uqnkoIAIt3cNH7yyhtHiRRkaK/BfwAXI4odMedAlz+SEO5R s4M2Ko5C8m3Vq1GZ6sC4vQ8d+yk+Ly21zmWfLaEyPnFJPAro3JStIrIZ7n6ijt6e/Pek ql+4+R7Re6AM/gapUMo2OVbyKAQAodMtgxopfKNfP2u32WNQiENYkm8z7ySy1S4H9mf4 ZlFnmucAHNCOeSVyQWHaTAW0hKWHxEZxAalpz2Q9p8An118fQfAaKZ8fMgFzvnbhcx2r wPZQ== X-Gm-Message-State: AOAM533TRNFZdg6p8fU9nktuKva6gfvWNORUM0GLaxJOPG3jVk1OgAd1 zXqPmSjQYLB8b03AclLr7AQ= X-Google-Smtp-Source: ABdhPJzJ+eTteM34ReuJxhTgRXYBQAXvnDFJ352lhw7oFxhQxBBkpN2RYuZwdILmBAnJCJAXfNIr2g== X-Received: by 2002:a17:90a:df16:b0:1e3:1cd:6c6f with SMTP id gp22-20020a17090adf1600b001e301cd6c6fmr3155522pjb.10.1654919321564; Fri, 10 Jun 2022 20:48:41 -0700 (PDT) Received: from hyeyoo ([114.29.24.243]) by smtp.gmail.com with ESMTPSA id a24-20020a056a001d1800b0051baeb06c0bsm339152pfx.168.2022.06.10.20.48.30 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 10 Jun 2022 20:48:40 -0700 (PDT) Date: Sat, 11 Jun 2022 12:48:26 +0900 From: Hyeonggon Yoo <42.hyeyoo@gmail.com> To: Sebastian Andrzej Siewior Cc: linux-mm@kvack.org, Andrew Morton , Christoph Lameter , David Rientjes , Joonsoo Kim , Oliver Glitta , Pekka Enberg , Roman Gushchin , Thomas Gleixner , Vlastimil Babka Subject: Re: [PATCH] mm/slub: Move the stackdepot related allocation out of IRQ-off section. Message-ID: References: MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1654919322; a=rsa-sha256; cv=none; b=4iIXse3oXEnTTVdcn6fctGciyfcHEZyM7v+CxuO7NkoMhq1uEz/JNhFegHtGPVCzIdxkEq k4btPhASMU2bcsme7po2y6PDSyN66OpE5LAqo8IJrnBmZj9mzT+BC2qVOVnklyvEz2SQ5b RHZuVQodICnF3JAHAq3eHW4mrSKvylE= ARC-Authentication-Results: i=1; imf24.hostedemail.com; dkim=pass header.d=gmail.com header.s=20210112 header.b=qg3GxyR7; dmarc=pass (policy=none) header.from=gmail.com; spf=pass (imf24.hostedemail.com: domain of 42.hyeyoo@gmail.com designates 209.85.216.46 as permitted sender) smtp.mailfrom=42.hyeyoo@gmail.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1654919322; h=from:from:sender:reply-to:subject:subject:date:date: message-id:message-id:to:to:cc:cc:mime-version:mime-version: content-type:content-type:content-transfer-encoding: in-reply-to:in-reply-to:references:references:dkim-signature; bh=ps9PzyKsHra0mO7wRxOlf/oqD24MT3kaY/zjw7Hezl4=; b=lomvP7RTRKPNtBy0W6t0/J90XDMEIArfpBsqgpWy+rre012IcGLdKByl10bdCzvzovi+kt gTuiosWnumsacfrOshskWxx/1wqx9YjJ/swWYKo3m2PgfgW2Pd/5yE21PHYNH+y2jIv/Vm 4vtDVYG+Wif0m5bhMTrmSFM2mDuk/4Y= X-Rspamd-Queue-Id: 720E018006D X-Rspam-User: Authentication-Results: imf24.hostedemail.com; dkim=pass header.d=gmail.com header.s=20210112 header.b=qg3GxyR7; dmarc=pass (policy=none) header.from=gmail.com; spf=pass (imf24.hostedemail.com: domain of 42.hyeyoo@gmail.com designates 209.85.216.46 as permitted sender) smtp.mailfrom=42.hyeyoo@gmail.com X-Stat-Signature: apikqw4is8tgp4rgd6j9ra6guk3mj8iq X-Rspamd-Server: rspam02 X-HE-Tag: 1654919322-903844 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, Jun 07, 2022 at 05:20:10PM +0200, Sebastian Andrzej Siewior wrote: > The set_track() invocation in free_debug_processing() is invoked with > acquired slab_lock(). The lock disables interrupts on PREEMPT_RT and > this forbids to allocate memory which is done in stack_depot_save(). Thanks, nice catch. > Split set_track() into two parts: set_track_prepare() which allocate > memory and set_track_update() which only performs the assignment of the > trace data structure. Use set_track_prepare() before disabling > interrupts. > > Fixes: 5cf909c553e9e ("mm/slub: use stackdepot to save stack trace in objects") > Signed-off-by: Sebastian Andrzej Siewior > --- > mm/slub.c | 39 +++++++++++++++++++++++++++++++++------ > 1 file changed, 33 insertions(+), 6 deletions(-) > > diff --git a/mm/slub.c b/mm/slub.c > index e5535020e0fdf..ee0445ccb288c 100644 > --- a/mm/slub.c > +++ b/mm/slub.c > @@ -726,19 +726,42 @@ static struct track *get_track(struct kmem_cache *s, void *object, > return kasan_reset_tag(p + alloc); > } > > -static void noinline set_track(struct kmem_cache *s, void *object, > - enum track_item alloc, unsigned long addr) > +static noinline depot_stack_handle_t set_track_prepare(void) > { > - struct track *p = get_track(s, object, alloc); > - > + depot_stack_handle_t handle = 0; > #ifdef CONFIG_STACKDEPOT > unsigned long entries[TRACK_ADDRS_COUNT]; > unsigned int nr_entries; > > nr_entries = stack_trace_save(entries, ARRAY_SIZE(entries), 3); > - p->handle = stack_depot_save(entries, nr_entries, GFP_NOWAIT); > + handle = stack_depot_save(entries, nr_entries, GFP_NOWAIT); > #endif > + return handle; > +} > > +static void set_track_update(struct kmem_cache *s, void *object, > + enum track_item alloc, unsigned long addr, > + depot_stack_handle_t handle) > +{ > + struct track *p = get_track(s, object, alloc); > + > +#ifdef CONFIG_STACKDEPOT > + p->handle = handle; > +#endif > + p->addr = addr; > + p->cpu = smp_processor_id(); > + p->pid = current->pid; > + p->when = jiffies; > +} > + > +static __always_inline void set_track(struct kmem_cache *s, void *object, > + enum track_item alloc, unsigned long addr) > +{ > + struct track *p = get_track(s, object, alloc); > + > +#ifdef CONFIG_STACKDEPOT > + p->handle = set_track_prepare(); > +#endif > p->addr = addr; > p->cpu = smp_processor_id(); > p->pid = current->pid; > @@ -1373,6 +1396,10 @@ static noinline int free_debug_processing( > int cnt = 0; > unsigned long flags, flags2; > int ret = 0; > + depot_stack_handle_t handle = 0; > + > + if (s->flags & SLAB_STORE_USER) > + handle = set_track_prepare(); > > spin_lock_irqsave(&n->list_lock, flags); > slab_lock(slab, &flags2); > @@ -1391,7 +1418,7 @@ static noinline int free_debug_processing( > } > > if (s->flags & SLAB_STORE_USER) > - set_track(s, object, TRACK_FREE, addr); > + set_track_update(s, object, TRACK_FREE, addr, handle); > trace(s, slab, object, 0); > /* Freepointer not overwritten by init_object(), SLAB_POISON moved it */ > init_object(s, object, SLUB_RED_INACTIVE); > -- > 2.36.1 > Looks good to me. Reviewed-by: Hyeonggon Yoo <42.hyeyoo@gmail.com> -- Thanks, Hyeonggon