Received: by 2002:ac0:a5b6:0:0:0:0:0 with SMTP id m51-v6csp3922882imm; Tue, 29 May 2018 17:08:29 -0700 (PDT) X-Google-Smtp-Source: ADUXVKKC0GSCL1gZ5vsIj9eMGWF7HdneXx31UZmeXwo7lU8yaiVyZzQ6mjnCYY6KA2xQj3ZeY6B9 X-Received: by 2002:a17:902:b410:: with SMTP id x16-v6mr522339plr.324.1527638909001; Tue, 29 May 2018 17:08:29 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1527638908; cv=none; d=google.com; s=arc-20160816; b=KrfOxnqkMkjaLWRiFrTuNQ5SK+1E/6wPF/XR0WvrfW+D3yysrGyyHfypy/pFoFA8Xe PN6SZtmg72ZOU7/samWbxkU0wg0CwaLFqZ+JotuwB5FDhcq5R1AgK+52hAha1QgmeIH8 Ly9hSh5Ea/t2cGWtnVHqlk2jp7Wd1mhLDNtbQFNxybHPniR5+x1FEJICkP3Bi64K34lG 0PWBSszSvUWH/CCBGibqh+9gbnQGg7o6Jr0D25Rg9jUf/flxQU/WQllm5lvIbJgS5YcW ItKi2mwLhUlsxYEe+xxMG1Wgwskwz2RikJzr92RYYgo3LtdbogxvL4SLhTNTWFXJI/Zs 2Kbw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:references:in-reply-to:message-id:date :subject:cc:to:from:dkim-signature:arc-authentication-results; bh=JwxwcAPWwnBlYHc59c7Ee8T5mpLOyXsJtUYjzMM323A=; b=EqPJeFEoYF+PCX6ClUbZu/CinJjeNWMe8kPvB1BA5vwn6hz0QZEFJSrM0Wk7x5vIEu hlMwDTyPFV8r25aw90Uk8CqdnoPthNK7hhLvPndlqiMMm8cv8hOp/5xWq9i3k0jNBQsF kS8IimyzjDT0DIpt7R1apnDEH4VB5wRVvNIehsN9X7FvVulZRLmeOFOZPwXuScxLZdoe p1X1Hm4wOuyoWPWl9giPgUFAswXTn0gXaqvWGcdaDHoqKNSjqbsFTGSJrIv0pO0TY0Ic WsepnLF+7depxFz8HXeescJeaprXoImI/in38UY3rBpmcu/KlmUa4bpo0xg8Xjch/m0R hs7w== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@google.com header.s=20161025 header.b=IDOr40kS; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=google.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id t13-v6si35120988pfc.333.2018.05.29.17.08.15; Tue, 29 May 2018 17:08:28 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; dkim=pass header.i=@google.com header.s=20161025 header.b=IDOr40kS; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=google.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1755381AbeE3AG7 (ORCPT + 99 others); Tue, 29 May 2018 20:06:59 -0400 Received: from mail-pl0-f68.google.com ([209.85.160.68]:38008 "EHLO mail-pl0-f68.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1755191AbeE3AFN (ORCPT ); Tue, 29 May 2018 20:05:13 -0400 Received: by mail-pl0-f68.google.com with SMTP id c11-v6so9904424plr.5 for ; Tue, 29 May 2018 17:05:13 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=JwxwcAPWwnBlYHc59c7Ee8T5mpLOyXsJtUYjzMM323A=; b=IDOr40kS5sqtwd+xbMBbBRk1bt8f//rpJl0B2dYUob3+S4dKkMnrnZ1EpMLamRWwEx msm4jO9nozrSixEFG8+vt8lhBSyaTBblCU3D/f600GncHODPUdyPoy+BdAm8kHPi9n80 cNxYLxi5Q4dg2q0nv8UumBGLjB+cZ9EO0S8C9mGXdCOqbubtDJFtR1oEoKHmaGK54wdq zbuqI7V1fxpvRVqyguCTW+mDcq/Z1HpxTbFjBBNsd9b1LRnaE1zkQAaLdMsqOZ+EjUwl rYmlS9PTvjxkI7Dvq3IXXJZMLGWUsmGF15W+AeAlRvCyhZjXfVONqooMbue93RD+uY0r U5/w== 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:in-reply-to :references; bh=JwxwcAPWwnBlYHc59c7Ee8T5mpLOyXsJtUYjzMM323A=; b=CspNQVMV9Jpm/fuNhomF0Caj0Er7/7eCYPWDMwYgXEfP/P3tR9XqMQDBiiaEcvrP5A ml8jRDHzTom3VcJjzieKrSyAp+pG2qJUAQoemN0Ll8b2YUFL9o0EoQf0rkgYkIhaBckD GXl6cgXMBXPoJ9EjMKJ1fuJf1xNfIfhN2gRatCMBhluLylVmqAT+7xs2ejAPvv37XjKx 9wp1Rnd0diAEwX8JxAKB3g2aOhXjBqGRz6t6AvlxG2A075A6iRqhfv41MqmueFM2hzBu rS6gTMQUGCVYsMEZaJzsC5B/00OovG84fVE8xshFb7Ijm/hsEwf2r9PWNb+vjBivK1VM SXXQ== X-Gm-Message-State: ALKqPwfTWnjJ90cfKzk5zNhChtxOJrvQ6Qv4Tzd342ShYcc2Qw/Kpf8J Wx4Qrus+RvoPmIVC6+urcM2lvJIi/XA= X-Received: by 2002:a17:902:b701:: with SMTP id d1-v6mr510826pls.121.1527638712022; Tue, 29 May 2018 17:05:12 -0700 (PDT) Received: from joelaf.mtv.corp.google.com ([2620:0:1000:1600:3122:ea9c:d178:eb]) by smtp.gmail.com with ESMTPSA id w12-v6sm86979211pfi.158.2018.05.29.17.05.10 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Tue, 29 May 2018 17:05:11 -0700 (PDT) From: Joel Fernandes X-Google-Original-From: Joel Fernandes To: linux-kernel@vger.kernel.org Cc: kernel-team@android.com, "Joel Fernandes (Google)" , stable@vger.kernel.org, Boqun Feng , Byungchul Park , Erick Reyes , Ingo Molnar , Julia Cartwright , linux-kselftest@vger.kernel.org, Masami Hiramatsu , Mathieu Desnoyers , Namhyung Kim , Paul McKenney , Peter Zijlstra , Shuah Khan , Steven Rostedt , Thomas Glexiner , Todd Kjos , Tom Zanussi Subject: [PATCH v8 1/8] softirq: reorder trace_softirqs_on to prevent lockdep splat Date: Tue, 29 May 2018 17:04:53 -0700 Message-Id: <20180530000500.257225-2-joel@joelfernandes.org> X-Mailer: git-send-email 2.17.0.921.gf22659ad46-goog In-Reply-To: <20180530000500.257225-1-joel@joelfernandes.org> References: <20180530000500.257225-1-joel@joelfernandes.org> Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: "Joel Fernandes (Google)" I'm able to reproduce a lockdep splat with config options: CONFIG_PROVE_LOCKING=y, CONFIG_DEBUG_LOCK_ALLOC=y and CONFIG_PREEMPTIRQ_EVENTS=y $ echo 1 > /d/tracing/events/preemptirq/preempt_enable/enable [ 26.112609] DEBUG_LOCKS_WARN_ON(current->softirqs_enabled) [ 26.112636] WARNING: CPU: 0 PID: 118 at kernel/locking/lockdep.c:3854 [...] [ 26.144229] Call Trace: [ 26.144926] [ 26.145506] lock_acquire+0x55/0x1b0 [ 26.146499] ? __do_softirq+0x46f/0x4d9 [ 26.147571] ? __do_softirq+0x46f/0x4d9 [ 26.148646] trace_preempt_on+0x8f/0x240 [ 26.149744] ? trace_preempt_on+0x4d/0x240 [ 26.150862] ? __do_softirq+0x46f/0x4d9 [ 26.151930] preempt_count_sub+0x18a/0x1a0 [ 26.152985] __do_softirq+0x46f/0x4d9 [ 26.153937] irq_exit+0x68/0xe0 [ 26.154755] smp_apic_timer_interrupt+0x271/0x280 [ 26.156056] apic_timer_interrupt+0xf/0x20 [ 26.157105] The issue was this: preempt_count = 1 << SOFTIRQ_SHIFT __local_bh_enable(cnt = 1 << SOFTIRQ_SHIFT) { if (softirq_count() == (cnt && SOFTIRQ_MASK)) { trace_softirqs_on() { current->softirqs_enabled = 1; } } preempt_count_sub(cnt) { trace_preempt_on() { tracepoint() { rcu_read_lock_sched() { // jumps into lockdep Where preempt_count still has softirqs disabled, but current->softirqs_enabled is true, and we get a splat. Cc: stable@vger.kernel.org Reviewed-by: Steven Rostedt (VMware) Fixes: d59158162e032 ("tracing: Add support for preempt and irq enable/disable events") Signed-off-by: Joel Fernandes (Google) --- kernel/softirq.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/kernel/softirq.c b/kernel/softirq.c index 177de3640c78..8a040bcaa033 100644 --- a/kernel/softirq.c +++ b/kernel/softirq.c @@ -139,9 +139,13 @@ static void __local_bh_enable(unsigned int cnt) { lockdep_assert_irqs_disabled(); + if (preempt_count() == cnt) + trace_preempt_on(CALLER_ADDR0, get_lock_parent_ip()); + if (softirq_count() == (cnt & SOFTIRQ_MASK)) trace_softirqs_on(_RET_IP_); - preempt_count_sub(cnt); + + __preempt_count_sub(cnt); } /* -- 2.17.0.921.gf22659ad46-goog