ethtool: Change ETHTOOL_PHYS_ID implementation to allow dropping RTNL
commit68f512f21a64c9b264df6c61a9333e7890faf74b
authorBen Hutchings <bhutchings@solarflare.com>
Fri, 1 Apr 2011 23:35:15 +0000 (2 00:35 +0100)
committerBen Hutchings <bhutchings@solarflare.com>
Tue, 5 Apr 2011 14:12:01 +0000 (5 15:12 +0100)
tree4635193aaec903f09ae69df4dc880296d74c5135
parent8717d07b1143e0f150921f5bd7cfe7af579a995a
ethtool: Change ETHTOOL_PHYS_ID implementation to allow dropping RTNL

The ethtool ETHTOOL_PHYS_ID command runs for an arbitrarily long
period of time, holding the RTNL lock.  This blocks routing updates,
device enumeration, and various important operations that one might
want to keep running while hunting for the flashing LED.

We need to drop the RTNL lock during this operation, but currently the
core implementation is a thin wrapper around a driver operation and
drivers may well depend upon holding the lock.

Define a new driver operation 'set_phys_id' with an argument that sets
the ID indicator on/off/inactive/active (the last optional, for any
driver or firmware that prefers to handle blinking asynchronously).
When this is defined, the ethtool core drops the lock while waiting
and only acquires it around calls to this operation.

Deprecate the 'phys_id' operation in favour of this.  It can be
removed once all in-tree drivers are converted.

Signed-off-by: Ben Hutchings <bhutchings@solarflare.com>
include/linux/ethtool.h
net/core/ethtool.c