Re: [PATCH] mm/mempolicy.c: forbid static or relative flags for local NUMA mode

2016-09-20 Thread David Rientjes
On Tue, 20 Sep 2016, Piotr Kwapulinski wrote:

> > There wasn't an MPOL_LOCAL when I introduced either of these flags, it's 
> > an oversight to allow them to be passed.
> > 
> > Want to try to update set_mempolicy(2) with the procedure outlined in 
> > https://www.kernel.org/doc/man-pages/patches.html as well?
> Yes, why not ? I'll put a note about it.
> 

Thanks!  While you're hacking on this area and everything is familiar to 
you, I'm sure the man page would benefit from as extensive update as 
you're willing to do.


Re: [PATCH] mm/mempolicy.c: forbid static or relative flags for local NUMA mode

2016-09-20 Thread David Rientjes
On Tue, 20 Sep 2016, Piotr Kwapulinski wrote:

> > There wasn't an MPOL_LOCAL when I introduced either of these flags, it's 
> > an oversight to allow them to be passed.
> > 
> > Want to try to update set_mempolicy(2) with the procedure outlined in 
> > https://www.kernel.org/doc/man-pages/patches.html as well?
> Yes, why not ? I'll put a note about it.
> 

Thanks!  While you're hacking on this area and everything is familiar to 
you, I'm sure the man page would benefit from as extensive update as 
you're willing to do.


Re: [PATCH] mm/mempolicy.c: forbid static or relative flags for local NUMA mode

2016-09-20 Thread Piotr Kwapulinski
On Tue, Sep 20, 2016 at 05:12:16PM +0200, Vlastimil Babka wrote:
> [CC += linux-...@vger.kernel.org]
> 
> Since this is a kernel-user-space API change, please CC linux-api@. The
> kernel source file Documentation/SubmitChecklist notes that all Linux kernel
> patches that change userspace interfaces should be CCed to
> linux-...@vger.kernel.org, so that the various parties who are interested in
> API changes are informed. For further information, see
> https://www.kernel.org/doc/man-pages/linux-api-ml.html
> 
> I think man page should document the change? Also I noticed that MPOL_NUMA
> itself is missing in the man page...
> 
> On 09/18/2016 01:29 PM, Piotr Kwapulinski wrote:
> > The MPOL_F_STATIC_NODES and MPOL_F_RELATIVE_NODES flags are irrelevant
> > when setting them for MPOL_LOCAL NUMA memory policy via set_mempolicy.
> > Return the "invalid argument" from set_mempolicy whenever
> > any of these flags is passed along with MPOL_LOCAL.
> > It is consistent with MPOL_PREFERRED passed with empty nodemask.
> > It also slightly shortens the execution time in paths where these flags
> > are used e.g. when trying to rebind the NUMA nodes for changes in
> > cgroups cpuset mems (mpol_rebind_preferred()) or when just printing
> > the mempolicy structure (/proc/PID/numa_maps).
> 
> Hmm not sure I understand. How does change in mpol_new() affect
> mpol_rebind_preferred()?
When MPOL_LOCAL is passed to set_mempolicy along with empty nodemask 
it is transformed into MPOL_PREFERRED (inside mpol_new()).
Unlike MPOL_PREFERRED the MPOL_LOCAL may be set along with 
MPOL_F_STATIC_NODES or MPOL_F_RELATIVE_NODES flag (inconsistency).
Later on when the set of allowed NUMA nodes is changed by cgroups 
cpuset.mems the mpol_rebind_preferred() is called. Because one of
the flags is set the unnecessary code is executed. The same is for
mpol_to_str().

> 
> Vlastimil
> 
> > Isolated tests done.
> > 
> > Signed-off-by: Piotr Kwapulinski 
> > ---
> >  mm/mempolicy.c | 4 +++-
> >  1 file changed, 3 insertions(+), 1 deletion(-)
> > 
> > diff --git a/mm/mempolicy.c b/mm/mempolicy.c
> > index 2da72a5..27b07d1 100644
> > --- a/mm/mempolicy.c
> > +++ b/mm/mempolicy.c
> > @@ -276,7 +276,9 @@ static struct mempolicy *mpol_new(unsigned short mode, 
> > unsigned short flags,
> > return ERR_PTR(-EINVAL);
> > }
> > } else if (mode == MPOL_LOCAL) {
> > -   if (!nodes_empty(*nodes))
> > +   if (!nodes_empty(*nodes) ||
> > +   (flags & MPOL_F_STATIC_NODES) ||
> > +   (flags & MPOL_F_RELATIVE_NODES))
> > return ERR_PTR(-EINVAL);
> > mode = MPOL_PREFERRED;
> > } else if (nodes_empty(*nodes))
> > 
> 

