netdev.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH net] net: accept an empty mask in /sys/class/net/*/queues/rx-*/rps_cpus
@ 2020-08-12  1:34 Eric Dumazet
  2020-08-12  2:25 ` Maciej Żenczykowski
                   ` (4 more replies)
  0 siblings, 5 replies; 11+ messages in thread
From: Eric Dumazet @ 2020-08-12  1:34 UTC (permalink / raw)
  To: David S . Miller
  Cc: netdev, Eric Dumazet, Eric Dumazet, Maciej Żenczykowski,
	Alex Belits, Nitesh Narayan Lal, Peter Zijlstra

We must accept an empty mask in store_rps_map(), or we are not able
to disable RPS on a queue.

Fixes: 07bbecb34106 ("net: Restrict receive packets queuing to housekeeping CPUs")
Signed-off-by: Eric Dumazet <edumazet@google.com>
Reported-by: Maciej Żenczykowski <maze@google.com>
Cc: Alex Belits <abelits@marvell.com>
Cc: Nitesh Narayan Lal <nitesh@redhat.com>
Cc: Peter Zijlstra (Intel) <peterz@infradead.org>
---
 net/core/net-sysfs.c | 12 +++++++-----
 1 file changed, 7 insertions(+), 5 deletions(-)

diff --git a/net/core/net-sysfs.c b/net/core/net-sysfs.c
index 9de33b594ff2693c054022a42703c90084122444..efec66fa78b70b2fe5b0a5920317eb1d0415d9e3 100644
--- a/net/core/net-sysfs.c
+++ b/net/core/net-sysfs.c
@@ -757,11 +757,13 @@ static ssize_t store_rps_map(struct netdev_rx_queue *queue,
 		return err;
 	}
 
