On Wed, Apr 29, 2020 at 04:37:27PM +0530, Aneesh Kumar K.V wrote: > Some glibc version doesn't use CLONE_VM | CLONE_VFORK for system(3) implementation > and on such system, we find the test case fails. This is due to fork() marking > all the parent page table pages read-only to do a COW. > > Avoid the usage of system(3) in the test. > > Signed-off-by: Aneesh Kumar K.V <aneesh.kumar@xxxxxxxxxxxxx> Below is fixup for issues I've noticed. With them integrated the patch looks good to me and you can use my Acked-by: Kirill A. Shutemov <kirill.shutemov@xxxxxxxxxxxxxxx> diff --git a/tools/testing/selftests/vm/khugepaged.c b/tools/testing/selftests/vm/khugepaged.c index 9b2d675c0fd3..5d0698d4a101 100644 --- a/tools/testing/selftests/vm/khugepaged.c +++ b/tools/testing/selftests/vm/khugepaged.c @@ -345,7 +345,7 @@ static bool check_for_pattern(FILE *fp, char *pattern, char *buf) return false; } -static bool check_huge(char *addr) +static bool check_huge(void *addr) { bool thp = false; int ret; @@ -353,7 +353,8 @@ static bool check_huge(char *addr) char buffer[MAX_LINE_LENGTH]; char addr_pattern[MAX_LINE_LENGTH]; - ret = snprintf(addr_pattern, MAX_LINE_LENGTH, "%08llx-", addr); + ret = snprintf(addr_pattern, MAX_LINE_LENGTH, "%08lx-", + (unsigned long) addr); if (ret >= MAX_LINE_LENGTH) { printf("%s: Pattern is too long\n", __func__); exit(EXIT_FAILURE); @@ -368,7 +369,8 @@ static bool check_huge(char *addr) if (!check_for_pattern(fp, addr_pattern, buffer)) goto err_out; - ret = snprintf(addr_pattern, MAX_LINE_LENGTH, "AnonHugePages:%10lld kB", hpage_pmd_size >> 10); + ret = snprintf(addr_pattern, MAX_LINE_LENGTH, "AnonHugePages:%10ld kB", + hpage_pmd_size >> 10); if (ret >= MAX_LINE_LENGTH) { printf("%s: Pattern is too long\n", __func__); exit(EXIT_FAILURE); @@ -398,7 +400,8 @@ static bool check_swap(void *addr, unsigned long size) char buffer[MAX_LINE_LENGTH]; char addr_pattern[MAX_LINE_LENGTH]; - ret = snprintf(addr_pattern, MAX_LINE_LENGTH, "%08llx-", addr); + ret = snprintf(addr_pattern, MAX_LINE_LENGTH, "%08lx-", + (unsigned long) addr); if (ret >= MAX_LINE_LENGTH) { printf("%s: Pattern is too long\n", __func__); exit(EXIT_FAILURE); @@ -413,7 +416,8 @@ static bool check_swap(void *addr, unsigned long size) if (!check_for_pattern(fp, addr_pattern, buffer)) goto err_out; - ret = snprintf(addr_pattern, MAX_LINE_LENGTH, "Swap:%19lld kB", size >> 10); + ret = snprintf(addr_pattern, MAX_LINE_LENGTH, "Swap:%19ld kB", + size >> 10); if (ret >= MAX_LINE_LENGTH) { printf("%s: Pattern is too long\n", __func__); exit(EXIT_FAILURE); -- Kirill A. Shutemov