Thread (5 messages) 5 messages, 4 authors, 2016-09-20

Re: DSA: Suspicious RCU usage (via rtnl_bridge_getlink)

flat view

From: Russell King - ARM Linux <linux@armlinux.org.uk>
Date: 2016-09-20 14:29:10

On Tue, Sep 20, 2016 at 03:38:33PM +0200, Andrew Lunn wrote:
On Tue, Sep 20, 2016 at 11:26:12AM +0100, Russell King - ARM Linux wrote:
quoted
Issuing "bridge vlan show" on clearfog provokes a "suspicious RCU usage"
warning from the kernel (see below).

As it's illegal to schedule while holding the RCU read lock, there's the
possibility for this happening much earlier in the call sequence -
mv88e6xxx_port_vlan_dump() takes a mutex, and if that mutex were already
held, we'd schedule at that point.  The RCU read lock was taken by
rtnl_bridge_getlink().

It looks horrible to fix - mvmdio.c as well as DSA locking are involved.
Hi Russell

I would say this needs fixing higher up, in the bridge code. DSA has
to be able to sleep, since the switch can be on any arbitrary bus,
MDIO, SPI, etc. This will affect pure switchdev devices as well, since
they often need to send a request to the switch and wait for a reply.
Hmm, okay, so looking around, other rtnl operations in there just
use for_each_netdev() or for_each_netdev_safe() without taking
any locks, apart from the rtnl mutex which we can see was already
taken.

Why does rtnl_bridge_getlink use RCU?  Can we drop the RCU read lock
and switch to using for_each_netdev() here?  Adding Dave and Eric,
as I guess they're more knowledgeable of the core rtnl code.

-- 
RMK's Patch system: http://www.armlinux.org.uk/developer/patches/
FTTC broadband for 0.8mile line: currently at 9.6Mbps down 400kbps up
according to speedtest.net.
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help