--
Piotr Kwapulinski



Re: [PATCH] mm/mempolicy.c: forbid static or relative flags for local NUMA mode

2016-09-20 Thread Piotr Kwapulinski
On Tue, Sep 20, 2016 at 05:12:16PM +0200, Vlastimil Babka wrote:
> [CC += linux-...@vger.kernel.org]
> 
> Since this is a kernel-user-space API change, please CC linux-api@. The
> kernel source file Documentation/SubmitChecklist notes that all Linux kernel
> patches that change userspace interfaces should be CCed to
> linux-...@vger.kernel.org, so that the various parties who are interested in
> API changes are informed. For further information, see
> https://www.kernel.org/doc/man-pages/linux-api-ml.html
> 
> I think man page should document the change? Also I noticed that MPOL_NUMA
> itself is missing in the man page...
> 
> On 09/18/2016 01:29 PM, Piotr Kwapulinski wrote:
> > The MPOL_F_STATIC_NODES and MPOL_F_RELATIVE_NODES flags are irrelevant
> > when setting them for MPOL_LOCAL NUMA memory policy via set_mempolicy.
> > Return the "invalid argument" from set_mempolicy whenever
> > any of these flags is passed along with MPOL_LOCAL.
> > It is consistent with MPOL_PREFERRED passed with empty nodemask.
> > It also slightly shortens the execution time in paths where these flags
> > are used e.g. when trying to rebind the NUMA nodes for changes in
> > cgroups cpuset mems (mpol_rebind_preferred()) or when just printing
> > the mempolicy structure (/proc/PID/numa_maps).
> 
> Hmm not sure I understand. How does change in mpol_new() affect
> mpol_rebind_preferred()?
When MPOL_LOCAL is passed to set_mempolicy along with empty nodemask 
it is transformed into MPOL_PREFERRED (inside mpol_new()).
Unlike MPOL_PREFERRED the MPOL_LOCAL may be set along with 
MPOL_F_STATIC_NODES or MPOL_F_RELATIVE_NODES flag (inconsistency).
Later on when the set of allowed NUMA nodes is changed by cgroups 
cpuset.mems the mpol_rebind_preferred() is called. Because one of
the flags is set the unnecessary code is executed. The same is for
mpol_to_str().

> 
> Vlastimil
> 
> > Isolated tests done.
> > 
> > Signed-off-by: Piotr Kwapulinski 
> > ---
> >  mm/mempolicy.c | 4 +++-
> >  1 file changed, 3 insertions(+), 1 deletion(-)
> > 
> > diff --git a/mm/mempolicy.c b/mm/mempolicy.c
> > index 2da72a5..27b07d1 100644
> > --- a/mm/mempolicy.c
> > +++ b/mm/mempolicy.c
> > @@ -276,7 +276,9 @@ static struct mempolicy *mpol_new(unsigned short mode, 
> > unsigned short flags,
> > return ERR_PTR(-EINVAL);
> > }
> > } else if (mode == MPOL_LOCAL) {
> > -   if (!nodes_empty(*nodes))
> > +   if (!nodes_empty(*nodes) ||
> > +   (flags & MPOL_F_STATIC_NODES) ||
> > +   (flags & MPOL_F_RELATIVE_NODES))
> > return ERR_PTR(-EINVAL);
> > mode = MPOL_PREFERRED;
> > } else if (nodes_empty(*nodes))
> > 
> 

--
Piotr Kwapulinski



Re: [PATCH] mm/mempolicy.c: forbid static or relative flags for local NUMA mode

