From patchwork Sun Jan 12 16:17:52 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Qian Cai X-Patchwork-Id: 11329253 Return-Path: Received: from mail.kernel.org (pdx-korg-mail-1.web.codeaurora.org [172.30.200.123]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id BDEA113A0 for ; Sun, 12 Jan 2020 16:19:10 +0000 (UTC) Received: from kanga.kvack.org (kanga.kvack.org [205.233.56.17]) by mail.kernel.org (Postfix) with ESMTP id 7611721744 for ; Sun, 12 Jan 2020 16:19:10 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=fail reason="signature verification failed" (2048-bit key) header.d=lca.pw header.i=@lca.pw header.b="NjMYJ+5K" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 7611721744 Authentication-Results: mail.kernel.org; dmarc=none (p=none dis=none) header.from=lca.pw Authentication-Results: mail.kernel.org; spf=pass smtp.mailfrom=owner-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix) id 784088E0005; Sun, 12 Jan 2020 11:19:09 -0500 (EST) Delivered-To: linux-mm-outgoing@kvack.org Received: by kanga.kvack.org (Postfix, from userid 40) id 735598E0001; Sun, 12 Jan 2020 11:19:09 -0500 (EST) X-Original-To: int-list-linux-mm@kvack.org X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 64B788E0005; Sun, 12 Jan 2020 11:19:09 -0500 (EST) X-Original-To: linux-mm@kvack.org X-Delivered-To: linux-mm@kvack.org Received: from forelay.hostedemail.com (smtprelay0061.hostedemail.com [216.40.44.61]) by kanga.kvack.org (Postfix) with ESMTP id 4D47F8E0001 for ; Sun, 12 Jan 2020 11:19:09 -0500 (EST) Received: from smtpin18.hostedemail.com (10.5.19.251.rfc1918.com [10.5.19.251]) by forelay02.hostedemail.com (Postfix) with SMTP id C88374405 for ; Sun, 12 Jan 2020 16:19:08 +0000 (UTC) X-FDA: 76369491576.18.bag52_8a02b1fbdd910 X-Spam-Summary: 2,0,0,a6abd758cdf70ba8,d41d8cd98f00b204,cai@lca.pw,:peterz@infradead.org:mingo@redhat.com:juri.lelli@redhat.com:vincent.guittot@linaro.org:dietmar.eggemann@arm.com:rostedt@goodmis.org:bsegall@google.com:mgorman@suse.de:paulmck@kernel.org:tglx@linutronix.de::linux-kernel@vger.kernel.org:cai@lca.pw,RULES_HIT:41:69:355:379:541:617:800:960:966:973:988:989:1260:1311:1314:1345:1437:1515:1535:1543:1711:1730:1747:1777:1792:2194:2196:2199:2200:2393:2559:2562:2741:3138:3139:3140:3141:3142:3165:3353:3865:3867:3868:3870:3871:3872:3874:4117:4250:4321:4385:4605:5007:6261:6653:6742:7903:7974:8660:9040:10004:11026:11658:11914:12043:12291:12297:12438:12517:12519:12555:12679:12895:12986:13148:13230:13894:14018:14096:14181:14394:14721:21080:21444:21451:21627:21740:21987:30054:30065:30075,0,RBL:209.85.219.65:@lca.pw:.lbl8.mailshell.net-62.14.0.100 66.201.201.201,CacheIP:none,Bayesian:0.5,0.5,0.5,Netcheck:none,DomainCache:0,MSF:not bulk,SPF:fp,MSBL:0,DNSBL:neutral,Custom_rules:0:0 :0,LFtim X-HE-Tag: bag52_8a02b1fbdd910 X-Filterd-Recvd-Size: 6050 Received: from mail-qv1-f65.google.com (mail-qv1-f65.google.com [209.85.219.65]) by imf25.hostedemail.com (Postfix) with ESMTP for ; Sun, 12 Jan 2020 16:19:08 +0000 (UTC) Received: by mail-qv1-f65.google.com with SMTP id o18so3026838qvf.1 for ; Sun, 12 Jan 2020 08:19:08 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=lca.pw; s=google; h=from:to:cc:subject:date:message-id:mime-version :content-transfer-encoding; bh=1b9sdYh4Lw8eu7CEGsOMiPqgRlac/bhpvMkql8QppKo=; b=NjMYJ+5KXZVfOYzkwc0Ze7WK6v5uFFvNyFeL+Vc3lb/Kh7MtuTU8YhfS/JyCvcpLDd o+LCBu7NXkvyz0NfB0nVuQGsRcWH3f6Q2VvXkF9PqnRsALvzDwXMKtzMqvsfKW9qvmjR NPWagWWJYjNn8ywAf/cd5zlUZN24pHRxtAEBzRyXrF6sGierWh1FI5XeKFK9sSbbyX+e A66dK/4f1yTvynF1NQnPTEP7d/NY9mxZlxd81cU020f7W3PpqA8iBV/1xkMTy/5LZVPh 7GBOWn0SYVMjrjGVXbWmDhTet8yAhoAyiHbRCH/EqOY7rlRbzdkXYhTHb2SP5sDDzIPJ IWxg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:mime-version :content-transfer-encoding; bh=1b9sdYh4Lw8eu7CEGsOMiPqgRlac/bhpvMkql8QppKo=; b=Np2ZLDX02Q8zYombyaVUEjfggpvslN/tNfb8R52Gn1u+ZQZkqgvfcIC43eyJ6JBZka B7u97SjM1IKtdcOcJ/gEUH842SEtzaqD9Ca+gYDFWbFXFIwGOAKFKw5p8HglAdw/jAPJ HBDTlXQtZajrCDi3RjPl5MpARBrakAQEJYQeMt/ZZHXyGIEpoBagOYT3sUDOqrQ1Sd8M deAvAMS7grgT+vgJTJKHlAS6uvWIdN9QETuKb/arbBnUs/IbHgGZDO3q8UtNOxpxRJ77 0pZIObenbciwyQjuF3AeCiFxYy450KwfyqOzcKQIKC6A6kgz7a1T74hoPqhZUMomSLhj 0tSw== X-Gm-Message-State: APjAAAWSRpH9VYonDCDmN8Jtz5M8wa9hKPbLR4leDPZqDV/VWvhEsDou luQO+E2cdQ/B7Vvs9smhcNmzbw== X-Google-Smtp-Source: APXvYqw7j4sZp6njBZ/L3zU/S8gPzYfnVXBvSi07k26mwaM70PVxHhmKUaSdMeew2trIAPkPmcakVg== X-Received: by 2002:a0c:f6cd:: with SMTP id d13mr11799658qvo.20.1578845947671; Sun, 12 Jan 2020 08:19:07 -0800 (PST) Received: from ovpn-120-31.rdu2.redhat.com (pool-71-184-117-43.bstnma.fios.verizon.net. [71.184.117.43]) by smtp.gmail.com with ESMTPSA id s11sm3780302qkg.99.2020.01.12.08.19.05 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Sun, 12 Jan 2020 08:19:07 -0800 (PST) From: Qian Cai To: peterz@infradead.org, mingo@redhat.com Cc: juri.lelli@redhat.com, vincent.guittot@linaro.org, dietmar.eggemann@arm.com, rostedt@goodmis.org, bsegall@google.com, mgorman@suse.de, paulmck@kernel.org, tglx@linutronix.de, linux-mm@kvack.org, linux-kernel@vger.kernel.org, Qian Cai Subject: [PATCH] sched/core: fix illegal RCU from offline CPUs Date: Sun, 12 Jan 2020 11:17:52 -0500 Message-Id: <20200112161752.10492-1-cai@lca.pw> X-Mailer: git-send-email 2.21.0 (Apple Git-122.2) MIME-Version: 1.0 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: In the CPU-offline process, it calls mmdrop() after idle entry and the subsequent call to cpuhp_report_idle_dead(). Once execution passes the call to rcu_report_dead(), RCU is ignoring the CPU, which results in lockdep complaints when mmdrop() uses RCU from either memcg or debugobjects. Fix it by scheduling mmdrop() on another online CPU. ============================= WARNING: suspicious RCU usage ----------------------------- kernel/workqueue.c:710 RCU or wq_pool_mutex should be held! other info that might help us debug this: RCU used illegally from offline CPU! rcu_scheduler_active = 2, debug_locks = 1 2 locks held by swapper/37/0: #0: c0000000010af608 (rcu_read_lock){....}, at: percpu_ref_put_many+0x8/0x230 #1: c0000000010af608 (rcu_read_lock){....}, at: __queue_work+0x7c/0xca0 stack backtrace: Call Trace: dump_stack+0xf4/0x164 (unreliable) lockdep_rcu_suspicious+0x140/0x164 get_work_pool+0x110/0x150 __queue_work+0x1bc/0xca0 queue_work_on+0x114/0x120 css_release+0x9c/0xc0 percpu_ref_put_many+0x204/0x230 free_pcp_prepare+0x264/0x570 free_unref_page+0x38/0xf0 __mmdrop+0x21c/0x2c0 idle_task_exit+0x170/0x1b0 pnv_smp_cpu_kill_self+0x38/0x2e0 cpu_die+0x48/0x64 arch_cpu_idle_dead+0x30/0x50 do_idle+0x2f4/0x470 cpu_startup_entry+0x38/0x40 start_secondary+0x7a8/0xa80 start_secondary_resume+0x10/0x14 ============================= WARNING: suspicious RCU usage ----------------------------- kernel/sched/core.c:562 suspicious rcu_dereference_check() usage! other info that might help us debug this: RCU used illegally from offline CPU! rcu_scheduler_active = 2, debug_locks = 1 2 locks held by swapper/94/0: #0: c000201cc77dc118 (&base->lock){-.-.}, at: lock_timer_base+0x114/0x1f0 #1: c0000000010af608 (rcu_read_lock){....}, at: get_nohz_timer_target+0x3c/0x2d0 stack backtrace: Call Trace: dump_stack+0xf4/0x164 (unreliable) lockdep_rcu_suspicious+0x140/0x164 get_nohz_timer_target+0x248/0x2d0 add_timer+0x24c/0x470 __queue_delayed_work+0x8c/0x110 queue_delayed_work_on+0x128/0x130 __debug_check_no_obj_freed+0x2ec/0x320 free_pcp_prepare+0x1b4/0x570 free_unref_page+0x38/0xf0 __mmdrop+0x21c/0x2c0 idle_task_exit+0x170/0x1b0 pnv_smp_cpu_kill_self+0x38/0x2e0 cpu_die+0x48/0x64 arch_cpu_idle_dead+0x30/0x50 do_idle+0x2f4/0x470 cpu_startup_entry+0x38/0x40 start_secondary+0x7a8/0xa80 start_secondary_prolog+0x10/0x14 Signed-off-by: Qian Cai --- kernel/sched/core.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/kernel/sched/core.c b/kernel/sched/core.c index 90e4b00ace89..41fb49f3dfce 100644 --- a/kernel/sched/core.c +++ b/kernel/sched/core.c @@ -6194,7 +6194,8 @@ void idle_task_exit(void) current->active_mm = &init_mm; finish_arch_post_lock_switch(); } - mmdrop(mm); + smp_call_function_single(cpumask_first(cpu_online_mask), + (void (*)(void *))mmdrop, mm, 0); } /*