From: Jarek Poplawski <jarkao2@gmail.com>
To: Denys Fedoryshchenko <denys@visp.net.lb>
Cc: netdev@vger.kernel.org, jamal <hadi@cyberus.ca>
Subject: Re: circular locking, mirred, 2.6.24.2
Date: Thu, 6 Mar 2008 13:40:15 +0000 [thread overview]
Message-ID: <20080306134015.GA4571@ff.dom.local> (raw)
In-Reply-To: <20080305103935.M76165@visp.net.lb>
On Wed, Mar 05, 2008 at 12:45:51PM +0200, Denys Fedoryshchenko wrote:
> I did test on vanilla 2.6.25-rc3, on clean Gentoo distro and got
> similar message. The strange thing, message appeared not immediately after
> launching script, but after few seconds.
>
> Scripts is the same. I have same message on another script, used for ppp
> shaper.
>
> [ 10.536424] =======================================================
> [ 10.536424] [ INFO: possible circular locking dependency detected ]
> [ 10.536424] 2.6.25-rc3-devel #3
> [ 10.536424] -------------------------------------------------------
> [ 10.536424] swapper/0 is trying to acquire lock:
> [ 10.536424] (&dev->queue_lock){-+..}, at: [<c0299b4a>]
> dev_queue_xmit+0x175/0x2f3
> [ 10.536424]
> [ 10.536424] but task is already holding lock:
> [ 10.536424] (&p->tcfc_lock){-+..}, at: [<f8a67154>] tcf_mirred+0x20/0x178
> [act_mirred]
> [ 10.536424]
> [ 10.536424] which lock already depends on the new lock.
...
Hi,
I'm not sure this lockdep report is because of this, but there is
really a problem with lock order while using sch_ingress with
act_mirred: dev->queue_lock is taken after dev->ingress_lock, so
reversely to e.g. qdisc_lock_tree(). This shouldn't be a problem
when one of the devices is ifb yet.
Regards,
Jarek P.
Here is a patch for testing:
---
drivers/net/ifb.c | 19 +++++++++++++++++++
1 files changed, 19 insertions(+), 0 deletions(-)
diff --git a/drivers/net/ifb.c b/drivers/net/ifb.c
index 15949d3..2bc71df 100644
--- a/drivers/net/ifb.c
+++ b/drivers/net/ifb.c
@@ -227,6 +227,22 @@ static struct rtnl_link_ops ifb_link_ops __read_mostly = {
module_param(numifbs, int, 0);
MODULE_PARM_DESC(numifbs, "Number of ifb devices");
+#ifdef CONFIG_DEBUG_LOCK_ALLOC
+/*
+ * dev_ifb->queue_lock is usually taken after dev->ingress_lock,
+ * so let's tell lockdep it's different from dev->queue_lock
+ */
+static struct lock_class_key ifb_queue_lock_key;
+static inline void ifb_set_lock_class(spinlock_t *lock)
+{
+ lockdep_set_class(lock, &ifb_queue_lock_key);
+}
+#else
+static inline void ifb_set_lock_class(spinlock_t *lock)
+{
+}
+#endif /* CONFIG_DEBUG_LOCK_ALLOC */
+
static int __init ifb_init_one(int index)
{
struct net_device *dev_ifb;
@@ -246,6 +262,9 @@ static int __init ifb_init_one(int index)
err = register_netdevice(dev_ifb);
if (err < 0)
goto err;
+
+ ifb_set_lock_class(&dev_ifb->queue_lock);
+
return 0;
err:
next prev parent reply other threads:[~2008-03-06 13:38 UTC|newest]
Thread overview: 47+ messages / expand[flat|nested] mbox.gz Atom feed top
2008-02-24 22:20 circular locking, mirred, 2.6.24.2 Denys Fedoryshchenko
2008-02-25 9:56 ` Jarek Poplawski
2008-02-25 10:48 ` Denys Fedoryshchenko
2008-02-25 11:39 ` Jarek Poplawski
2008-03-05 10:45 ` Denys Fedoryshchenko
2008-03-05 13:54 ` [BUG] Probably lockdep bug " Jarek Poplawski
2008-03-06 9:41 ` Jarek Poplawski
2008-03-06 13:40 ` Jarek Poplawski [this message]
2008-03-06 13:57 ` Denys Fedoryshchenko
2008-03-06 14:27 ` jamal
2008-03-06 15:50 ` Denys Fedoryshchenko
2008-03-06 20:25 ` Jarek Poplawski
2008-03-06 20:56 ` jamal
2008-03-06 22:12 ` Jarek Poplawski
2008-03-06 23:43 ` Denys Fedoryshchenko
2008-03-07 0:09 ` jamal
2008-03-07 0:15 ` Denys Fedoryshchenko
2008-03-07 0:25 ` jamal
2008-03-07 9:31 ` Jarek Poplawski
2008-03-07 10:19 ` Denys Fedoryshchenko
2008-03-07 10:48 ` Jarek Poplawski
2008-03-07 14:58 ` jamal
2008-03-06 20:44 ` jamal
2008-03-06 13:59 ` jamal
2008-03-06 17:56 ` Jarek Poplawski
2008-03-06 20:48 ` jamal
2008-03-06 21:40 ` Jarek Poplawski
2008-03-06 23:40 ` jamal
2008-03-07 7:51 ` Jarek Poplawski
2008-03-07 8:32 ` Jarek Poplawski
2008-03-07 13:53 ` jamal
2008-03-08 8:46 ` Jarek Poplawski
2008-03-08 8:58 ` Jarek Poplawski
2008-03-08 9:56 ` Denys Fedoryshchenko
2008-03-08 10:16 ` Denys Fedoryshchenko
2008-03-08 10:43 ` Jarek Poplawski
2008-03-08 10:52 ` Jarek Poplawski
2008-03-08 11:09 ` Denys Fedoryshchenko
2008-03-08 12:02 ` Jarek Poplawski
2008-03-19 0:46 ` Denys Fedoryshchenko
2008-03-19 7:34 ` [PATCH][NET] ifb: set separate lockdep classes for queue locks Jarek Poplawski
2008-03-19 11:34 ` jamal
2008-03-19 12:20 ` Jarek Poplawski
2008-03-20 22:37 ` David Miller
2008-03-21 0:03 ` [PATCH take2][NET] " Jarek Poplawski
2008-03-21 0:05 ` David Miller
2008-03-21 0:15 ` Jarek Poplawski
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=20080306134015.GA4571@ff.dom.local \
--to=jarkao2@gmail.com \
--cc=denys@visp.net.lb \
--cc=hadi@cyberus.ca \
--cc=netdev@vger.kernel.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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).