2016-09-20 Thread Piotr Kwapulinski
On Mon, Sep 19, 2016 at 05:57:17PM -0700, David Rientjes wrote:
> On Sun, 18 Sep 2016, Piotr Kwapulinski wrote:
> 
> > The MPOL_F_STATIC_NODES and MPOL_F_RELATIVE_NODES flags are irrelevant
> > when setting them for MPOL_LOCAL NUMA memory policy via set_mempolicy.
> > Return the "invalid argument" from set_mempolicy whenever
> > any of these flags is passed along with MPOL_LOCAL.
> > It is consistent with MPOL_PREFERRED passed with empty nodemask.
> > It also slightly shortens the execution time in paths where these flags
> > are used e.g. when trying to rebind the NUMA nodes for changes in
> > cgroups cpuset mems (mpol_rebind_preferred()) or when just printing
> > the mempolicy structure (/proc/PID/numa_maps).
> > Isolated tests done.
> > 
> > Signed-off-by: Piotr Kwapulinski 
> 
> Acked-by: David Rientjes 
> 
> There wasn't an MPOL_LOCAL when I introduced either of these flags, it's 
> an oversight to allow them to be passed.
> 
> Want to try to update set_mempolicy(2) with the procedure outlined in 
> https://www.kernel.org/doc/man-pages/patches.html as well?
Yes, why not ? I'll put a note about it.

--
Piotr Kwapulinski



Re: [PATCH] mm/mempolicy.c: forbid static or relative flags for local NUMA mode

2016-09-20 Thread Piotr Kwapulinski
On Mon, Sep 19, 2016 at 05:57:17PM -0700, David Rientjes wrote:
> On Sun, 18 Sep 2016, Piotr Kwapulinski wrote:
> 
> > The MPOL_F_STATIC_NODES and MPOL_F_RELATIVE_NODES flags are irrelevant
> > when setting them for MPOL_LOCAL NUMA memory policy via set_mempolicy.
> > Return the "invalid argument" from set_mempolicy whenever
> > any of these flags is passed along with MPOL_LOCAL.
> > It is consistent with MPOL_PREFERRED passed with empty nodemask.
> > It also slightly shortens the execution time in paths where these flags
> > are used e.g. when trying to rebind the NUMA nodes for changes in
> > cgroups cpuset mems (mpol_rebind_preferred()) or when just printing
> > the mempolicy structure (/proc/PID/numa_maps).
> > Isolated tests done.
> > 
> > Signed-off-by: Piotr Kwapulinski 
> 
> Acked-by: David Rientjes 
> 
> There wasn't an MPOL_LOCAL when I introduced either of these flags, it's 
> an oversight to allow them to be passed.
> 
> Want to try to update set_mempolicy(2) with the procedure outlined in 
> https://www.kernel.org/doc/man-pages/patches.html as well?
Yes, why not ? I'll put a note about it.

--
Piotr Kwapulinski



Re: [PATCH] mm/mempolicy.c: forbid static or relative flags for local NUMA mode

2016-09-20 Thread Piotr Kwapulinski
On Mon, Sep 19, 2016 at 01:52:05PM +0200, Michal Hocko wrote:
> On Sun 18-09-16 13:29:43, Piotr Kwapulinski wrote:
> > The MPOL_F_STATIC_NODES and MPOL_F_RELATIVE_NODES flags are irrelevant
> > when setting them for MPOL_LOCAL NUMA memory policy via set_mempolicy.
> > Return the "invalid argument" from set_mempolicy whenever
> > any of these flags is passed along with MPOL_LOCAL.
> 
> man 2 set_mempolicy doesn't list this as invalid option. Maybe this is a
> documentation bug but is it possible that somebody will see this as an
> unexpected error?
> 
The MPOL_LOCAL is currently not documented in "man set_mempolicy(2)".
In case the nodemask is empty for MPOL_LOCAL it is transformed into 
MPOL_PREFERRED.
The motivation for disabling MPOL_F_STATIC_NODES and MPOL_F_RELATIVE_NODES
flags for MPOL_PREFERRED with empty nodemask is described at this commit
3e1f064562fcff7. Currently I call set_mempolicy(MPOL_LOCAL, ...) via the 
syscall()
but despite of that it is inconsistent with MPOL_PREFERRED.

