aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net/myri10ge/myri10ge.c
diff options
context:
space:
mode:
authorBen Hutchings <bhutchings@solarflare.com>2010-06-29 22:44:32 -0400
committerDavid S. Miller <davem@davemloft.net>2010-06-30 17:09:35 -0400
commit1437ce3983bcbc0447a0dedcd644c14fe833d266 (patch)
tree073ba0dc60127b08b65fbcca4d0d7c15318c08f8 /drivers/net/myri10ge/myri10ge.c
parentb3003be36a3c9215cd17182349981581de269048 (diff)
ethtool: Change ethtool_op_set_flags to validate flags
ethtool_op_set_flags() does not check for unsupported flags, and has no way of doing so. This means it is not suitable for use as a default implementation of ethtool_ops::set_flags. Add a 'supported' parameter specifying the flags that the driver and hardware support, validate the requested flags against this, and change all current callers to pass this parameter. Change some other trivial implementations of ethtool_ops::set_flags to call ethtool_op_set_flags(). Signed-off-by: Ben Hutchings <bhutchings@solarflare.com> Reviewed-by: Stanislaw Gruszka <sgruszka@redhat.com> Acked-by: Jeff Garzik <jgarzik@redhat.com> Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'drivers/net/myri10ge/myri10ge.c')
-rw-r--r--drivers/net/myri10ge/myri10ge.c10
1 files changed, 7 insertions, 3 deletions
diff --git a/drivers/net/myri10ge/myri10ge.c b/drivers/net/myri10ge/myri10ge.c
index e0b47cc8a86e..d771d1650d60 100644
--- a/drivers/net/myri10ge/myri10ge.c
+++ b/drivers/net/myri10ge/myri10ge.c
@@ -1730,8 +1730,7 @@ static int myri10ge_set_rx_csum(struct net_device *netdev, u32 csum_enabled)
1730 if (csum_enabled) 1730 if (csum_enabled)
1731 mgp->csum_flag = MXGEFW_FLAGS_CKSUM; 1731 mgp->csum_flag = MXGEFW_FLAGS_CKSUM;
1732 else { 1732 else {
1733 u32 flags = ethtool_op_get_flags(netdev); 1733 netdev->features &= ~NETIF_F_LRO;
1734 err = ethtool_op_set_flags(netdev, (flags & ~ETH_FLAG_LRO));
1735 mgp->csum_flag = 0; 1734 mgp->csum_flag = 0;
1736 1735
1737 } 1736 }
@@ -1900,6 +1899,11 @@ static u32 myri10ge_get_msglevel(struct net_device *netdev)
1900 return mgp->msg_enable; 1899 return mgp->msg_enable;
1901} 1900}
1902 1901
1902static int myri10ge_set_flags(struct net_device *netdev, u32 value)
1903{
1904 return ethtool_op_set_flags(netdev, value, ETH_FLAG_LRO);
1905}
1906
1903static const struct ethtool_ops myri10ge_ethtool_ops = { 1907static const struct ethtool_ops myri10ge_ethtool_ops = {
1904 .get_settings = myri10ge_get_settings, 1908 .get_settings = myri10ge_get_settings,
1905 .get_drvinfo = myri10ge_get_drvinfo, 1909 .get_drvinfo = myri10ge_get_drvinfo,
@@ -1920,7 +1924,7 @@ static const struct ethtool_ops myri10ge_ethtool_ops = {
1920 .set_msglevel = myri10ge_set_msglevel, 1924 .set_msglevel = myri10ge_set_msglevel,
1921 .get_msglevel = myri10ge_get_msglevel, 1925 .get_msglevel = myri10ge_get_msglevel,
1922 .get_flags = ethtool_op_get_flags, 1926 .get_flags = ethtool_op_get_flags,
1923 .set_flags = ethtool_op_set_flags 1927 .set_flags = myri10ge_set_flags
1924}; 1928};
1925 1929
1926static int myri10ge_allocate_rings(struct myri10ge_slice_state *ss) 1930static int myri10ge_allocate_rings(struct myri10ge_slice_state *ss)