Messages in this thread | | | Date | Thu, 19 Oct 2023 11:05:10 +0200 | From | Michal Kubecek <> | Subject | Re: [PATCH net v1 1/1] ethtool: fix clearing of WoL flags |
| |
On Thu, Oct 19, 2023 at 09:09:04AM +0200, Oleksij Rempel wrote: > With current kernel it is possible to set flags, but not possible to remove > existing WoL flags. For example: > ~$ ethtool lan2 > ... > Supports Wake-on: pg > Wake-on: d > ... > ~$ ethtool -s lan2 wol gp > ~$ ethtool lan2 > ... > Wake-on: pg > ... > ~$ ethtool -s lan2 wol d > ~$ ethtool lan2 > ... > Wake-on: pg > ... > > This patch makes it work as expected > > Signed-off-by: Oleksij Rempel <o.rempel@pengutronix.de> > --- > net/ethtool/wol.c | 8 +++++--- > 1 file changed, 5 insertions(+), 3 deletions(-) > > diff --git a/net/ethtool/wol.c b/net/ethtool/wol.c > index 0ed56c9ac1bc..fcefc1bbfa2e 100644 > --- a/net/ethtool/wol.c > +++ b/net/ethtool/wol.c > @@ -108,15 +108,16 @@ ethnl_set_wol(struct ethnl_req_info *req_info, struct genl_info *info) > struct net_device *dev = req_info->dev; > struct nlattr **tb = info->attrs; > bool mod = false; > + u32 wolopts = 0; > int ret; > > dev->ethtool_ops->get_wol(dev, &wol); > - ret = ethnl_update_bitset32(&wol.wolopts, WOL_MODE_COUNT, > + ret = ethnl_update_bitset32(&wolopts, WOL_MODE_COUNT, > tb[ETHTOOL_A_WOL_MODES], wol_mode_names, > info->extack, &mod); > if (ret < 0) > return ret; > - if (wol.wolopts & ~wol.supported) { > + if (wolopts & ~wol.supported) { > NL_SET_ERR_MSG_ATTR(info->extack, tb[ETHTOOL_A_WOL_MODES], > "cannot enable unsupported WoL mode"); > return -EINVAL; > @@ -132,8 +133,9 @@ ethnl_set_wol(struct ethnl_req_info *req_info, struct genl_info *info) > tb[ETHTOOL_A_WOL_SOPASS], &mod); > } > > - if (!mod) > + if (!mod && wolopts == wol.wolopts) > return 0; > + wol.wolopts = wolopts; > ret = dev->ethtool_ops->set_wol(dev, &wol); > if (ret) > return ret; > -- > 2.39.2
This doesn't look right, AFAICS with this patch, the resulting WoL flags would not depend on current values at all, i.e. it would certainly break non-absolute commands like
ethtool -s eth0 wol +g ethtool -s eth0 wol -u+g ethtool -s etho wol 32/34
How recent was the kernel where you encountered the issue? I suspect the issue might be related to recent 108a36d07c01 ("ethtool: Fix mod state of verbose no_mask bitset"), I'll look into it closer.
Michal [unhandled content-type:application/pgp-signature] | |