> > It is consistent with MPOL_PREFERRED passed with empty nodemask.
> > It also slightly shortens the execution time in paths where these flags
> > are used e.g. when trying to rebind the NUMA nodes for changes in
> > cgroups cpuset mems (mpol_rebind_preferred()) or when just printing
> > the mempolicy structure (/proc/PID/numa_maps).
> 
> I am not sure I understand this argument. What does this patch actually
> fix? If this is about the execution time then why not just bail out
> early when MPOL_LOCAL && (MPOL_F_STATIC_NODES || MPOL_F_RELATIVE_NODES)
>
The mpol_new() performs additional checks on nodemask.

> > Isolated tests done.
> > 
> > Signed-off-by: Piotr Kwapulinski 
> > ---
> >  mm/mempolicy.c | 4 +++-
> >  1 file changed, 3 insertions(+), 1 deletion(-)
> > 
> > diff --git a/mm/mempolicy.c b/mm/mempolicy.c
> > index 2da72a5..27b07d1 100644
> > --- a/mm/mempolicy.c
> > +++ b/mm/mempolicy.c
> > @@ -276,7 +276,9 @@ static struct mempolicy *mpol_new(unsigned short mode, 
> > unsigned short flags,
> > return ERR_PTR(-EINVAL);
> > }
> > } else if (mode == MPOL_LOCAL) {
> > -   if (!nodes_empty(*nodes))
> > +   if (!nodes_empty(*nodes) ||
> > +   (flags & MPOL_F_STATIC_NODES) ||
> > +   (flags & MPOL_F_RELATIVE_NODES))
> > return ERR_PTR(-EINVAL);
> > mode = MPOL_PREFERRED;
> > } else if (nodes_empty(*nodes))
> > -- 
> > 2.9.2
> 
> -- 
> Michal Hocko
> SUSE Labs

--
Piotr Kwapulinski


Re: [PATCH] mm/mempolicy.c: forbid static or relative flags for local NUMA mode

2016-09-20 Thread Piotr Kwapulinski
On Mon, Sep 19, 2016 at 01:52:05PM +0200, Michal Hocko wrote:
> On Sun 18-09-16 13:29:43, Piotr Kwapulinski wrote:
> > The MPOL_F_STATIC_NODES and MPOL_F_RELATIVE_NODES flags are irrelevant
> > when setting them for MPOL_LOCAL NUMA memory policy via set_mempolicy.
> > Return the "invalid argument" from set_mempolicy whenever
> > any of these flags is passed along with MPOL_LOCAL.
> 
> man 2 set_mempolicy doesn't list this as invalid option. Maybe this is a
> documentation bug but is it possible that somebody will see this as an
> unexpected error?
> 
The MPOL_LOCAL is currently not documented in "man set_mempolicy(2)".
In case the nodemask is empty for MPOL_LOCAL it is transformed into 
MPOL_PREFERRED.
The motivation for disabling MPOL_F_STATIC_NODES and MPOL_F_RELATIVE_NODES
flags for MPOL_PREFERRED with empty nodemask is described at this commit
3e1f064562fcff7. Currently I call set_mempolicy(MPOL_LOCAL, ...) via the 
syscall()
but despite of that it is inconsistent with MPOL_PREFERRED.

> > It is consistent with MPOL_PREFERRED passed with empty nodemask.
> > It also slightly shortens the execution time in paths where these flags
> > are used e.g. when trying to rebind the NUMA nodes for changes in
> > cgroups cpuset mems (mpol_rebind_preferred()) or when just printing
> > the mempolicy structure (/proc/PID/numa_maps).
> 
> I am not sure I understand this argument. What does this patch actually
> fix? If this is about the execution time then why not just bail out
> early when MPOL_LOCAL && (MPOL_F_STATIC_NODES || MPOL_F_RELATIVE_NODES)
>
The mpol_new() performs additional checks on nodemask.

