qlge: Fix netdev features configuration.
qlge_fix_features() is not supposed to modify hardware or driver state, rather it is supposed to only fix requested fetures bits. Currently qlge_fix_features() also goes for interface down and up unnecessarily if there is not even any change in features set. This patch changes/fixes following - 1) Move reload of interface or device re-config from qlge_fix_features() to qlge_set_features(). 2) Reload of interface in qlge_set_features() only if relevant feature bit (NETIF_F_HW_VLAN_CTAG_RX) is changed. 3) Get rid of qlge_fix_features() since driver is not really required to fix any features bit. Signed-off-by: Manish <manish.chopra@cavium.com> Reviewed-by: Benjamin Poirier <bpoirier@suse.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
0da70f8080
commit
6750c87074
|
@ -2384,26 +2384,20 @@ static int qlge_update_hw_vlan_features(struct net_device *ndev,
|
||||||
return status;
|
return status;
|
||||||
}
|
}
|
||||||
|
|
||||||
static netdev_features_t qlge_fix_features(struct net_device *ndev,
|
|
||||||
netdev_features_t features)
|
|
||||||
{
|
|
||||||
int err;
|
|
||||||
|
|
||||||
/* Update the behavior of vlan accel in the adapter */
|
|
||||||
err = qlge_update_hw_vlan_features(ndev, features);
|
|
||||||
if (err)
|
|
||||||
return err;
|
|
||||||
|
|
||||||
return features;
|
|
||||||
}
|
|
||||||
|
|
||||||
static int qlge_set_features(struct net_device *ndev,
|
static int qlge_set_features(struct net_device *ndev,
|
||||||
netdev_features_t features)
|
netdev_features_t features)
|
||||||
{
|
{
|
||||||
netdev_features_t changed = ndev->features ^ features;
|
netdev_features_t changed = ndev->features ^ features;
|
||||||
|
int err;
|
||||||
|
|
||||||
|
if (changed & NETIF_F_HW_VLAN_CTAG_RX) {
|
||||||
|
/* Update the behavior of vlan accel in the adapter */
|
||||||
|
err = qlge_update_hw_vlan_features(ndev, features);
|
||||||
|
if (err)
|
||||||
|
return err;
|
||||||
|
|
||||||
if (changed & NETIF_F_HW_VLAN_CTAG_RX)
|
|
||||||
qlge_vlan_mode(ndev, features);
|
qlge_vlan_mode(ndev, features);
|
||||||
|
}
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
@ -4719,7 +4713,6 @@ static const struct net_device_ops qlge_netdev_ops = {
|
||||||
.ndo_set_mac_address = qlge_set_mac_address,
|
.ndo_set_mac_address = qlge_set_mac_address,
|
||||||
.ndo_validate_addr = eth_validate_addr,
|
.ndo_validate_addr = eth_validate_addr,
|
||||||
.ndo_tx_timeout = qlge_tx_timeout,
|
.ndo_tx_timeout = qlge_tx_timeout,
|
||||||
.ndo_fix_features = qlge_fix_features,
|
|
||||||
.ndo_set_features = qlge_set_features,
|
.ndo_set_features = qlge_set_features,
|
||||||
.ndo_vlan_rx_add_vid = qlge_vlan_rx_add_vid,
|
.ndo_vlan_rx_add_vid = qlge_vlan_rx_add_vid,
|
||||||
.ndo_vlan_rx_kill_vid = qlge_vlan_rx_kill_vid,
|
.ndo_vlan_rx_kill_vid = qlge_vlan_rx_kill_vid,
|
||||||
|
|
Loading…
Reference in New Issue