NOTE: It's wise NOT to use safe macros in test cleanup(). This is because all safe macros call tst_brkm(), which exits the test immediately, making the cleanup() exit prematurely. (Actually, this is hacked around in the test library at the moment so that the cleanup() will finish, but the hack will be removed in the future).
Signed-off-by: Li Wang <li...@redhat.com> --- testcases/kernel/mem/thp/thp05.c | 69 ++++++++++++++++++++++++++++++++-------- 1 file changed, 56 insertions(+), 13 deletions(-) diff --git a/testcases/kernel/mem/thp/thp05.c b/testcases/kernel/mem/thp/thp05.c index 8b595ca..92d9610 100644 --- a/testcases/kernel/mem/thp/thp05.c +++ b/testcases/kernel/mem/thp/thp05.c @@ -66,6 +66,7 @@ option_t thp_options[] = { static int pre_thp_scan_sleep_millisecs; static int pre_thp_alloc_sleep_millisecs; static char pre_thp_enabled[BUFSIZ]; +static char buf[BUFSIZ], path[BUFSIZ]; int main(int argc, char *argv[]) { @@ -129,19 +130,61 @@ void setup(void) void cleanup(void) { - SAFE_FILE_PRINTF(NULL, PATH_KHPD "scan_sleep_millisecs", - "%d", pre_thp_scan_sleep_millisecs); - - SAFE_FILE_PRINTF(NULL, PATH_KHPD "alloc_sleep_millisecs", - "%d", pre_thp_alloc_sleep_millisecs); - - if (strcmp(pre_thp_enabled, "[always] madvise never") == 0) - SAFE_FILE_PRINTF(NULL, PATH_THP "enabled", "always"); - else if (strcmp(pre_thp_enabled, "always [madvise] never") == 0) - SAFE_FILE_PRINTF(NULL, PATH_THP "enabled", "madvise"); - else - SAFE_FILE_PRINTF(NULL, PATH_THP "enabled", "never"); - + int fd; + + /* restore the scan_sleep_millisecs to original value */ + snprintf(buf, BUFSIZ, "%d", pre_thp_scan_sleep_millisecs); + fd = open(PATH_KHPD "scan_sleep_millisecs", O_WRONLY); + if (fd == -1) + tst_resm(TWARN | TERRNO, "open"); + tst_resm(TINFO, "restore scan_sleep_millisecs to %d", + pre_thp_scan_sleep_millisecs); + if (write(fd, buf, strlen(buf)) != strlen(buf)) + tst_resm(TWARN | TERRNO, "write"); + close(fd); + + /* restore the alloc_sleep_millisecs to original value */ + snprintf(buf, BUFSIZ, "%d", pre_thp_alloc_sleep_millisecs); + fd = open(PATH_KHPD "alloc_sleep_millisecs", O_WRONLY); + if (fd == -1) + tst_resm(TWARN | TERRNO, "open"); + tst_resm(TINFO, "restore alloc_sleep_millisecs to %d", + pre_thp_alloc_sleep_millisecs); + if (write(fd, buf, strlen(buf)) != strlen(buf)) + tst_resm(TWARN | TERRNO, "write"); + close(fd); + + /* restore the transparent_hugepage options to original state */ + if (strcmp(pre_thp_enabled, "[always] madvise never") == 0){ + snprintf(path, BUFSIZ, "always"); + fd = open(PATH_THP "enabled", O_WRONLY); + if (fd == -1) + tst_resm(TWARN | TERRNO, "open"); + tst_resm(TINFO, "restore transparent_hugepage to %s", path); + if (write(fd, path, strlen(path)) != strlen(path)) + tst_resm(TWARN | TERRNO, "write"); + close(fd); + } + else if (strcmp(pre_thp_enabled, "always [madvise] never") == 0){ + snprintf(path, BUFSIZ, "madvise"); + fd = open(PATH_THP "enabled", O_WRONLY); + if (fd == -1) + tst_resm(TWARN | TERRNO, "open"); + tst_resm(TINFO, "restore transparent_hugepage to %s", path); + if (write(fd, path, strlen(path)) != strlen(path)) + tst_resm(TWARN | TERRNO, "write"); + close(fd); + } + else{ + snprintf(path, BUFSIZ, "never"); + fd = open(PATH_THP "enabled", O_WRONLY); + if (fd == -1) + tst_resm(TWARN | TERRNO, "open"); + tst_resm(TINFO, "restore transparent_hugepage to %s", path); + if (write(fd, path, strlen(path)) != strlen(path)) + tst_resm(TWARN | TERRNO, "write"); + close(fd); + } TEST_CLEANUP; } -- 1.9.3 ------------------------------------------------------------------------------ _______________________________________________ Ltp-list mailing list Ltp-list@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/ltp-list