netxen: enable LRO based on NETIF_F_LRO
o Enable/disable LRO in device based on NETIF_F_LRO flag, instead of using driver private flag. o Disable LRO, if rx csum offloading is off. David Miller, You should use netdev_info() instead of dev_info(). Signed-off-by: Sucheta Chakraborty <sucheta.chakraborty@qlogic.com> Signed-off-by: Amit Kumar Salecha <amit.salecha@qlogic.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:

committed by
David S. Miller

parent
0cf445ceaf
commit
e4baaf7198
@@ -720,7 +720,21 @@ static u32 netxen_nic_get_rx_csum(struct net_device *dev)
|
||||
static int netxen_nic_set_rx_csum(struct net_device *dev, u32 data)
|
||||
{
|
||||
struct netxen_adapter *adapter = netdev_priv(dev);
|
||||
adapter->rx_csum = !!data;
|
||||
|
||||
if (data) {
|
||||
adapter->rx_csum = data;
|
||||
return 0;
|
||||
}
|
||||
|
||||
if (dev->features & NETIF_F_LRO) {
|
||||
if (netxen_config_hw_lro(adapter, NETXEN_NIC_LRO_DISABLED))
|
||||
return -EIO;
|
||||
|
||||
dev->features &= ~NETIF_F_LRO;
|
||||
netxen_send_lro_cleanup(adapter);
|
||||
netdev_info(dev, "disabling LRO as rx_csum is off\n");
|
||||
}
|
||||
adapter->rx_csum = data;
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -893,11 +907,19 @@ static int netxen_nic_set_flags(struct net_device *netdev, u32 data)
|
||||
if (!(adapter->capabilities & NX_FW_CAPABILITY_HW_LRO))
|
||||
return -EINVAL;
|
||||
|
||||
if (!adapter->rx_csum) {
|
||||
netdev_info(netdev, "rx csum is off, cannot toggle LRO\n");
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
if (!!(data & ETH_FLAG_LRO) == !!(netdev->features & NETIF_F_LRO))
|
||||
return 0;
|
||||
|
||||
if (data & ETH_FLAG_LRO) {
|
||||
hw_lro = NETXEN_NIC_LRO_ENABLED;
|
||||
netdev->features |= NETIF_F_LRO;
|
||||
} else {
|
||||
hw_lro = 0;
|
||||
hw_lro = NETXEN_NIC_LRO_DISABLED;
|
||||
netdev->features &= ~NETIF_F_LRO;
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user