Netdev List
 help / color / mirror / Atom feed
* [PATCH net v1 1/1] ethtool: fix clearing of WoL flags
@ 2023-10-19  7:09 Oleksij Rempel
  2023-10-19  9:05 ` Michal Kubecek
  0 siblings, 1 reply; 11+ messages in thread
From: Oleksij Rempel @ 2023-10-19  7:09 UTC (permalink / raw)
  To: David S. Miller, Andrew Lunn, Eric Dumazet, Florian Fainelli,
	Jakub Kicinski, Paolo Abeni, Vladimir Oltean
  Cc: Oleksij Rempel, kernel, linux-kernel, netdev, Michal Kubecek

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


^ permalink raw reply related	[flat|nested] 11+ messages in thread

* Re: [PATCH net v1 1/1] ethtool: fix clearing of WoL flags
  2023-10-19  7:09 [PATCH net v1 1/1] ethtool: fix clearing of WoL flags Oleksij Rempel
@ 2023-10-19  9:05 ` Michal Kubecek
  2023-10-19  9:12   ` Oleksij Rempel
  2023-10-19  9:51   ` Michal Kubecek
  0 siblings, 2 replies; 11+ messages in thread
From: Michal Kubecek @ 2023-10-19  9:05 UTC (permalink / raw)
  To: Oleksij Rempel
  Cc: Kory Maincent, David S. Miller, Andrew Lunn, Eric Dumazet,
	Florian Fainelli, Jakub Kicinski, Paolo Abeni, Vladimir Oltean,
	kernel, linux-kernel, netdev

