Re: [PATCH] mm/mempolicy.c: forbid static or relative flags for local NUMA mode
From: Piotr Kwapulinski <hidden>
Date: 2016-09-20 16:24:02
Also in:
linux-api, linux-man, lkml
On Tue, Sep 20, 2016 at 05:12:16PM +0200, Vlastimil Babka wrote:
[CC += linux-api@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-api@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:quoted
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().
Vlastimilquoted
Isolated tests done. Signed-off-by: Piotr Kwapulinski <redacted> --- 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 -- To unsubscribe, send a message with 'unsubscribe linux-mm' in the body to majordomo@kvack.org. For more info on Linux MM, see: http://www.linux-mm.org/ . Don't email: <a href=mailto:"dont@kvack.org"> email@kvack.org </a>