All of lore.kernel.org
 help / color / mirror / Atom feed
From: Daniel Wagner <daniel.wagner@bmw-carit.de>
To: Steven Rostedt <rostedt@goodmis.org>,
	Ingo Molnar <mingo@redhat.com>,
	Peter Zijlstra <peterz@infradead.org>
Cc: "linux-kernel@vger.kernel.org" <linux-kernel@vger.kernel.org>
Subject: Re: lockdep warning: threadirqs and preemptoff tracer
Date: Tue, 26 May 2015 13:52:02 +0200	[thread overview]
Message-ID: <55645E62.2070507@bmw-carit.de> (raw)
In-Reply-To: <555C49D8.8030009@bmw-carit.de>

On 05/20/2015 10:46 AM, Daniel Wagner wrote:
> [  206.610079] ------------[ cut here ]------------
> [  206.610122] WARNING: CPU: 0 PID: 3 at kernel/locking/lockdep.c:3574 check_flags.part.36+0x1bc/0x210()
> [  206.610166] DEBUG_LOCKS_WARN_ON(current->softirqs_enabled)
> [  206.610192] Modules linked in:
> [  206.610224]  x86_pkg_temp_thermal coretemp kvm_intel kvm crct10dif_pclmul crc32_pclmul crc32c_intel ghash_clmulni_intel iTCO_wdt iTCO_vendor_support ipmi_devintf dcdbas joydev tpm_tis pcspkr acpi_pad ipmi_si ipmi_msghandler acpi_power_meter wmi mei_me tpm sb_edac shpchp edac_core mei lpc_ich mfd_core nfsd auth_rpcgss nfs_acl lockd grace sunrpc xfs libcrc32c mgag200 drm_kms_helper ttm drm ixgbe igb mdio vxlan ip6_udp_tunnel udp_tunnel megaraid_sas ptp pps_core dca i2c_algo_bit
> [  206.610892] CPU: 0 PID: 3 Comm: ksoftirqd/0 Not tainted 4.1.0-rc4 #99
> [  206.610952] Hardware name: Dell Inc. PowerEdge R820/066N7P, BIOS 2.0.20 01/16/2014
> [  206.611021]  ffffffff8186e017 000000005a61066b ffff881fb11d3b28 ffffffff8186e017
> [  206.611118]  0000000000000000 ffff881fb11d3b80 ffff881fb11d3b68 ffffffff810af8fa
> [  206.611211]  ffff881fb11d3b88 ffffffff81e6cb58 0000000000000000 0000000000000000
> [  206.611302] Call Trace:
> [  206.611338]  [<ffffffff8186e017>] ? dump_stack+0x4f/0x7b
> [  206.611392]  [<ffffffff8186e017>] dump_stack+0x4f/0x7b
> [  206.611448]  [<ffffffff810af8fa>] warn_slowpath_common+0x8a/0xc0
> [  206.611507]  [<ffffffff810af985>] warn_slowpath_fmt+0x55/0x70
> [  206.611565]  [<ffffffff810af935>] ? warn_slowpath_fmt+0x5/0x70
> [  206.611623]  [<ffffffff811126fc>] check_flags.part.36+0x1bc/0x210
> [  206.611682]  [<ffffffff81113479>] lock_acquire+0x199/0x2d0
> [  206.611738]  [<ffffffff8187920b>] ? _raw_spin_lock_irqsave+0x2b/0xa0
> [  206.611800]  [<ffffffff810e5925>] ? preempt_count_add+0x5/0xc0
> [  206.611860]  [<ffffffff81879239>] _raw_spin_lock_irqsave+0x59/0xa0
> [  206.611922]  [<ffffffff811b773e>] ? check_critical_timing+0xae/0x170
> [  206.611982]  [<ffffffff818791e5>] ? _raw_spin_lock_irqsave+0x5/0xa0
> [  206.612043]  [<ffffffff811b773e>] check_critical_timing+0xae/0x170
> [  206.612102]  [<ffffffff810b606c>] ? __do_softirq+0x24c/0x6b0
> [  206.612158]  [<ffffffff810b434b>] ? __local_bh_enable+0x3b/0x70
> [  206.612213]  [<ffffffff810b606c>] ? __do_softirq+0x24c/0x6b0
> [  206.612266]  [<ffffffff810b434b>] ? __local_bh_enable+0x3b/0x70
> [  206.612322]  [<ffffffff811b8401>] trace_preempt_on+0x101/0x120
> [  206.612376]  [<ffffffff810e59e5>] ? preempt_count_sub+0x5/0xf0
> [  206.612431]  [<ffffffff810e5a8b>] preempt_count_sub+0xab/0xf0
> [  206.612485]  [<ffffffff810b434b>] ? __local_bh_enable+0x3b/0x70
> [  206.612540]  [<ffffffff810b434b>] __local_bh_enable+0x3b/0x70
> [  206.612595]  [<ffffffff810b606c>] ? __do_softirq+0x24c/0x6b0
> [  206.612649]  [<ffffffff810b606c>] __do_softirq+0x24c/0x6b0
> [  206.612703]  [<ffffffff810b64f5>] run_ksoftirqd+0x25/0x70
> [  206.614370]  [<ffffffff810db453>] smpboot_thread_fn+0x193/0x2a0
> [  206.616013]  [<ffffffff810db2c0>] ? sort_range+0x30/0x30
> [  206.616948]  [<ffffffff810d71f4>] kthread+0x104/0x120
> [  206.617733]  [<ffffffff81873293>] ? wait_for_completion+0xd3/0x140
> [  206.618512]  [<ffffffff810d70f0>] ? kthread_create_on_node+0x260/0x260
> [  206.619281]  [<ffffffff818798a2>] ret_from_fork+0x42/0x70
> [  206.620054]  [<ffffffff810d70f0>] ? kthread_create_on_node+0x260/0x260
> [  206.620831] ---[ end trace 9e22068fb8699756 ]---
> [  206.621607] irq event stamp: 636192
> [  206.622362] hardirqs last  enabled at (636190): [<ffffffff818787e5>] _raw_spin_unlock_irqrestore+0x65/0x90
> [  206.623140] hardirqs last disabled at (636191): [<ffffffff810b5ffe>] __do_softirq+0x1de/0x6b0
> [  206.623904] softirqs last  enabled at (636192): [<ffffffff810b606c>] __do_softirq+0x24c/0x6b0
> [  206.624653] softirqs last disabled at (635925): [<ffffffff810b64f5>] run_ksoftirqd+0x25/0x70