> > Isolated tests done.
> > 
> > Signed-off-by: Piotr Kwapulinski 
> > ---
> >  mm/mempolicy.c | 4 +++-
> >  1 file changed, 3 insertions(+), 1 deletion(-)
> > 
> > diff --git a/mm/mempolicy.c b/mm/mempolicy.c
> > index 2da72a5..27b07d1 100644
> > --- a/mm/mempolicy.c
> > +++ b/mm/mempolicy.c
> > @@ -276,7 +276,9 @@ static struct mempolicy *mpol_new(unsigned short mode, 
> > unsigned short flags,
> > return ERR_PTR(-EINVAL);
> > }
> > } else if (mode == MPOL_LOCAL) {
> > -   if (!nodes_empty(*nodes))
> > +   if (!nodes_empty(*nodes) ||
> > +   (flags & MPOL_F_STATIC_NODES) ||
> > +   (flags & MPOL_F_RELATIVE_NODES))
> > return ERR_PTR(-EINVAL);
> > mode = MPOL_PREFERRED;
> > } else if (nodes_empty(*nodes))
> > -- 
> > 2.9.2
> 
> -- 
> Michal Hocko
> SUSE Labs

--
Piotr Kwapulinski


Re: [PATCH] mm/mempolicy.c: forbid static or relative flags for local NUMA mode

2016-09-20 Thread Vlastimil Babka

[CC += linux-...@vger.kernel.org]

Since this is a kernel-user-space API change, please CC linux-api@. The 
kernel source file Documentation/SubmitChecklist notes that all Linux kernel 
patches that change userspace interfaces should be CCed to 
linux-...@vger.kernel.org, so that the various parties who are interested in API 
changes are informed. For further information, see 
https://www.kernel.org/doc/man-pages/linux-api-ml.html


I think man page should document the change? Also I noticed that MPOL_NUMA 
itself is missing in the man page...


On 09/18/2016 01:29 PM, Piotr Kwapulinski wrote:

The MPOL_F_STATIC_NODES and MPOL_F_RELATIVE_NODES flags are irrelevant
when setting them for MPOL_LOCAL NUMA memory policy via set_mempolicy.
Return the "invalid argument" from set_mempolicy whenever
any of these flags is passed along with MPOL_LOCAL.
It is consistent with MPOL_PREFERRED passed with empty nodemask.
It also slightly shortens the execution time in paths where these flags
are used e.g. when trying to rebind the NUMA nodes for changes in
cgroups cpuset mems (mpol_rebind_preferred()) or when just printing
the mempolicy structure (/proc/PID/numa_maps).


Hmm not sure I understand. How does change in mpol_new() affect 
mpol_rebind_preferred()?


Vlastimil


Isolated tests done.

Signed-off-by: Piotr Kwapulinski 
---
 mm/mempolicy.c | 4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)

diff --git a/mm/mempolicy.c b/mm/mempolicy.c
index 2da72a5..27b07d1 100644
--- a/mm/mempolicy.c
+++ b/mm/mempolicy.c
@@ -276,7 +276,9 @@ static struct mempolicy *mpol_new(unsigned short mode, 
unsigned short flags,
return ERR_PTR(-EINVAL);
}
} else if (mode == MPOL_LOCAL) {
-   if (!nodes_empty(*nodes))
+   if (!nodes_empty(*nodes) ||
+   (flags & MPOL_F_STATIC_NODES) ||
+   (flags & MPOL_F_RELATIVE_NODES))
return ERR_PTR(-EINVAL);
mode = MPOL_PREFERRED;
} else if (nodes_empty(*nodes))





Re: [PATCH] mm/mempolicy.c: forbid static or relative flags for local NUMA mode

2016-09-20 Thread Vlastimil Babka

[CC += linux-...@vger.kernel.org]

Since this is a kernel-user-space API change, please CC linux-api@. The 
kernel source file Documentation/SubmitChecklist notes that all Linux kernel 
patches that change userspace interfaces should be CCed to 
linux-...@vger.kernel.org, so that the various parties who are interested in API 
changes are informed. For further information, see 
https://www.kernel.org/doc/man-pages/linux-api-ml.html


I think man page should document the change? Also I noticed that MPOL_NUMA 
itself is missing in the man page...


On 09/18/2016 01:29 PM, Piotr Kwapulinski wrote:

The MPOL_F_STATIC_NODES and MPOL_F_RELATIVE_NODES flags are irrelevant
when setting them for MPOL_LOCAL NUMA memory policy via set_mempolicy.
Return the "invalid argument" from set_mempolicy whenever
any of these flags is passed along with MPOL_LOCAL.
It is consistent with MPOL_PREFERRED passed with empty nodemask.
It also slightly shortens the execution time in paths where these flags
are used e.g. when trying to rebind the NUMA nodes for changes in
cgroups cpuset mems (mpol_rebind_preferred()) or when just printing
the mempolicy structure (/proc/PID/numa_maps).