-	hk_flags = HK_FLAG_DOMAIN | HK_FLAG_WQ;
-	cpumask_and(mask, mask, housekeeping_cpumask(hk_flags));
-	if (cpumask_empty(mask)) {
-		free_cpumask_var(mask);
-		return -EINVAL;
+	if (!cpumask_empty(mask)) {
+		hk_flags = HK_FLAG_DOMAIN | HK_FLAG_WQ;
+		cpumask_and(mask, mask, housekeeping_cpumask(hk_flags));
+		if (cpumask_empty(mask)) {
+			free_cpumask_var(mask);
+			return -EINVAL;
+		}
 	}
 
 	map = kzalloc(max_t(unsigned int,
-- 
2.28.0.236.gb10cc79966-goog


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

* Re: [PATCH net] net: accept an empty mask in /sys/class/net/*/queues/rx-*/rps_cpus
  2020-08-12  1:34 [PATCH net] net: accept an empty mask in /sys/class/net/*/queues/rx-*/rps_cpus Eric Dumazet
@ 2020-08-12  2:25 ` Maciej Żenczykowski
  2020-08-12  3:16 ` David Ahern
                   ` (3 subsequent siblings)
  4 siblings, 0 replies; 11+ messages in thread
From: Maciej Żenczykowski @ 2020-08-12  2:25 UTC (permalink / raw)
  To: Eric Dumazet
  Cc: David S . Miller, netdev, Eric Dumazet, Alex Belits,
	Nitesh Narayan Lal, Peter Zijlstra

Reviewed-by: Maciej Żenczykowski <maze@google.com>

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

* Re: [PATCH net] net: accept an empty mask in /sys/class/net/*/queues/rx-*/rps_cpus
  2020-08-12  1:34 [PATCH net] net: accept an empty mask in /sys/class/net/*/queues/rx-*/rps_cpus Eric Dumazet
  2020-08-12  2:25 ` Maciej Żenczykowski
@ 2020-08-12  3:16 ` David Ahern
  2020-08-12  3:18   ` David Ahern
  2020-08-12  3:19   ` Maciej Żenczykowski
       [not found] ` <CANP3RGc6Gz73Gt3v9M7KYNeNd57o--=3mF6yqdRjqOViG+TG7A@mail.gmail.com>
                   ` (2 subsequent siblings)
  4 siblings, 2 replies; 11+ messages in thread
From: David Ahern @ 2020-08-12  3:16 UTC (permalink / raw)
  To: Eric Dumazet, David S . Miller
  Cc: netdev, Eric Dumazet, Maciej Żenczykowski, Alex Belits,
	Nitesh Narayan Lal, Peter Zijlstra

On 8/11/20 7:34 PM, Eric Dumazet wrote:
> We must accept an empty mask in store_rps_map(), or we are not able
> to disable RPS on a queue.

0 works. Is that not sufficient?

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

* Re: [PATCH net] net: accept an empty mask in /sys/class/net/*/queues/rx-*/rps_cpus
  2020-08-12  3:16 ` David Ahern
@ 2020-08-12  3:18   ` David Ahern
  2020-08-12  3:19   ` Maciej Żenczykowski
  1 sibling, 0 replies; 11+ messages in thread
From: David Ahern @ 2020-08-12  3:18 UTC (permalink / raw)
  To: Eric Dumazet, David S . Miller
  Cc: netdev, Eric Dumazet, Maciej Żenczykowski, Alex Belits,
	Nitesh Narayan Lal, Peter Zijlstra

On 8/11/20 9:16 PM, David Ahern wrote:
> On 8/11/20 7:34 PM, Eric Dumazet wrote:
>> We must accept an empty mask in store_rps_map(), or we are not able
>> to disable RPS on a queue.
> 
> 0 works. Is that not sufficient?
> 

To re-phrase:
    echo 0 > /sys/class/net/*/queues/rx-*/rps_cpus

works to disable rps. I don't get the difference in what you are
changing here.

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

* Re: [PATCH net] net: accept an empty mask in /sys/class/net/*/queues/rx-*/rps_cpus
  2020-08-12  3:16 ` David Ahern
  2020-08-12  3:18   ` David Ahern
@ 2020-08-12  3:19   ` Maciej Żenczykowski
  2020-08-12  3:22     ` David Ahern
  1 sibling, 1 reply; 11+ messages in thread
From: Maciej Żenczykowski @ 2020-08-12  3:19 UTC (permalink / raw)
  To: David Ahern
  Cc: Eric Dumazet, David S . Miller, netdev, Eric Dumazet,
	Alex Belits, Nitesh Narayan Lal, Peter Zijlstra

Before breakage, post fix:

sfp6:~# echo 0 > /sys/class/net/lo/queues/rx-0/rps_cpus

With breakage:
lpk17:~# echo 0 > /sys/class/net/lo/queues/rx-0/rps_cpus
-bash: echo: write error: Invalid argument

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

* Re: [PATCH net] net: accept an empty mask in /sys/class/net/*/queues/rx-*/rps_cpus
  2020-08-12  3:19   ` Maciej Żenczykowski
@ 2020-08-12  3:22     ` David Ahern
  2020-08-12  3:27       ` Eric Dumazet
  0 siblings, 1 reply; 11+ messages in thread
From: David Ahern @ 2020-08-12  3:22 UTC (permalink / raw)
  To: Maciej Żenczykowski
  Cc: Eric Dumazet, David S . Miller, netdev, Eric Dumazet,
	Alex Belits, Nitesh Narayan Lal, Peter Zijlstra

On 8/11/20 9:19 PM, Maciej Żenczykowski wrote:
> Before breakage, post fix:
> 
> sfp6:~# echo 0 > /sys/class/net/lo/queues/rx-0/rps_cpus
> 
> With breakage:
> lpk17:~# echo 0 > /sys/class/net/lo/queues/rx-0/rps_cpus
> -bash: echo: write error: Invalid argument
> 

ah, so this is recent breakage with 5.9. I had not hit before hence the
question. thanks for clarifying.

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

* Re: [PATCH net] net: accept an empty mask in /sys/class/net/*/queues/rx-*/rps_cpus
  2020-08-12  3:22     ` David Ahern
@ 2020-08-12  3:27       ` Eric Dumazet
  0 siblings, 0 replies; 11+ messages in thread
From: Eric Dumazet @ 2020-08-12  3:27 UTC (permalink / raw)
  To: David Ahern
  Cc: Maciej Żenczykowski, David S . Miller, netdev, Eric Dumazet,
	Alex Belits, Nitesh Narayan Lal, Peter Zijlstra

On Tue, Aug 11, 2020 at 8:22 PM David Ahern <dsahern@gmail.com> wrote:
>
> On 8/11/20 9:19 PM, Maciej Żenczykowski wrote:
> > Before breakage, post fix:
> >
> > sfp6:~# echo 0 > /sys/class/net/lo/queues/rx-0/rps_cpus
> >
> > With breakage:
> > lpk17:~# echo 0 > /sys/class/net/lo/queues/rx-0/rps_cpus
> > -bash: echo: write error: Invalid argument
> >
>
> ah, so this is recent breakage with 5.9. I had not hit before hence the
> question. thanks for clarifying.

Yup, 07bbecb34106 ("net: Restrict receive packets queuing to
housekeeping CPUs") has been merged only recently.

(This was not in David net-next tree btw, this is why it took us so
long to come to this issue)

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

* Re: [PATCH net] net: accept an empty mask in /sys/class/net/*/queues/rx-*/rps_cpus
       [not found] ` <CANP3RGc6Gz73Gt3v9M7KYNeNd57o--=3mF6yqdRjqOViG+TG7A@mail.gmail.com>
@ 2020-08-12  8:00   ` peterz
  2020-08-12 15:19     ` Eric Dumazet
  0 siblings, 1 reply; 11+ messages in thread
From: peterz @ 2020-08-12  8:00 UTC (permalink / raw)
  To: Maciej Żenczykowski
  Cc: Eric Dumazet, David S . Miller, netdev, Eric Dumazet,
	Alex Belits, Nitesh Narayan Lal

On Tue, Aug 11, 2020 at 06:45:23PM -0700, Maciej Żenczykowski wrote:
> On Tue, Aug 11, 2020 at 6:34 PM Eric Dumazet <edumazet@google.com> wrote:
> 
> > We must accept an empty mask in store_rps_map(), or we are not able
> > to disable RPS on a queue.
> >
> > Fixes: 07bbecb34106 ("net: Restrict receive packets queuing to
> > housekeeping CPUs")
> > Signed-off-by: Eric Dumazet <edumazet@google.com>
> > Reported-by: Maciej Żenczykowski <maze@google.com>
> > Cc: Alex Belits <abelits@marvell.com>
> > Cc: Nitesh Narayan Lal <nitesh@redhat.com>
> > Cc: Peter Zijlstra (Intel) <peterz@infradead.org>
> > ---
> >  net/core/net-sysfs.c | 12 +++++++-----
> >  1 file changed, 7 insertions(+), 5 deletions(-)
> >
> > diff --git a/net/core/net-sysfs.c b/net/core/net-sysfs.c
> > index
> > 9de33b594ff2693c054022a42703c90084122444..efec66fa78b70b2fe5b0a5920317eb1d0415d9e3
> > 100644
> > --- a/net/core/net-sysfs.c
> > +++ b/net/core/net-sysfs.c
> > @@ -757,11 +757,13 @@ static ssize_t store_rps_map(struct netdev_rx_queue
> > *queue,
> >                 return err;
> >         }
> >
> > -       hk_flags = HK_FLAG_DOMAIN | HK_FLAG_WQ;
> > -       cpumask_and(mask, mask, housekeeping_cpumask(hk_flags));
> > -       if (cpumask_empty(mask)) {
> > -               free_cpumask_var(mask);
> > -               return -EINVAL;
> > +       if (!cpumask_empty(mask)) {
> > +               hk_flags = HK_FLAG_DOMAIN | HK_FLAG_WQ;
> > +               cpumask_and(mask, mask, housekeeping_cpumask(hk_flags));
> > +               if (cpumask_empty(mask)) {
> > +                       free_cpumask_var(mask);
> > +                       return -EINVAL;
> > +               }
> >         }

Ah indeed! Sorry about that.

Acked-by: Peter Zijlstra (Intel) <peterz@infradead.org>

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

* Re: [PATCH net] net: accept an empty mask in /sys/class/net/*/queues/rx-*/rps_cpus
  2020-08-12  1:34 [PATCH net] net: accept an empty mask in /sys/class/net/*/queues/rx-*/rps_cpus Eric Dumazet
                   ` (2 preceding siblings ...)
       [not found] ` <CANP3RGc6Gz73Gt3v9M7KYNeNd57o--=3mF6yqdRjqOViG+TG7A@mail.gmail.com>
@ 2020-08-12 12:53 ` Nitesh Narayan Lal
  2020-08-12 21:25 ` David Miller
  4 siblings, 0 replies; 11+ messages in thread
From: Nitesh Narayan Lal @ 2020-08-12 12:53 UTC (permalink / raw)
  To: Eric Dumazet, David S . Miller
  Cc: netdev, Eric Dumazet, Maciej Żenczykowski, Alex Belits,
	Peter Zijlstra


[-- Attachment #1.1: Type: text/plain, Size: 1489 bytes --]


On 8/11/20 9:34 PM, Eric Dumazet wrote:
> We must accept an empty mask in store_rps_map(), or we are not able
> to disable RPS on a queue.
>
> Fixes: 07bbecb34106 ("net: Restrict receive packets queuing to housekeeping CPUs")
> Signed-off-by: Eric Dumazet <edumazet@google.com>
> Reported-by: Maciej Żenczykowski <maze@google.com>
> Cc: Alex Belits <abelits@marvell.com>
> Cc: Nitesh Narayan Lal <nitesh@redhat.com>
> Cc: Peter Zijlstra (Intel) <peterz@infradead.org>
> ---
>  net/core/net-sysfs.c | 12 +++++++-----
>  1 file changed, 7 insertions(+), 5 deletions(-)
>
> diff --git a/net/core/net-sysfs.c b/net/core/net-sysfs.c
> index 9de33b594ff2693c054022a42703c90084122444..efec66fa78b70b2fe5b0a5920317eb1d0415d9e3 100644
> --- a/net/core/net-sysfs.c
> +++ b/net/core/net-sysfs.c
> @@ -757,11 +757,13 @@ static ssize_t store_rps_map(struct netdev_rx_queue *queue,
>  		return err;
>  	}
>  
> -	hk_flags = HK_FLAG_DOMAIN | HK_FLAG_WQ;
> -	cpumask_and(mask, mask, housekeeping_cpumask(hk_flags));
> -	if (cpumask_empty(mask)) {
> -		free_cpumask_var(mask);
> -		return -EINVAL;
> +	if (!cpumask_empty(mask)) {
> +		hk_flags = HK_FLAG_DOMAIN | HK_FLAG_WQ;
> +		cpumask_and(mask, mask, housekeeping_cpumask(hk_flags));
> +		if (cpumask_empty(mask)) {
> +			free_cpumask_var(mask);
> +			return -EINVAL;
> +		}
>  	}
>  
>  	map = kzalloc(max_t(unsigned int,

Ah! my bad.
Thanks for the fix.

Acked-by: Nitesh Narayan Lal <nitesh@redhat.com>


[-- Attachment #2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 833 bytes --]

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

* Re: [PATCH net] net: accept an empty mask in /sys/class/net/*/queues/rx-*/rps_cpus
  2020-08-12  8:00   ` peterz
@ 2020-08-12 15:19     ` Eric Dumazet
  0 siblings, 0 replies; 11+ messages in thread
From: Eric Dumazet @ 2020-08-12 15:19 UTC (permalink / raw)
  To: peterz, Maciej Żenczykowski
  Cc: Eric Dumazet, David S . Miller, netdev, Eric Dumazet,
	Alex Belits, Nitesh Narayan Lal



On 8/12/20 1:00 AM, peterz@infradead.org wrote:
> On Tue, Aug 11, 2020 at 06:45:23PM -0700, Maciej Żenczykowski wrote:
>> On Tue, Aug 11, 2020 at 6:34 PM Eric Dumazet <edumazet@google.com> wrote:
>>
>>> We must accept an empty mask in store_rps_map(), or we are not able
>>> to disable RPS on a queue.
>>>
>>> Fixes: 07bbecb34106 ("net: Restrict receive packets queuing to
>>> housekeeping CPUs")
>>> Signed-off-by: Eric Dumazet <edumazet@google.com>
>>> Reported-by: Maciej Żenczykowski <maze@google.com>
>>> Cc: Alex Belits <abelits@marvell.com>
>>> Cc: Nitesh Narayan Lal <nitesh@redhat.com>
>>> Cc: Peter Zijlstra (Intel) <peterz@infradead.org>
>>> ---
>>>  net/core/net-sysfs.c | 12 +++++++-----
>>>  1 file changed, 7 insertions(+), 5 deletions(-)
>>>
>>> diff --git a/net/core/net-sysfs.c b/net/core/net-sysfs.c
>>> index
>>> 9de33b594ff2693c054022a42703c90084122444..efec66fa78b70b2fe5b0a5920317eb1d0415d9e3
>>> 100644
>>> --- a/net/core/net-sysfs.c
>>> +++ b/net/core/net-sysfs.c
>>> @@ -757,11 +757,13 @@ static ssize_t store_rps_map(struct netdev_rx_queue
>>> *queue,
>>>                 return err;
>>>         }
>>>
>>> -       hk_flags = HK_FLAG_DOMAIN | HK_FLAG_WQ;
>>> -       cpumask_and(mask, mask, housekeeping_cpumask(hk_flags));
>>> -       if (cpumask_empty(mask)) {
>>> -               free_cpumask_var(mask);
>>> -               return -EINVAL;
>>> +       if (!cpumask_empty(mask)) {
>>> +               hk_flags = HK_FLAG_DOMAIN | HK_FLAG_WQ;
>>> +               cpumask_and(mask, mask, housekeeping_cpumask(hk_flags));
>>> +               if (cpumask_empty(mask)) {
>>> +                       free_cpumask_var(mask);
>>> +                       return -EINVAL;
>>> +               }
>>>         }
> 
> Ah indeed! Sorry about that.
> 
> Acked-by: Peter Zijlstra (Intel) <peterz@infradead.org>
> 

No worries, thanks for the review guys.

We probably should add a test doing something like

echo ffffffff >/sys/class/net/lo/queues/rx-0/rps_cpus
echo 0 >/sys/class/net/lo/queues/rx-0/rps_cpus


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

* Re: [PATCH net] net: accept an empty mask in /sys/class/net/*/queues/rx-*/rps_cpus
  2020-08-12  1:34 [PATCH net] net: accept an empty mask in /sys/class/net/*/queues/rx-*/rps_cpus Eric Dumazet
                   ` (3 preceding siblings ...)
  2020-08-12 12:53 ` Nitesh Narayan Lal
@ 2020-08-12 21:25 ` David Miller
  4 siblings, 0 replies; 11+ messages in thread
From: David Miller @ 2020-08-12 21:25 UTC (permalink / raw)
  To: edumazet; +Cc: netdev, eric.dumazet, maze, abelits, nitesh, peterz

From: Eric Dumazet <edumazet@google.com>
Date: Tue, 11 Aug 2020 18:34:40 -0700

> We must accept an empty mask in store_rps_map(), or we are not able
> to disable RPS on a queue.
> 
> Fixes: 07bbecb34106 ("net: Restrict receive packets queuing to housekeeping CPUs")
> Signed-off-by: Eric Dumazet <edumazet@google.com>
> Reported-by: Maciej Żenczykowski <maze@google.com>

Applied, thanks Eric.

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

end of thread, other threads:[~2020-08-12 21:25 UTC | newest]

Thread overview: 11+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2020-08-12  1:34 [PATCH net] net: accept an empty mask in /sys/class/net/*/queues/rx-*/rps_cpus Eric Dumazet
2020-08-12  2:25 ` Maciej Żenczykowski
2020-08-12  3:16 ` David Ahern
2020-08-12  3:18   ` David Ahern
2020-08-12  3:19   ` Maciej Żenczykowski
2020-08-12  3:22     ` David Ahern
2020-08-12  3:27       ` Eric Dumazet
     [not found] ` <CANP3RGc6Gz73Gt3v9M7KYNeNd57o--=3mF6yqdRjqOViG+TG7A@mail.gmail.com>
2020-08-12  8:00   ` peterz
2020-08-12 15:19     ` Eric Dumazet
2020-08-12 12:53 ` Nitesh Narayan Lal
2020-08-12 21:25 ` David Miller

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).