Message ID | 20231204102027.57185-6-ryan.roberts@arm.com (mailing list archive) |
---|---|
State | New |
Headers | show |
Series | Multi-size THP for anonymous memory | expand |
On 04.12.23 11:20, Ryan Roberts wrote: > 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. > > Reviewed-by: Alistair Popple <apopple@nvidia.com> > Signed-off-by: Ryan Roberts <ryan.roberts@arm.com> > --- > tools/testing/selftests/mm/khugepaged.c | 17 +++++++++++------ > 1 file changed, 11 insertions(+), 6 deletions(-) > > diff --git a/tools/testing/selftests/mm/khugepaged.c b/tools/testing/selftests/mm/khugepaged.c > index 030667cb5533..fc47a1c4944c 100644 > --- a/tools/testing/selftests/mm/khugepaged.c > +++ b/tools/testing/selftests/mm/khugepaged.c > @@ -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); Reviewed-by: David Hildenbrand <david@redhat.com> Might similarly come in handy for the cow tests. Can be done later.
diff --git a/tools/testing/selftests/mm/khugepaged.c b/tools/testing/selftests/mm/khugepaged.c index 030667cb5533..fc47a1c4944c 100644 --- a/tools/testing/selftests/mm/khugepaged.c +++ b/tools/testing/selftests/mm/khugepaged.c @@ -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);