Hmm not sure I understand. How does change in mpol_new() affect 
mpol_rebind_preferred()?


Vlastimil


Isolated tests done.

Signed-off-by: Piotr Kwapulinski 
---
 mm/mempolicy.c | 4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)

diff --git a/mm/mempolicy.c b/mm/mempolicy.c
index 2da72a5..27b07d1 100644
--- a/mm/mempolicy.c
+++ b/mm/mempolicy.c
@@ -276,7 +276,9 @@ static struct mempolicy *mpol_new(unsigned short mode, 
unsigned short flags,
return ERR_PTR(-EINVAL);
}
} else if (mode == MPOL_LOCAL) {
-   if (!nodes_empty(*nodes))
+   if (!nodes_empty(*nodes) ||
+   (flags & MPOL_F_STATIC_NODES) ||
+   (flags & MPOL_F_RELATIVE_NODES))
return ERR_PTR(-EINVAL);
mode = MPOL_PREFERRED;
} else if (nodes_empty(*nodes))





Re: [PATCH] mm/mempolicy.c: forbid static or relative flags for local NUMA mode

2016-09-19 Thread David Rientjes
On Sun, 18 Sep 2016, Piotr Kwapulinski wrote:

> The MPOL_F_STATIC_NODES and MPOL_F_RELATIVE_NODES flags are irrelevant
> when setting them for MPOL_LOCAL NUMA memory policy via set_mempolicy.
> Return the "invalid argument" from set_mempolicy whenever
> any of these flags is passed along with MPOL_LOCAL.
> It is consistent with MPOL_PREFERRED passed with empty nodemask.
> It also slightly shortens the execution time in paths where these flags
> are used e.g. when trying to rebind the NUMA nodes for changes in
> cgroups cpuset mems (mpol_rebind_preferred()) or when just printing
> the mempolicy structure (/proc/PID/numa_maps).
> Isolated tests done.
> 
> Signed-off-by: Piotr Kwapulinski 

Acked-by: David Rientjes 

There wasn't an MPOL_LOCAL when I introduced either of these flags, it's 
an oversight to allow them to be passed.

Want to try to update set_mempolicy(2) with the procedure outlined in 
https://www.kernel.org/doc/man-pages/patches.html as well?


Re: [PATCH] mm/mempolicy.c: forbid static or relative flags for local NUMA mode

2016-09-19 Thread David Rientjes
On Sun, 18 Sep 2016, Piotr Kwapulinski wrote:

> The MPOL_F_STATIC_NODES and MPOL_F_RELATIVE_NODES flags are irrelevant
> when setting them for MPOL_LOCAL NUMA memory policy via set_mempolicy.
> Return the "invalid argument" from set_mempolicy whenever
> any of these flags is passed along with MPOL_LOCAL.
> It is consistent with MPOL_PREFERRED passed with empty nodemask.
> It also slightly shortens the execution time in paths where these flags
> are used e.g. when trying to rebind the NUMA nodes for changes in
> cgroups cpuset mems (mpol_rebind_preferred()) or when just printing
> the mempolicy structure (/proc/PID/numa_maps).
> Isolated tests done.
> 
> Signed-off-by: Piotr Kwapulinski 

Acked-by: David Rientjes 

There wasn't an MPOL_LOCAL when I introduced either of these flags, it's 
an oversight to allow them to be passed.

Want to try to update set_mempolicy(2) with the procedure outlined in 
https://www.kernel.org/doc/man-pages/patches.html as well?


Re: [PATCH] mm/mempolicy.c: forbid static or relative flags for local NUMA mode

2016-09-19 Thread Michal Hocko
On Sun 18-09-16 13:29:43, Piotr Kwapulinski wrote:
> The MPOL_F_STATIC_NODES and MPOL_F_RELATIVE_NODES flags are irrelevant
> when setting them for MPOL_LOCAL NUMA memory policy via set_mempolicy.
> Return the "invalid argument" from set_mempolicy whenever
> any of these flags is passed along with MPOL_LOCAL.

man 2 set_mempolicy doesn't list this as invalid option. Maybe this is a
documentation bug but is it possible that somebody will see this as an
unexpected error?

> It is consistent with MPOL_PREFERRED passed with empty nodemask.
> It also slightly shortens the execution time in paths where these flags
> are used e.g. when trying to rebind the NUMA nodes for changes in
> cgroups cpuset mems (mpol_rebind_preferred()) or when just printing
> the mempolicy structure (/proc/PID/numa_maps).

I am not sure I understand this argument. What does this patch actually
fix? If this is about the execution time then why not just bail out
early when MPOL_LOCAL && (MPOL_F_STATIC_NODES || MPOL_F_RELATIVE_NODES)

> Isolated tests done.
> 
> Signed-off-by: Piotr Kwapulinski 
> ---
>  mm/mempolicy.c | 4 +++-
>  1 file changed, 3 insertions(+), 1 deletion(-)
> 
> diff --git a/mm/mempolicy.c b/mm/mempolicy.c
> index 2da72a5..27b07d1 100644
> --- a/mm/mempolicy.c
> +++ b/mm/mempolicy.c
> @@ -276,7 +276,9 @@ static struct mempolicy *mpol_new(unsigned short mode, 
> unsigned short flags,
>   return ERR_PTR(-EINVAL);
>   }
>   } else if (mode == MPOL_LOCAL) {
> - if (!nodes_empty(*nodes))
> + if (!nodes_empty(*nodes) ||
> + (flags & MPOL_F_STATIC_NODES) ||
> + (flags & MPOL_F_RELATIVE_NODES))
>   return ERR_PTR(-EINVAL);
>   mode = MPOL_PREFERRED;
>   } else if (nodes_empty(*nodes))
> -- 
> 2.9.2

-- 
Michal Hocko
SUSE Labs


Re: [PATCH] mm/mempolicy.c: forbid static or relative flags for local NUMA mode

2016-09-19 Thread Michal Hocko
On Sun 18-09-16 13:29:43, Piotr Kwapulinski wrote:
> The MPOL_F_STATIC_NODES and MPOL_F_RELATIVE_NODES flags are irrelevant
> when setting them for MPOL_LOCAL NUMA memory policy via set_mempolicy.
> Return the "invalid argument" from set_mempolicy whenever
> any of these flags is passed along with MPOL_LOCAL.

man 2 set_mempolicy doesn't list this as invalid option. Maybe this is a
documentation bug but is it possible that somebody will see this as an
unexpected error?

> It is consistent with MPOL_PREFERRED passed with empty nodemask.
> It also slightly shortens the execution time in paths where these flags
> are used e.g. when trying to rebind the NUMA nodes for changes in
> cgroups cpuset mems (mpol_rebind_preferred()) or when just printing
> the mempolicy structure (/proc/PID/numa_maps).

I am not sure I understand this argument. What does this patch actually
fix? If this is about the execution time then why not just bail out
early when MPOL_LOCAL && (MPOL_F_STATIC_NODES || MPOL_F_RELATIVE_NODES)

> Isolated tests done.
> 
> Signed-off-by: Piotr Kwapulinski 
> ---
>  mm/mempolicy.c | 4 +++-
>  1 file changed, 3 insertions(+), 1 deletion(-)
> 
> diff --git a/mm/mempolicy.c b/mm/mempolicy.c
> index 2da72a5..27b07d1 100644
> --- a/mm/mempolicy.c
> +++ b/mm/mempolicy.c
> @@ -276,7 +276,9 @@ static struct mempolicy *mpol_new(unsigned short mode, 
> unsigned short flags,
>   return ERR_PTR(-EINVAL);
>   }
>   } else if (mode == MPOL_LOCAL) {
> - if (!nodes_empty(*nodes))
> + if (!nodes_empty(*nodes) ||
> + (flags & MPOL_F_STATIC_NODES) ||
> + (flags & MPOL_F_RELATIVE_NODES))
>   return ERR_PTR(-EINVAL);
>   mode = MPOL_PREFERRED;
>   } else if (nodes_empty(*nodes))
> -- 
> 2.9.2

-- 
Michal Hocko
SUSE Labs