From: Sebastian Hesselbarth <sebastian.hesselbarth@xxxxxxxxx>[...]
Date: Wed, 12 Mar 2014 00:02:55 +0100
[...]To fix this, always zero relevant fields of struct ethtool_wolinfo
regardless of .get_wol callback availability.
I'm starting to see this situation more clearly now, especially with[...]
Ben's most recent commentary.
The basic notion is that one must do ethtool ops are designed such that
the top-level execution context in net/core/ethtool.c takes care of
initializing the structure.
In this case, we're referring specifically to ethtool_get_wol(), which
runs any time ETHTOOL_GWOL is requested.
Therefore no ethtool_ops->get_wol() implementation should duplicate
this work, that goes for all of such cases which invoke the function
we are talking about here, phy_ethtool_get_wol().
So the first change is definitely to remove:
wol->supported = 0;
wol->wolopts = 0;
from:
drivers/net/ethernet/marvell/mv643xx_eth.c:mv643xx_eth_get_wol()
drivers/net/ethernet/ti/cpsw.c:cpsw_get_wol()
Finally, purge the spurious clears in phydev_ops->get_wol(), namely
in at803x_get_wol() and m88e1318_get_wol().
So, to reiterate, OPS never have to be mindful of initializing the
ethtool result with zeros. However, anyone who calls into OPS
directly must provide said expected state.