[-- Attachment #1: Type: text/plain, Size: 2365 bytes --]

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

[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 488 bytes --]

^ permalink raw reply	[flat|nested] 11+ messages in thread

* Re: [PATCH net v1 1/1] ethtool: fix clearing of WoL flags
  2023-10-19  9:05 ` Michal Kubecek
@ 2023-10-19  9:12   ` Oleksij Rempel
  2023-10-19  9:51   ` Michal Kubecek
  1 sibling, 0 replies; 11+ messages in thread
From: Oleksij Rempel @ 2023-10-19  9:12 UTC (permalink / raw)
  To: Michal Kubecek
  Cc: Kory Maincent, David S. Miller, Andrew Lunn, Eric Dumazet,
	Florian Fainelli, Jakub Kicinski, Paolo Abeni, Vladimir Oltean,
	kernel, linux-kernel, netdev

On Thu, Oct 19, 2023 at 11:05:10AM +0200, Michal Kubecek wrote:
> 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

Wow, I have learned something new :)

> How recent was the kernel where you encountered the issue?

It is latest net-next.

> 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.

Thx!

Regards,
Oleksij
-- 
Pengutronix e.K.                           |                             |
Steuerwalder Str. 21                       | http://www.pengutronix.de/  |
31137 Hildesheim, Germany                  | Phone: +49-5121-206917-0    |
Amtsgericht Hildesheim, HRA 2686           | Fax:   +49-5121-206917-5555 |

^ permalink raw reply	[flat|nested] 11+ messages in thread

* Re: [PATCH net v1 1/1] ethtool: fix clearing of WoL flags
  2023-10-19  9:05 ` Michal Kubecek
  2023-10-19  9:12   ` Oleksij Rempel
@ 2023-10-19  9:51   ` Michal Kubecek
  2023-10-19 10:21     ` Köry Maincent
  1 sibling, 1 reply; 11+ messages in thread
From: Michal Kubecek @ 2023-10-19  9:51 UTC (permalink / raw)
  To: Oleksij Rempel
  Cc: Kory Maincent, David S. Miller, Andrew Lunn, Eric Dumazet,
	Florian Fainelli, Jakub Kicinski, Paolo Abeni, Vladimir Oltean,
	kernel, linux-kernel, netdev

[-- Attachment #1: Type: text/plain, Size: 2360 bytes --]

On Thu, Oct 19, 2023 at 11:05:10AM +0200, Michal Kubecek wrote:
> 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
> > ...
> > 
> 
> 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.

The issue was indeed introduced by commit 108a36d07c01 ("ethtool: Fix
mod state of verbose no_mask bitset"). The problem is that a "no mask"
verbose bitset only contains bit attributes for bits to be set. This
worked correctly before this commit because we were always updating
a zero bitmap (since commit 6699170376ab ("ethtool: fix application of
verbose no_mask bitset"), that is) so that the rest was left zero
naturally. But now the 1->0 change (old_val is true, bit not present in
netlink nest) no longer works.

To fix the issue while keeping more precise modification tracking
introduced by commit 108a36d07c01 ("ethtool: Fix mod state of verbose
no_mask bitset"), we would have to either iterate through all possible
bits in "no mask" case or update a temporary zero bitmap and then set
mod by comparing it to the original (and rewrite the target if they
differ). This is exactly what I was trying to avoid from the start but
it wouldn't be more complicated than current code.

As we are rather late in the 6.6 cycle (rc6 out), the safest solution
seems to be reverting commit 108a36d07c01 ("ethtool: Fix mod state of
verbose no_mask bitset") in net tree as sending a notification even on
a request which turns out to be no-op is not a serious problem (after
all, this is what happens for ioctl requests most of the time and IIRC
there are more cases where it happens for netlink requests). Then we can
fix the change detection properly in net-next in the way proposed in
previous paragraph (I would prefer not risking more intrusive changes at
this stage).

Michal

[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 488 bytes --]

^ permalink raw reply	[flat|nested] 11+ messages in thread

* Re: [PATCH net v1 1/1] ethtool: fix clearing of WoL flags
  2023-10-19  9:51   ` Michal Kubecek
@ 2023-10-19 10:21     ` Köry Maincent
  2023-10-19 10:50       ` Michal Kubecek
  0 siblings, 1 reply; 11+ messages in thread
From: Köry Maincent @ 2023-10-19 10:21 UTC (permalink / raw)
  To: Michal Kubecek
  Cc: Oleksij Rempel, David S. Miller, Andrew Lunn, Eric Dumazet,
	Florian Fainelli, Jakub Kicinski, Paolo Abeni, Vladimir Oltean,
	kernel, linux-kernel, netdev

On Thu, 19 Oct 2023 11:51:40 +0200
Michal Kubecek <mkubecek@suse.cz> wrote:

> On Thu, Oct 19, 2023 at 11:05:10AM +0200, Michal Kubecek wrote:
> > 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
> > > ...
> > >   
> > 
> > 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.  
> 
> The issue was indeed introduced by commit 108a36d07c01 ("ethtool: Fix
> mod state of verbose no_mask bitset"). The problem is that a "no mask"
> verbose bitset only contains bit attributes for bits to be set. This
> worked correctly before this commit because we were always updating
> a zero bitmap (since commit 6699170376ab ("ethtool: fix application of
> verbose no_mask bitset"), that is) so that the rest was left zero
> naturally. But now the 1->0 change (old_val is true, bit not present in
> netlink nest) no longer works.

Doh I had not seen this issue! Thanks you for reporting it.
I will send the revert then and will update the fix for next merge-window.

> To fix the issue while keeping more precise modification tracking
> introduced by commit 108a36d07c01 ("ethtool: Fix mod state of verbose
> no_mask bitset"), we would have to either iterate through all possible
> bits in "no mask" case or update a temporary zero bitmap and then set
> mod by comparing it to the original (and rewrite the target if they
> differ). This is exactly what I was trying to avoid from the start but
> it wouldn't be more complicated than current code.
> 
> As we are rather late in the 6.6 cycle (rc6 out), the safest solution
> seems to be reverting commit 108a36d07c01 ("ethtool: Fix mod state of
> verbose no_mask bitset") in net tree as sending a notification even on
> a request which turns out to be no-op is not a serious problem (after
> all, this is what happens for ioctl requests most of the time and IIRC
> there are more cases where it happens for netlink requests). Then we can
> fix the change detection properly in net-next in the way proposed in
> previous paragraph (I would prefer not risking more intrusive changes at
> this stage).

^ permalink raw reply	[flat|nested] 11+ messages in thread

* Re: [PATCH net v1 1/1] ethtool: fix clearing of WoL flags
  2023-10-19 10:21     ` Köry Maincent
@ 2023-10-19 10:50       ` Michal Kubecek
  2023-10-19 10:54         ` Michal Kubecek
  2023-10-19 13:27         ` Köry Maincent
  0 siblings, 2 replies; 11+ messages in thread
From: Michal Kubecek @ 2023-10-19 10:50 UTC (permalink / raw)
  To: Köry Maincent
  Cc: Oleksij Rempel, David S. Miller, Andrew Lunn, Eric Dumazet,
	Florian Fainelli, Jakub Kicinski, Paolo Abeni, Vladimir Oltean,
	kernel, linux-kernel, netdev

[-- Attachment #1: Type: text/plain, Size: 3146 bytes --]

On Thu, Oct 19, 2023 at 12:21:14PM +0200, Köry Maincent wrote:
> On Thu, 19 Oct 2023 11:51:40 +0200 > Michal Kubecek <mkubecek@suse.cz> wrote:
> > 
> > The issue was indeed introduced by commit 108a36d07c01 ("ethtool: Fix
> > mod state of verbose no_mask bitset"). The problem is that a "no mask"
> > verbose bitset only contains bit attributes for bits to be set. This
> > worked correctly before this commit because we were always updating
> > a zero bitmap (since commit 6699170376ab ("ethtool: fix application of
> > verbose no_mask bitset"), that is) so that the rest was left zero
> > naturally. But now the 1->0 change (old_val is true, bit not present in
> > netlink nest) no longer works.
> 
> Doh I had not seen this issue! Thanks you for reporting it.
> I will send the revert then and will update the fix for next merge-window.

Something like the diff below (against current mainline) might do the
trick but it's just an idea, not even build tested.

Michal


diff --git a/net/ethtool/bitset.c b/net/ethtool/bitset.c
index 883ed9be81f9..4d4398879c95 100644
--- a/net/ethtool/bitset.c
+++ b/net/ethtool/bitset.c
@@ -74,6 +74,28 @@ static void ethnl_bitmap32_clear(u32 *dst, unsigned int start, unsigned int end,
 	}
 }
 
+/**
+  * ethnl_bitmap32_equal() - Compare two bitmaps
+  * @map1:  first bitmap
+  * @map2:  second bitmap
+  * @nbits: bit size to compare
+  *
+  * Return: true if first @nbits are equal, false if not
+  */
+
+static bool ethnl_bitmap32_equal(const u32 *map1, const u32 *map2,
+				 unsigned int nbits)
+{
+	bool ret;
+
+	if (memcmp(map1, map2, nbits / 32 * sizeof(u32)))
+		return false;
+	if (nbits % 32 == 0)
+		return true;
+	return !((map1[nbits / 32] ^ map2[nbits / 32]) &
+		 ethnl_lower_bits(nbits % 32));
+}
+
 /**
  * ethnl_bitmap32_not_zero() - Check if any bit is set in an interval
  * @map:   bitmap to test
@@ -431,7 +453,7 @@ ethnl_update_bitset32_verbose(u32 *bitmap, unsigned int nbits,
 			      ethnl_string_array_t names,
 			      struct netlink_ext_ack *extack, bool *mod)
 {
-	u32 *orig_bitmap, *saved_bitmap = NULL;
+	u32 *saved_bitmap = NULL;
 	struct nlattr *bit_attr;
 	bool no_mask;
 	bool dummy;
@@ -462,9 +484,6 @@ ethnl_update_bitset32_verbose(u32 *bitmap, unsigned int nbits,
 			return -ENOMEM;
 		memcpy(saved_bitmap, bitmap, nbytes);
 		ethnl_bitmap32_clear(bitmap, 0, nbits, &dummy);
-		orig_bitmap = saved_bitmap;
-	} else {
-		orig_bitmap = bitmap;
 	}
 
 	nla_for_each_nested(bit_attr, tb[ETHTOOL_A_BITSET_BITS], rem) {
@@ -481,7 +500,7 @@ ethnl_update_bitset32_verbose(u32 *bitmap, unsigned int nbits,
 				      names, extack);
 		if (ret < 0)
 			goto out;
-		old_val = orig_bitmap[idx / 32] & ((u32)1 << (idx % 32));
+		old_val = bitmap[idx / 32] & ((u32)1 << (idx % 32));
 		if (new_val != old_val) {
 			if (new_val)
 				bitmap[idx / 32] |= ((u32)1 << (idx % 32));
@@ -490,6 +509,8 @@ ethnl_update_bitset32_verbose(u32 *bitmap, unsigned int nbits,
 			*mod = true;
 		}
 	}
+	if (saved_bitmap)
+		*mod = ethnl_bitmap32_cmp(saved_bitmap, bitmap, nbits);
 
 	ret = 0;
 out:

[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 488 bytes --]

^ permalink raw reply related	[flat|nested] 11+ messages in thread

* Re: [PATCH net v1 1/1] ethtool: fix clearing of WoL flags
  2023-10-19 10:50       ` Michal Kubecek
@ 2023-10-19 10:54         ` Michal Kubecek
  2023-10-19 13:27         ` Köry Maincent
  1 sibling, 0 replies; 11+ messages in thread
From: Michal Kubecek @ 2023-10-19 10:54 UTC (permalink / raw)
  To: Köry Maincent
  Cc: Oleksij Rempel, David S. Miller, Andrew Lunn, Eric Dumazet,
	Florian Fainelli, Jakub Kicinski, Paolo Abeni, Vladimir Oltean,
	kernel, linux-kernel, netdev

[-- Attachment #1: Type: text/plain, Size: 404 bytes --]

On Thu, Oct 19, 2023 at 12:50:48PM +0200, Michal Kubecek wrote:
[...]
> @@ -490,6 +509,8 @@ ethnl_update_bitset32_verbose(u32 *bitmap, unsigned int nbits,
>  			*mod = true;
>  		}
>  	}
> +	if (saved_bitmap)
> +		*mod = ethnl_bitmap32_cmp(saved_bitmap, bitmap, nbits);
>  
>  	ret = 0;
>  out:

Oops, this should be

		*mod = !ethnl_bitmap32_equal(saved_bitmap, bitmap, nbits);

Michal

[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 488 bytes --]

^ permalink raw reply	[flat|nested] 11+ messages in thread

* Re: [PATCH net v1 1/1] ethtool: fix clearing of WoL flags
  2023-10-19 10:50       ` Michal Kubecek
  2023-10-19 10:54         ` Michal Kubecek
@ 2023-10-19 13:27         ` Köry Maincent
  2023-10-19 16:20           ` Florian Fainelli
  1 sibling, 1 reply; 11+ messages in thread
From: Köry Maincent @ 2023-10-19 13:27 UTC (permalink / raw)
  To: Michal Kubecek
  Cc: Oleksij Rempel, David S. Miller, Andrew Lunn, Eric Dumazet,
	Florian Fainelli, Jakub Kicinski, Paolo Abeni, Vladimir Oltean,
	kernel, linux-kernel, netdev

On Thu, 19 Oct 2023 12:50:48 +0200
Michal Kubecek <mkubecek@suse.cz> wrote:

> On Thu, Oct 19, 2023 at 12:21:14PM +0200, Köry Maincent wrote:
> > On Thu, 19 Oct 2023 11:51:40 +0200 > Michal Kubecek <mkubecek@suse.cz>
> > wrote:  
> > > 
> > > The issue was indeed introduced by commit 108a36d07c01 ("ethtool: Fix
> > > mod state of verbose no_mask bitset"). The problem is that a "no mask"
> > > verbose bitset only contains bit attributes for bits to be set. This
> > > worked correctly before this commit because we were always updating
> > > a zero bitmap (since commit 6699170376ab ("ethtool: fix application of
> > > verbose no_mask bitset"), that is) so that the rest was left zero
> > > naturally. But now the 1->0 change (old_val is true, bit not present in
> > > netlink nest) no longer works.  
> > 
> > Doh I had not seen this issue! Thanks you for reporting it.
> > I will send the revert then and will update the fix for next merge-window.  
> 
> Something like the diff below (against current mainline) might do the
> trick but it's just an idea, not even build tested.

Seems a good idea without adding too much complexity to the code.
Will try that and send it in next merge window.

Köry

^ permalink raw reply	[flat|nested] 11+ messages in thread

* Re: [PATCH net v1 1/1] ethtool: fix clearing of WoL flags
  2023-10-19 13:27         ` Köry Maincent
@ 2023-10-19 16:20           ` Florian Fainelli
  2023-10-19 16:45             ` Michal Kubecek
  0 siblings, 1 reply; 11+ messages in thread
From: Florian Fainelli @ 2023-10-19 16:20 UTC (permalink / raw)
  To: Köry Maincent, Michal Kubecek
  Cc: Oleksij Rempel, David S. Miller, Andrew Lunn, Eric Dumazet,
	Jakub Kicinski, Paolo Abeni, Vladimir Oltean, kernel,
	linux-kernel, netdev

On 10/19/23 06:27, Köry Maincent wrote:
> On Thu, 19 Oct 2023 12:50:48 +0200
> Michal Kubecek <mkubecek@suse.cz> wrote:
> 
>> On Thu, Oct 19, 2023 at 12:21:14PM +0200, Köry Maincent wrote:
>>> On Thu, 19 Oct 2023 11:51:40 +0200 > Michal Kubecek <mkubecek@suse.cz>
>>> wrote:
>>>>
>>>> The issue was indeed introduced by commit 108a36d07c01 ("ethtool: Fix
>>>> mod state of verbose no_mask bitset"). The problem is that a "no mask"
>>>> verbose bitset only contains bit attributes for bits to be set. This
>>>> worked correctly before this commit because we were always updating
>>>> a zero bitmap (since commit 6699170376ab ("ethtool: fix application of
>>>> verbose no_mask bitset"), that is) so that the rest was left zero
>>>> naturally. But now the 1->0 change (old_val is true, bit not present in
>>>> netlink nest) no longer works.
>>>
>>> Doh I had not seen this issue! Thanks you for reporting it.
>>> I will send the revert then and will update the fix for next merge-window.
>>
>> Something like the diff below (against current mainline) might do the
>> trick but it's just an idea, not even build tested.
> 
> Seems a good idea without adding too much complexity to the code.
> Will try that and send it in next merge window.

Not sure what you mean by next merge window, we need a fix for right 
now, or we need to revert 6699170376ab ("ethtool: fix application of 
verbose no_mask bitset").
-- 
Florian


^ permalink raw reply	[flat|nested] 11+ messages in thread

* Re: [PATCH net v1 1/1] ethtool: fix clearing of WoL flags
  2023-10-19 16:20           ` Florian Fainelli
@ 2023-10-19 16:45             ` Michal Kubecek
  2023-10-19 17:34               ` Florian Fainelli
  0 siblings, 1 reply; 11+ messages in thread
From: Michal Kubecek @ 2023-10-19 16:45 UTC (permalink / raw)
  To: Florian Fainelli
  Cc: Köry Maincent, Oleksij Rempel, David S. Miller, Andrew Lunn,
	Eric Dumazet, Jakub Kicinski, Paolo Abeni, Vladimir Oltean,
	kernel, linux-kernel, netdev

[-- Attachment #1: Type: text/plain, Size: 2038 bytes --]

On Thu, Oct 19, 2023 at 09:20:31AM -0700, Florian Fainelli wrote:
> On 10/19/23 06:27, Köry Maincent wrote:
> > On Thu, 19 Oct 2023 12:50:48 +0200
> > Michal Kubecek <mkubecek@suse.cz> wrote:
> > 
> > > On Thu, Oct 19, 2023 at 12:21:14PM +0200, Köry Maincent wrote:
> > > > On Thu, 19 Oct 2023 11:51:40 +0200 > Michal Kubecek <mkubecek@suse.cz>
> > > > wrote:
> > > > > 
> > > > > The issue was indeed introduced by commit 108a36d07c01 ("ethtool: Fix
> > > > > mod state of verbose no_mask bitset"). The problem is that a "no mask"
> > > > > verbose bitset only contains bit attributes for bits to be set. This
> > > > > worked correctly before this commit because we were always updating
> > > > > a zero bitmap (since commit 6699170376ab ("ethtool: fix application of
> > > > > verbose no_mask bitset"), that is) so that the rest was left zero
> > > > > naturally. But now the 1->0 change (old_val is true, bit not present in
> > > > > netlink nest) no longer works.
> > > > 
> > > > Doh I had not seen this issue! Thanks you for reporting it.
> > > > I will send the revert then and will update the fix for next merge-window.
> > > 
> > > Something like the diff below (against current mainline) might do the
> > > trick but it's just an idea, not even build tested.
> > 
> > Seems a good idea without adding too much complexity to the code.
> > Will try that and send it in next merge window.
> 
> Not sure what you mean by next merge window, we need a fix for right now, or
> we need to revert 6699170376ab ("ethtool: fix application of verbose no_mask
> bitset").

Not that one, that's an old commit that was correct from functional
point of view (the only problem was that it sometimes triggered
a notification even when the value was not changed but that also happens
in other places).

A revert of commit 108a36d07c01 ("ethtool: Fix mod state of verbose
no_mask bitset") is already in net tree as commit 524515020f25 ("Revert
"ethtool: Fix mod state of verbose no_mask bitset"").

Michal

[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 488 bytes --]

^ permalink raw reply	[flat|nested] 11+ messages in thread

* Re: [PATCH net v1 1/1] ethtool: fix clearing of WoL flags
  2023-10-19 16:45             ` Michal Kubecek
@ 2023-10-19 17:34               ` Florian Fainelli
  0 siblings, 0 replies; 11+ messages in thread
From: Florian Fainelli @ 2023-10-19 17:34 UTC (permalink / raw)
  To: Michal Kubecek
  Cc: Köry Maincent, Oleksij Rempel, David S. Miller, Andrew Lunn,
	Eric Dumazet, Jakub Kicinski, Paolo Abeni, Vladimir Oltean,
	kernel, linux-kernel, netdev

On 10/19/23 09:45, Michal Kubecek wrote:
> On Thu, Oct 19, 2023 at 09:20:31AM -0700, Florian Fainelli wrote:
>> On 10/19/23 06:27, Köry Maincent wrote:
>>> On Thu, 19 Oct 2023 12:50:48 +0200
>>> Michal Kubecek <mkubecek@suse.cz> wrote:
>>>
>>>> On Thu, Oct 19, 2023 at 12:21:14PM +0200, Köry Maincent wrote:
>>>>> On Thu, 19 Oct 2023 11:51:40 +0200 > Michal Kubecek <mkubecek@suse.cz>
>>>>> wrote:
>>>>>>
>>>>>> The issue was indeed introduced by commit 108a36d07c01 ("ethtool: Fix
>>>>>> mod state of verbose no_mask bitset"). The problem is that a "no mask"
>>>>>> verbose bitset only contains bit attributes for bits to be set. This
>>>>>> worked correctly before this commit because we were always updating
>>>>>> a zero bitmap (since commit 6699170376ab ("ethtool: fix application of
>>>>>> verbose no_mask bitset"), that is) so that the rest was left zero
>>>>>> naturally. But now the 1->0 change (old_val is true, bit not present in
>>>>>> netlink nest) no longer works.
>>>>>
>>>>> Doh I had not seen this issue! Thanks you for reporting it.
>>>>> I will send the revert then and will update the fix for next merge-window.
>>>>
>>>> Something like the diff below (against current mainline) might do the
>>>> trick but it's just an idea, not even build tested.
>>>
>>> Seems a good idea without adding too much complexity to the code.
>>> Will try that and send it in next merge window.
>>
>> Not sure what you mean by next merge window, we need a fix for right now, or
>> we need to revert 6699170376ab ("ethtool: fix application of verbose no_mask
>> bitset").
> 
> Not that one, that's an old commit that was correct from functional
> point of view (the only problem was that it sometimes triggered
> a notification even when the value was not changed but that also happens
> in other places).
> 
> A revert of commit 108a36d07c01 ("ethtool: Fix mod state of verbose
> no_mask bitset") is already in net tree as commit 524515020f25 ("Revert
> "ethtool: Fix mod state of verbose no_mask bitset"").

Got it, thanks!
-- 
Florian


^ permalink raw reply	[flat|nested] 11+ messages in thread

end of thread, other threads:[~2023-10-19 17:34 UTC | newest]

Thread overview: 11+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2023-10-19  7:09 [PATCH net v1 1/1] ethtool: fix clearing of WoL flags Oleksij Rempel
2023-10-19  9:05 ` Michal Kubecek
2023-10-19  9:12   ` Oleksij Rempel
2023-10-19  9:51   ` Michal Kubecek
2023-10-19 10:21     ` Köry Maincent
2023-10-19 10:50       ` Michal Kubecek
2023-10-19 10:54         ` Michal Kubecek
2023-10-19 13:27         ` Köry Maincent
2023-10-19 16:20           ` Florian Fainelli
2023-10-19 16:45             ` Michal Kubecek
2023-10-19 17:34               ` Florian Fainelli

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox