mirror of
https://github.com/Fishwaldo/Star64_linux.git
synced 2025-07-23 07:12:09 +00:00
net: consolidate and fix ethtool_ops->get_settings calling
This patch does several things: - introduces __ethtool_get_settings which is called from ethtool code and from drivers as well. Put ASSERT_RTNL there. - dev_ethtool_get_settings() is replaced by __ethtool_get_settings() - changes calling in drivers so rtnl locking is respected. In iboe_get_rate was previously ->get_settings() called unlocked. This fixes it. Also prb_calc_retire_blk_tmo() in af_packet.c had the same problem. Also fixed by calling __dev_get_by_index() instead of dev_get_by_index() and holding rtnl_lock for both calls. - introduces rtnl_lock in bnx2fc_vport_create() and fcoe_vport_create() so bnx2fc_if_create() and fcoe_if_create() are called locked as they are from other places. - use __ethtool_get_settings() in bonding code Signed-off-by: Jiri Pirko <jpirko@redhat.com> v2->v3: -removed dev_ethtool_get_settings() -added ASSERT_RTNL into __ethtool_get_settings() -prb_calc_retire_blk_tmo - use __dev_get_by_index() and lock around it and __ethtool_get_settings() call v1->v2: add missing export_symbol Reviewed-by: Ben Hutchings <bhutchings@solarflare.com> [except FCoE bits] Acked-by: Ralf Baechle <ralf@linux-mips.org> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
c5dac7c998
commit
4bc71cb983
14 changed files with 69 additions and 74 deletions
|
@ -530,33 +530,35 @@ static int prb_calc_retire_blk_tmo(struct packet_sock *po,
|
|||
{
|
||||
struct net_device *dev;
|
||||
unsigned int mbits = 0, msec = 0, div = 0, tmo = 0;
|
||||
struct ethtool_cmd ecmd;
|
||||
int err;
|
||||
|
||||
dev = dev_get_by_index(sock_net(&po->sk), po->ifindex);
|
||||
if (unlikely(dev == NULL))
|
||||
rtnl_lock();
|
||||
dev = __dev_get_by_index(sock_net(&po->sk), po->ifindex);
|
||||
if (unlikely(!dev)) {
|
||||
rtnl_unlock();
|
||||
return DEFAULT_PRB_RETIRE_TOV;
|
||||
|
||||
if (dev->ethtool_ops && dev->ethtool_ops->get_settings) {
|
||||
struct ethtool_cmd ecmd = { .cmd = ETHTOOL_GSET, };
|
||||
|
||||
if (!dev->ethtool_ops->get_settings(dev, &ecmd)) {
|
||||
switch (ecmd.speed) {
|
||||
case SPEED_10000:
|
||||
msec = 1;
|
||||
div = 10000/1000;
|
||||
break;
|
||||
case SPEED_1000:
|
||||
msec = 1;
|
||||
div = 1000/1000;
|
||||
break;
|
||||
/*
|
||||
* If the link speed is so slow you don't really
|
||||
* need to worry about perf anyways
|
||||
*/
|
||||
case SPEED_100:
|
||||
case SPEED_10:
|
||||
default:
|
||||
return DEFAULT_PRB_RETIRE_TOV;
|
||||
}
|
||||
}
|
||||
err = __ethtool_get_settings(dev, &ecmd);
|
||||
rtnl_unlock();
|
||||
if (!err) {
|
||||
switch (ecmd.speed) {
|
||||
case SPEED_10000:
|
||||
msec = 1;
|
||||
div = 10000/1000;
|
||||
break;
|
||||
case SPEED_1000:
|
||||
msec = 1;
|
||||
div = 1000/1000;
|
||||
break;
|
||||
/*
|
||||
* If the link speed is so slow you don't really
|
||||
* need to worry about perf anyways
|
||||
*/
|
||||
case SPEED_100:
|
||||
case SPEED_10:
|
||||
default:
|
||||
return DEFAULT_PRB_RETIRE_TOV;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue