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 928A8C77B75 for ; Wed, 19 Apr 2023 02:52:28 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 9BF538E0002; Tue, 18 Apr 2023 22:52:27 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 96F9E8E0001; Tue, 18 Apr 2023 22:52:27 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 8369F8E0002; Tue, 18 Apr 2023 22:52:27 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0017.hostedemail.com [216.40.44.17]) by kanga.kvack.org (Postfix) with ESMTP id 754548E0001 for ; Tue, 18 Apr 2023 22:52:27 -0400 (EDT) Received: from smtpin23.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay05.hostedemail.com (Postfix) with ESMTP id 3740F405E0 for ; Wed, 19 Apr 2023 02:52:27 +0000 (UTC) X-FDA: 80696617134.23.E2CA63C Received: from mail-pg1-f174.google.com (mail-pg1-f174.google.com [209.85.215.174]) by imf10.hostedemail.com (Postfix) with ESMTP id 47CB7C0018 for ; Wed, 19 Apr 2023 02:52:24 +0000 (UTC) Authentication-Results: imf10.hostedemail.com; dkim=pass header.d=bytedance.com header.s=google header.b=UBXsagd+; spf=pass (imf10.hostedemail.com: domain of zhengqi.arch@bytedance.com designates 209.85.215.174 as permitted sender) smtp.mailfrom=zhengqi.arch@bytedance.com; dmarc=pass (policy=quarantine) header.from=bytedance.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1681872745; 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:content-transfer-encoding: in-reply-to:in-reply-to:references:references:dkim-signature; bh=9zzMcMOPEpfr5THwWMh35gYibbv6uY1wVkSMdB4TPrg=; b=HuDbJekYaWF/7UmA1TSLetmhCoATqcXVXwX/jf6mJZBenvAdy5R57oLebr0zm0Jl0Mv+YI wh048miQn65bCL5dxI4XGuiSRvmnJD+mHgKK+vH0GxuRlKQAsecuBXOjCiOxewa0uUPA/9 5fypfs7d/qc2K1ojsmdpxSEeVTY/CsA= ARC-Authentication-Results: i=1; imf10.hostedemail.com; dkim=pass header.d=bytedance.com header.s=google header.b=UBXsagd+; spf=pass (imf10.hostedemail.com: domain of zhengqi.arch@bytedance.com designates 209.85.215.174 as permitted sender) smtp.mailfrom=zhengqi.arch@bytedance.com; dmarc=pass (policy=quarantine) header.from=bytedance.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1681872745; a=rsa-sha256; cv=none; b=tTRMiz8SAdn2KPxGFykQlGbbIb/7LvkP56a47cAV75XmD+6w8nWXuCOTM8cg7kQ9IslqGc UYy/mi/G4JwXibYTfRvzqzHT21e4yunQSB6hGtqyGqUZ/+V1gQFfXYzM7S26vu17NRYWmD 5prIoJQiOX4UEWZC8M4jzbTjOA+2wAw= Received: by mail-pg1-f174.google.com with SMTP id 41be03b00d2f7-5180ad24653so462875a12.1 for ; Tue, 18 Apr 2023 19:52:23 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bytedance.com; s=google; t=1681872743; x=1684464743; h=content-transfer-encoding:in-reply-to:from:content-language :references:cc:to:subject:user-agent:mime-version:date:message-id :from:to:cc:subject:date:message-id:reply-to; bh=9zzMcMOPEpfr5THwWMh35gYibbv6uY1wVkSMdB4TPrg=; b=UBXsagd+dw1wo0aza96JkCJ+jMbx2wsqarK7EOSD3eF1gayZSOkm7zij9HGVOEHltl Z8hBxcxuYFsdw0OPL73ub/s+GPU0ppzLaM+O9iZItq/csF2eh9t2SbOwYLQOl+R3Z/Hf 2CpgVBQqztQyK1RIId6pPdeguB5a9+K+YYMtEFp4U4KQKx5nXAOCrQOmFwiOlEz2kejY KnZz1zKvL7k1phmcw0GJnkwQKPYRbOHcf95ZWqrBVMCP+zOzXqqNHgmGRo7swaKs4q/4 z/2pL9t8Qm8EbBRql30BYqZJt7eHD2kz+QQ1u8mU9xNKfBd/CDu4livihoDlEq2a/hvm 1KTQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1681872743; x=1684464743; h=content-transfer-encoding:in-reply-to:from:content-language :references:cc:to:subject:user-agent:mime-version:date:message-id :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=9zzMcMOPEpfr5THwWMh35gYibbv6uY1wVkSMdB4TPrg=; b=hX35dw8q/hjdZigGcZmHJw1B4/hkTEKtW5NF6Ad0Cz/fvg7IXpmg+mrmOU7tOkV27w kUX5pfFJN9698l3l3nDYAZDytnZYY3qqQSrUxKyth7Mvq2SNQtRDYfmJFF8AIOoMR1YE V8N+r6ltWIzRmxAbkvlIYxrU3eNFjodbgXMj818LTI18swF7qHeLV1aSL8xldbtUdxaf /yIxnGpovKEX3bJd4rZQr7F+xdCKQPClOLE89R65IYdLvwrCW63C45+3q0wILC+s6Uzs pxtko2OxkMEsMNxTnRDv1vtjgeKsfMhpDTpr0gYDYOsFj0LXM8CyMMNbEo2y3pSWpvo5 gj2g== X-Gm-Message-State: AAQBX9cODmemih9VToVao6f4yi7bT2uWcttcfUoM2qLAFbGKqSj9h1/J +D5x9rVb5t/QpPfgACu8sD6/xg== X-Google-Smtp-Source: AKy350Zls27gYnhf8aXr76dGe3pxd8p9gTZUWGbHrFmiU0uyWWKo8vnuPYw6zJRt75YJTQdcpmo+lA== X-Received: by 2002:a17:903:11c9:b0:1a6:6bdb:b548 with SMTP id q9-20020a17090311c900b001a66bdbb548mr19768853plh.1.1681872742749; Tue, 18 Apr 2023 19:52:22 -0700 (PDT) Received: from [10.70.252.135] ([139.177.225.245]) by smtp.gmail.com with ESMTPSA id jf1-20020a170903268100b001a245b49731sm10255632plb.128.2023.04.18.19.52.18 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Tue, 18 Apr 2023 19:52:22 -0700 (PDT) Message-ID: Date: Wed, 19 Apr 2023 10:52:15 +0800 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:102.0) Gecko/20100101 Thunderbird/102.10.0 Subject: Re: [PATCH v2] kasan: Fix lockdep report invalid wait context To: Zqiang , elver@google.com, ryabinin.a.a@gmail.com, glider@google.com, andreyknvl@gmail.com, dvyukov@google.com, akpm@linux-foundation.org, Vlastimil Babka Cc: kasan-dev@googlegroups.com, linux-mm@kvack.org, linux-kernel@vger.kernel.org References: <20230327120019.1027640-1-qiang1.zhang@intel.com> Content-Language: en-US From: Qi Zheng In-Reply-To: <20230327120019.1027640-1-qiang1.zhang@intel.com> Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit X-Rspam-User: X-Rspamd-Server: rspam03 X-Stat-Signature: jfrmrf9zz7iba7pq439ury3wna8nmdyy X-Rspamd-Queue-Id: 47CB7C0018 X-HE-Tag: 1681872744-195723 X-HE-Meta: U2FsdGVkX19k3KUIDH7rjQNdEMZtdZHS8AtHcs39e69oXjIuisJ3AVIP5fGlJd51ye4kW1+npgYPpVFKRpSGbMANbzOGoy/xx6cgiSjZbr2LYLhagx1awQEFvGbO2tDwctsYx6Qhul/rlm9CCjVkpkSZGAQ9dA4xGNSqrH/DMbaZ81aQwMYk0A8k2Q+rSN7VJNMehUDZGLArP5PpR5/3jszUuSDSwRArQubEWW5Ebfq4WAov6rEkuhr7tXSZ0BBQZwBtRhIQ2ZX1trQRwrfBP50liAxCAOQvx+oNbmAwh7V2Wpr/QDYUFdIyIocb6wzg+Jhm3TI8Fo05OlldkOTYxldX55Ir6aEpvK5VF47oqE5hGeLrL1x2kNFT2tt92ho48e3tqcc7SdjFvIwsaOENoBrzqs8FKBInGMN+lAmFYLitPdMBul4g/bDF5gAH/0l5ilUJAspwmkTf0MH9UMR4b+5dFYxX93EEDBfv6fyNzr2zBxqFPmb/oEKBSlvMYw1VZ/uiWFOV+BFPIEsQI1dAIM8kz83AaS7cOgVi4l8i1w8q9v1zvfnWtnAM+LO9fei/Cvf/YQOxylAG29GNsnfbfQ2HzOpzjcwSeM6lAu1u/YAK3T2OVni1AEGn8XVpzcdXVmrLXwwi0L+8WouCIii6S17npnynAblJEw4wl9TqO53Xq09a32MZNXYlsxcZOplMBWDtrsWCJFmKmprmF39XeffOmyJHYFZFETGxPlyvBilaDucS1BRBfmz7Ujs18spN71Pc0Rxm8TZwv7xM0Y7KQv4xB/zdKJUpHJ9MrFaFe3nNGHzYeuvUJw7qP9kY8R77nFaf5iN5aAZqRfldq9i2t+LprWHSrcDK3rVqIPeBp5267tFGIl/rGjCKrbh6lxeanyvqO/47j4H9jjq6MAiIjhg/Lv8c7jcKoXVPCs6wQoCfP5njX2IPnl12mMqY35WIjNFcRpI4KqKoryU6B54 VUVPHVsV L0xRfnepXw+KC0xtqeAZ+0sLolt8gCIKpsZjHYLNpIl6lF3ntWm3jutfakqKtAaMvY3kGgliHH++LFlznp+aA96KDmxNL78CY9ToYlCvQP065ZDjDJCfa8gWYmUVWthuKl8B6jumjzH6UCYklLIBsinzioy88N/EIU7AIW9zTVHctSTJvJhAvzhHoy1aX+cuSo+HtX4MiTmRGqDeBgtY6N5ls8lminj0IJoyMjPT4UodTA18UuzTcZQfZf0UIKFO8IbuSHd/1mdYCgjqIiUgQRmR+cjWHh2hWk4EHaMhxqneQn14Bekn/c6yL5ig3Y1XO3iSZm0qZofgwoI66cRXrZQ3DRF6EAX9Jft+lza3yhyLQoHWrm2rMZBefa/1OQqw6lHo8o3pUApibkmbe24r9odHmg2B4BNz7Odz00pnf1XGi8Xh9CiifAplZeMXwKj+6dGDikulRzBvxN89PWIaj3VxQJwiLBIgw5ePI 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 2023/3/27 20:00, Zqiang wrote: > For kernels built with the following options and booting > > CONFIG_SLUB=y > CONFIG_DEBUG_LOCKDEP=y > CONFIG_PROVE_LOCKING=y > CONFIG_PROVE_RAW_LOCK_NESTING=y > > [ 0.523115] [ BUG: Invalid wait context ] > [ 0.523315] 6.3.0-rc1-yocto-standard+ #739 Not tainted > [ 0.523649] ----------------------------- > [ 0.523663] swapper/0/0 is trying to lock: > [ 0.523663] ffff888035611360 (&c->lock){....}-{3:3}, at: put_cpu_partial+0x2e/0x1e0 > [ 0.523663] other info that might help us debug this: > [ 0.523663] context-{2:2} > [ 0.523663] no locks held by swapper/0/0. > [ 0.523663] stack backtrace: > [ 0.523663] CPU: 0 PID: 0 Comm: swapper/0 Not tainted 6.3.0-rc1-yocto-standard+ #739 > [ 0.523663] Call Trace: > [ 0.523663] > [ 0.523663] dump_stack_lvl+0x64/0xb0 > [ 0.523663] dump_stack+0x10/0x20 > [ 0.523663] __lock_acquire+0x6c4/0x3c10 > [ 0.523663] lock_acquire+0x188/0x460 > [ 0.523663] put_cpu_partial+0x5a/0x1e0 > [ 0.523663] __slab_free+0x39a/0x520 > [ 0.523663] ___cache_free+0xa9/0xc0 > [ 0.523663] qlist_free_all+0x7a/0x160 > [ 0.523663] per_cpu_remove_cache+0x5c/0x70 > [ 0.523663] __flush_smp_call_function_queue+0xfc/0x330 > [ 0.523663] generic_smp_call_function_single_interrupt+0x13/0x20 > [ 0.523663] __sysvec_call_function+0x86/0x2e0 > [ 0.523663] sysvec_call_function+0x73/0x90 > [ 0.523663] > [ 0.523663] > [ 0.523663] asm_sysvec_call_function+0x1b/0x20 > [ 0.523663] RIP: 0010:default_idle+0x13/0x20 > [ 0.523663] RSP: 0000:ffffffff83e07dc0 EFLAGS: 00000246 > [ 0.523663] RAX: 0000000000000000 RBX: ffffffff83e1e200 RCX: ffffffff82a83293 > [ 0.523663] RDX: 0000000000000000 RSI: 0000000000000000 RDI: ffffffff8119a6b1 > [ 0.523663] RBP: ffffffff83e07dc8 R08: 0000000000000001 R09: ffffed1006ac0d66 > [ 0.523663] R10: ffff888035606b2b R11: ffffed1006ac0d65 R12: 0000000000000000 > [ 0.523663] R13: ffffffff83e1e200 R14: ffffffff84a7d980 R15: 0000000000000000 > [ 0.523663] default_idle_call+0x6c/0xa0 > [ 0.523663] do_idle+0x2e1/0x330 > [ 0.523663] cpu_startup_entry+0x20/0x30 > [ 0.523663] rest_init+0x152/0x240 > [ 0.523663] arch_call_rest_init+0x13/0x40 > [ 0.523663] start_kernel+0x331/0x470 > [ 0.523663] x86_64_start_reservations+0x18/0x40 > [ 0.523663] x86_64_start_kernel+0xbb/0x120 > [ 0.523663] secondary_startup_64_no_verify+0xe0/0xeb > [ 0.523663] > > The local_lock_irqsave() is invoked in put_cpu_partial() and happens > in IPI context, due to the CONFIG_PROVE_RAW_LOCK_NESTING=y (the > LD_WAIT_CONFIG not equal to LD_WAIT_SPIN), so acquire local_lock in > IPI context will trigger above calltrace. Just to add another similar case: Call Trace: dump_stack_lvl+0x69/0x97 __lock_acquire+0x4a0/0x1b50 lock_acquire+0x261/0x2c0 ? restore_bytes+0x40/0x40 local_lock_acquire+0x21/0x70 ? restore_bytes+0x40/0x40 put_cpu_partial+0x41/0x130 ? flush_smp_call_function_queue+0x125/0x4d0 kfree+0x250/0x2c0 flush_smp_call_function_queue+0x125/0x4d0 __sysvec_call_function_single+0x3a/0x100 sysvec_call_function_single+0x4b/0x90 asm_sysvec_call_function_single+0x16/0x20 So we can't call kfree() and its friends in interrupt context? Also +Vlastimil Babka. Thanks, Qi > > This commit therefore move qlist_free_all() from hard-irq context to > task context. > > Signed-off-by: Zqiang > --- > v1->v2: > Modify the commit information and add Cc. > > mm/kasan/quarantine.c | 34 ++++++++-------------------------- > 1 file changed, 8 insertions(+), 26 deletions(-) > > diff --git a/mm/kasan/quarantine.c b/mm/kasan/quarantine.c > index 75585077eb6d..152dca73f398 100644 > --- a/mm/kasan/quarantine.c > +++ b/mm/kasan/quarantine.c > @@ -99,7 +99,6 @@ static unsigned long quarantine_size; > static DEFINE_RAW_SPINLOCK(quarantine_lock); > DEFINE_STATIC_SRCU(remove_cache_srcu); > > -#ifdef CONFIG_PREEMPT_RT > struct cpu_shrink_qlist { > raw_spinlock_t lock; > struct qlist_head qlist; > @@ -108,7 +107,6 @@ struct cpu_shrink_qlist { > static DEFINE_PER_CPU(struct cpu_shrink_qlist, shrink_qlist) = { > .lock = __RAW_SPIN_LOCK_UNLOCKED(shrink_qlist.lock), > }; > -#endif > > /* Maximum size of the global queue. */ > static unsigned long quarantine_max_size; > @@ -319,16 +317,6 @@ static void qlist_move_cache(struct qlist_head *from, > } > } > > -#ifndef CONFIG_PREEMPT_RT > -static void __per_cpu_remove_cache(struct qlist_head *q, void *arg) > -{ > - struct kmem_cache *cache = arg; > - struct qlist_head to_free = QLIST_INIT; > - > - qlist_move_cache(q, &to_free, cache); > - qlist_free_all(&to_free, cache); > -} > -#else > static void __per_cpu_remove_cache(struct qlist_head *q, void *arg) > { > struct kmem_cache *cache = arg; > @@ -340,7 +328,6 @@ static void __per_cpu_remove_cache(struct qlist_head *q, void *arg) > qlist_move_cache(q, &sq->qlist, cache); > raw_spin_unlock_irqrestore(&sq->lock, flags); > } > -#endif > > static void per_cpu_remove_cache(void *arg) > { > @@ -362,6 +349,8 @@ void kasan_quarantine_remove_cache(struct kmem_cache *cache) > { > unsigned long flags, i; > struct qlist_head to_free = QLIST_INIT; > + int cpu; > + struct cpu_shrink_qlist *sq; > > /* > * Must be careful to not miss any objects that are being moved from > @@ -372,20 +361,13 @@ void kasan_quarantine_remove_cache(struct kmem_cache *cache) > */ > on_each_cpu(per_cpu_remove_cache, cache, 1); > > -#ifdef CONFIG_PREEMPT_RT > - { > - int cpu; > - struct cpu_shrink_qlist *sq; > - > - for_each_online_cpu(cpu) { > - sq = per_cpu_ptr(&shrink_qlist, cpu); > - raw_spin_lock_irqsave(&sq->lock, flags); > - qlist_move_cache(&sq->qlist, &to_free, cache); > - raw_spin_unlock_irqrestore(&sq->lock, flags); > - } > - qlist_free_all(&to_free, cache); > + for_each_online_cpu(cpu) { > + sq = per_cpu_ptr(&shrink_qlist, cpu); > + raw_spin_lock_irqsave(&sq->lock, flags); > + qlist_move_cache(&sq->qlist, &to_free, cache); > + raw_spin_unlock_irqrestore(&sq->lock, flags); > } > -#endif > + qlist_free_all(&to_free, cache); > > raw_spin_lock_irqsave(&quarantine_lock, flags); > for (i = 0; i < QUARANTINE_BATCHES; i++) { -- Thanks, Qi