mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-09-22 04:31:58 +08:00
selftests/mm/kugepaged: restore thp settings at exit
Previously, the saved thp settings would be restored upon a signal or at the natural end of the test suite. But there are some tests that directly call exit() upon failure. In this case, the thp settings were not being restored, which could then influence other tests. Fix this by installing an atexit() handler to do the actual restore. The signal handler can now just call exit() and the atexit handler is invoked. Link: https://lkml.kernel.org/r/20231207161211.2374093-6-ryan.roberts@arm.com Signed-off-by: Ryan Roberts <ryan.roberts@arm.com> Reviewed-by: Alistair Popple <apopple@nvidia.com> Reviewed-by: David Hildenbrand <david@redhat.com> Tested-by: Kefeng Wang <wangkefeng.wang@huawei.com> Tested-by: John Hubbard <jhubbard@nvidia.com> Cc: Anshuman Khandual <anshuman.khandual@arm.com> Cc: Barry Song <v-songbaohua@oppo.com> Cc: Catalin Marinas <catalin.marinas@arm.com> Cc: David Rientjes <rientjes@google.com> Cc: "Huang, Ying" <ying.huang@intel.com> Cc: Hugh Dickins <hughd@google.com> Cc: Itaru Kitayama <itaru.kitayama@gmail.com> Cc: Kirill A. Shutemov <kirill.shutemov@linux.intel.com> Cc: Luis Chamberlain <mcgrof@kernel.org> Cc: Matthew Wilcox (Oracle) <willy@infradead.org> Cc: Vlastimil Babka <vbabka@suse.cz> Cc: Yang Shi <shy828301@gmail.com> Cc: Yin Fengwei <fengwei.yin@intel.com> Cc: Yu Zhao <yuzhao@google.com> Cc: Zi Yan <ziy@nvidia.com> Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
This commit is contained in:
parent
19eaf44954
commit
b6aab3384c
@ -374,18 +374,22 @@ static void pop_settings(void)
|
||||
write_settings(current_settings());
|
||||
}
|
||||
|
||||
static void restore_settings(int sig)
|
||||
static void restore_settings_atexit(void)
|
||||
{
|
||||
if (skip_settings_restore)
|
||||
goto out;
|
||||
return;
|
||||
|
||||
printf("Restore THP and khugepaged settings...");
|
||||
write_settings(&saved_settings);
|
||||
success("OK");
|
||||
if (sig)
|
||||
exit(EXIT_FAILURE);
|
||||
out:
|
||||
exit(exit_status);
|
||||
|
||||
skip_settings_restore = true;
|
||||
}
|
||||
|
||||
static void restore_settings(int sig)
|
||||
{
|
||||
/* exit() will invoke the restore_settings_atexit handler. */
|
||||
exit(sig ? EXIT_FAILURE : exit_status);
|
||||
}
|
||||
|
||||
static void save_settings(void)
|
||||
@ -415,6 +419,7 @@ static void save_settings(void)
|
||||
|
||||
success("OK");
|
||||
|
||||
atexit(restore_settings_atexit);
|
||||
signal(SIGTERM, restore_settings);
|
||||
signal(SIGINT, restore_settings);
|
||||
signal(SIGHUP, restore_settings);
|
||||
|
Loading…
Reference in New Issue
Block a user