I starred for a while at the code and saw the comment in
__local_bh_disable_ip():

	/*
	 * The preempt tracer hooks into preempt_count_add and will break
	 * lockdep because it calls back into lockdep after SOFTIRQ_OFFSET
	 * is set and before current->softirq_enabled is cleared.
	 * We must manually increment preempt_count here and manually
	 * call the trace_preempt_off later.
	 */

>From this I figured this might be the same problem just in the
enable path. The below patch made the lockdep warning disappear.
Though I am not sure what I breaking with this.


diff --git a/kernel/softirq.c b/kernel/softirq.c
index 479e443..6fc0449 100644
--- a/kernel/softirq.c
+++ b/kernel/softirq.c
@@ -128,9 +128,13 @@ static void __local_bh_enable(unsigned int cnt)
 {
 	WARN_ON_ONCE(!irqs_disabled());
 
+	if (preempt_count() == cnt)
+		trace_preempt_on(CALLER_ADDR0, get_parent_ip(CALLER_ADDR1));
+
 	if (softirq_count() == (cnt & SOFTIRQ_MASK))
 		trace_softirqs_on(_RET_IP_);
-	preempt_count_sub(cnt);
+
+	__preempt_count_sub(cnt);
 }
 
 /*


cheers,
daniel

  reply	other threads:[~2015-05-26 13:06 UTC|newest]

Thread overview: 7+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2015-05-20  8:46 lockdep warning: threadirqs and preemptoff tracer Daniel Wagner
2015-05-26 11:52 ` Daniel Wagner [this message]
2015-05-26 12:32   ` Steven Rostedt
2015-05-26 12:51     ` Daniel Wagner
2015-05-26 13:04       ` Steven Rostedt
2015-05-28  9:09         ` [PATCH v0] softirq: Call trace_preempt_on manually to prevent lockdep splatter Daniel Wagner
2015-06-02 19:37           ` Thomas Gleixner

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=55645E62.2070507@bmw-carit.de \
    --to=daniel.wagner@bmw-carit.de \
    --cc=linux-kernel@vger.kernel.org \
    --cc=mingo@redhat.com \
    --cc=peterz@infradead.org \
    --cc=rostedt@goodmis.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.