All of lore.kernel.org
 help / color / mirror / Atom feed
From: Guenter Roeck <linux@roeck-us.net>
To: Andrew Lunn <andrew@lunn.ch>
Cc: "Vivien Didelot" <vivien.didelot@savoirfairelinux.com>,
	netdev <netdev@vger.kernel.org>,
	"Florian Fainelli" <f.fainelli@gmail.com>,
	"Chris Healy" <cphealy@gmail.com>,
	"Jérome Oufella" <jerome.oufella@savoirfairelinux.com>
Subject: Re: DSA and underlying 802.1Q encapsulation
Date: Wed, 27 May 2015 15:51:59 -0700	[thread overview]
Message-ID: <55664A8F.6040006@roeck-us.net> (raw)
In-Reply-To: <20150527210523.GE31127@lunn.ch>

On 05/27/2015 02:05 PM, Andrew Lunn wrote:
>> Do you have lock debugging enabled in your code ? I am getting a recursive
>> lock warning due to a recursive call to dev_mc_sync(). I think we may have
>> to implement lock nesting for dsa, similar to how it id done for vlan
>> support, but I have not been able to figure out how exactly it works yet.
>
> I might be able to help, since i solve two similar problems already in
> DSA, one for MDIO bus, and a second one for transmit buffers.
>
>       Andrew
>
What I did is to create a vlan interface on one of the dsa slave ports
and enabling it.

This results in a call to dev_mc_sync() on the dsa interface, which is passed
on to the real interface. dev_mc_sync() calls netif_addr_lock_nested(to),
which results in the recursive lock message.

  ifconfig/2291 is trying to acquire lock:
   (_xmit_ETHER/1){+.....}, at: [<ffffffff8175b757>] dev_mc_sync+0x57/0xa0

  but task is already holding lock:
   (_xmit_ETHER/1){+.....}, at: [<ffffffff8175b757>] dev_mc_sync+0x57/0xa0

  other info that might help us debug this:
   Possible unsafe locking scenario:

         CPU0
         ----
    lock(_xmit_ETHER/1);
    lock(_xmit_ETHER/1);

Pretty much inevitable as far as I can see.

Tentative solution would be to implement nesting as in the 802.1q code,
ie similar to vlan_dev_get_lock_subclass() and
	vlan->nest_level = dev_get_nest_level(real_dev, is_vlan_dev) + 1;
but I am not sure on how to set nest_level.
Can we call dev_get_nest_level() with the Ethernet (cpu) interface as
parameter and add 1 ? If so, what should the second parameter evaluate ?
Or is there a better solution ?

Thanks,
Guenter

  reply	other threads:[~2015-05-27 22:52 UTC|newest]

Thread overview: 32+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2015-05-26 22:29 DSA and underlying 802.1Q encapsulation Vivien Didelot
2015-05-26 22:51 ` Guenter Roeck
2015-05-27 20:48   ` Vivien Didelot
2015-05-27 21:02     ` Guenter Roeck
2015-05-27 21:05       ` Andrew Lunn
2015-05-27 22:51         ` Guenter Roeck [this message]
2015-05-28  1:46           ` Andrew Lunn
2015-05-28  5:01             ` Guenter Roeck
2015-05-28 13:44       ` Vivien Didelot
2015-05-28 14:19         ` Guenter Roeck
2015-05-28 21:37           ` [RFC 0/3] DSA and Marvell 88E6352 802.1q support Vivien Didelot
2015-05-28 21:37             ` [RFC 1/3] net: dsa: add basic support for VLAN ndo Vivien Didelot
2015-05-29  4:46               ` Scott Feldman
2015-05-29 15:24               ` Or Gerlitz
2015-05-29 15:38                 ` Vivien Didelot
2015-05-29 15:51                   ` Or Gerlitz
2015-05-29 22:15                     ` Guenter Roeck
2015-05-29 22:57                       ` Vivien Didelot
2015-05-31 16:14                         ` Scott Feldman
2015-05-28 21:37             ` [RFC 2/3] net: dsa: mv88e6xxx: add support for VTU operations Vivien Didelot
2015-05-29 22:38               ` Guenter Roeck
2015-05-28 21:37             ` [RFC 3/3] net: dsa: mv88e6352: add support for VLAN Vivien Didelot
2015-05-29  5:02             ` [RFC 0/3] DSA and Marvell 88E6352 802.1q support Scott Feldman
2015-05-29 15:40               ` Vivien Didelot
2015-05-29 22:42               ` Guenter Roeck
2015-05-31 16:48                 ` Scott Feldman
2015-05-31 17:06                   ` Guenter Roeck
2015-05-31 21:21                     ` Scott Feldman
2015-06-02  0:14                       ` Florian Fainelli
2015-06-02  0:18               ` Vivien Didelot
2015-06-02  6:18                 ` Scott Feldman
2015-06-02 23:23                   ` Vivien Didelot

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=55664A8F.6040006@roeck-us.net \
    --to=linux@roeck-us.net \
    --cc=andrew@lunn.ch \
    --cc=cphealy@gmail.com \
    --cc=f.fainelli@gmail.com \
    --cc=jerome.oufella@savoirfairelinux.com \
    --cc=netdev@vger.kernel.org \
    --cc=vivien.didelot@savoirfairelinux.com \
    /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.