]> www.infradead.org Git - users/hch/dma-mapping.git/commitdiff
selftests: mm: restore settings from only parent process
authorMuhammad Usama Anjum <usama.anjum@collabora.com>
Thu, 14 Mar 2024 09:40:45 +0000 (14:40 +0500)
committerAndrew Morton <akpm@linux-foundation.org>
Tue, 26 Mar 2024 18:07:21 +0000 (11:07 -0700)
The atexit() is called from parent process as well as forked processes.
Hence the child restores the settings at exit while the parent is still
executing.  Fix this by checking pid of atexit() calling process and only
restore THP number from parent process.

Link: https://lkml.kernel.org/r/20240314094045.157149-1-usama.anjum@collabora.com
Fixes: c23ea61726d5 ("selftests/mm: protection_keys: save/restore nr_hugepages settings")
Signed-off-by: Muhammad Usama Anjum <usama.anjum@collabora.com>
Tested-by: Joey Gouly <joey.gouly@arm.com>
Cc: Shuah Khan <shuah@kernel.org>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
tools/testing/selftests/mm/protection_keys.c

index f822ae31af22e20103900084f71e280e182a310a..374a308174d2ba7c17f496a4c94364e34815e355 100644 (file)
@@ -1745,9 +1745,12 @@ void pkey_setup_shadow(void)
        shadow_pkey_reg = __read_pkey_reg();
 }
 
+pid_t parent_pid;
+
 void restore_settings_atexit(void)
 {
-       cat_into_file(buf, "/proc/sys/vm/nr_hugepages");
+       if (parent_pid == getpid())
+               cat_into_file(buf, "/proc/sys/vm/nr_hugepages");
 }
 
 void save_settings(void)
@@ -1773,6 +1776,7 @@ void save_settings(void)
                exit(__LINE__);
        }
 
+       parent_pid = getpid();
        atexit(restore_settings_atexit);
        close(fd);
 }