* [PATCH v2 1/3] selftests/mm: compaction_test: Fix bogus test success on Aarch64 [not found] <20240521063755.666388-1-dev.jain@arm.com> @ 2024-05-21 6:37 ` Dev Jain 2024-05-21 6:41 ` Dev Jain 0 siblings, 1 reply; 3+ messages in thread From: Dev Jain @ 2024-05-21 6:37 UTC (permalink / raw) To: dev.jain; +Cc: stable Currently, if at runtime we are not able to allocate a huge page, the test will trivially pass on Aarch64 due to no exception being raised on division by zero while computing compaction_index. Fix that by checking for nr_hugepages == 0. Anyways, in general, avoid a division by zero by exiting the program beforehand. While at it, fix a typo. Changes in v2: - Combine with this series, handle unsigned long number of hugepages Fixes: bd67d5c15cc1 ("Test compaction of mlocked memory") Cc: stable@vger.kernel.org Signed-off-by: Dev Jain <dev.jain@arm.com> --- tools/testing/selftests/mm/compaction_test.c | 20 +++++++++++++------- 1 file changed, 13 insertions(+), 7 deletions(-) diff --git a/tools/testing/selftests/mm/compaction_test.c b/tools/testing/selftests/mm/compaction_test.c index 4f42eb7d7636..0b249a06a60b 100644 --- a/tools/testing/selftests/mm/compaction_test.c +++ b/tools/testing/selftests/mm/compaction_test.c @@ -82,12 +82,13 @@ int prereq(void) return -1; } -int check_compaction(unsigned long mem_free, unsigned int hugepage_size) +int check_compaction(unsigned long mem_free, unsigned long hugepage_size) { + unsigned long nr_hugepages_ul; int fd, ret = -1; int compaction_index = 0; - char initial_nr_hugepages[10] = {0}; - char nr_hugepages[10] = {0}; + char initial_nr_hugepages[20] = {0}; + char nr_hugepages[20] = {0}; /* We want to test with 80% of available memory. Else, OOM killer comes in to play */ @@ -134,7 +135,12 @@ int check_compaction(unsigned long mem_free, unsigned int hugepage_size) /* We should have been able to request at least 1/3 rd of the memory in huge pages */ - compaction_index = mem_free/(atoi(nr_hugepages) * hugepage_size); + nr_hugepages_ul = strtoul(nr_hugepages, NULL, 10); + if (!nr_hugepages_ul) { + ksft_print_msg("ERROR: No memory is available as huge pages\n"); + goto close_fd; + } + compaction_index = mem_free/(nr_hugepages_ul * hugepage_size); lseek(fd, 0, SEEK_SET); @@ -145,11 +151,11 @@ int check_compaction(unsigned long mem_free, unsigned int hugepage_size) goto close_fd; } - ksft_print_msg("Number of huge pages allocated = %d\n", - atoi(nr_hugepages)); + ksft_print_msg("Number of huge pages allocated = %lu\n", + nr_hugepages_ul); if (compaction_index > 3) { - ksft_print_msg("ERROR: Less that 1/%d of memory is available\n" + ksft_print_msg("ERROR: Less than 1/%d of memory is available\n" "as huge pages\n", compaction_index); goto close_fd; } -- 2.34.1 ^ permalink raw reply related [flat|nested] 3+ messages in thread
* Re: [PATCH v2 1/3] selftests/mm: compaction_test: Fix bogus test success on Aarch64 2024-05-21 6:37 ` [PATCH v2 1/3] selftests/mm: compaction_test: Fix bogus test success on Aarch64 Dev Jain @ 2024-05-21 6:41 ` Dev Jain 0 siblings, 0 replies; 3+ messages in thread From: Dev Jain @ 2024-05-21 6:41 UTC (permalink / raw) To: Dev Jain; +Cc: stable Sorry, I was just sending to myself for testing, git send-email picked up stable@vger.kernel.org too. Please ignore this. On 5/21/24 12:07, Dev Jain wrote: > Currently, if at runtime we are not able to allocate a huge page, the > test will trivially pass on Aarch64 due to no exception being raised on > division by zero while computing compaction_index. Fix that by checking > for nr_hugepages == 0. Anyways, in general, avoid a division by zero by > exiting the program beforehand. While at it, fix a typo. > > Changes in v2: > - Combine with this series, handle unsigned long number of hugepages > > Fixes: bd67d5c15cc1 ("Test compaction of mlocked memory") > Cc: stable@vger.kernel.org > Signed-off-by: Dev Jain <dev.jain@arm.com> > --- > tools/testing/selftests/mm/compaction_test.c | 20 +++++++++++++------- > 1 file changed, 13 insertions(+), 7 deletions(-) > > diff --git a/tools/testing/selftests/mm/compaction_test.c b/tools/testing/selftests/mm/compaction_test.c > index 4f42eb7d7636..0b249a06a60b 100644 > --- a/tools/testing/selftests/mm/compaction_test.c > +++ b/tools/testing/selftests/mm/compaction_test.c > @@ -82,12 +82,13 @@ int prereq(void) > return -1; > } > > -int check_compaction(unsigned long mem_free, unsigned int hugepage_size) > +int check_compaction(unsigned long mem_free, unsigned long hugepage_size) > { > + unsigned long nr_hugepages_ul; > int fd, ret = -1; > int compaction_index = 0; > - char initial_nr_hugepages[10] = {0}; > - char nr_hugepages[10] = {0}; > + char initial_nr_hugepages[20] = {0}; > + char nr_hugepages[20] = {0}; > > /* We want to test with 80% of available memory. Else, OOM killer comes > in to play */ > @@ -134,7 +135,12 @@ int check_compaction(unsigned long mem_free, unsigned int hugepage_size) > > /* We should have been able to request at least 1/3 rd of the memory in > huge pages */ > - compaction_index = mem_free/(atoi(nr_hugepages) * hugepage_size); > + nr_hugepages_ul = strtoul(nr_hugepages, NULL, 10); > + if (!nr_hugepages_ul) { > + ksft_print_msg("ERROR: No memory is available as huge pages\n"); > + goto close_fd; > + } > + compaction_index = mem_free/(nr_hugepages_ul * hugepage_size); > > lseek(fd, 0, SEEK_SET); > > @@ -145,11 +151,11 @@ int check_compaction(unsigned long mem_free, unsigned int hugepage_size) > goto close_fd; > } > > - ksft_print_msg("Number of huge pages allocated = %d\n", > - atoi(nr_hugepages)); > + ksft_print_msg("Number of huge pages allocated = %lu\n", > + nr_hugepages_ul); > > if (compaction_index > 3) { > - ksft_print_msg("ERROR: Less that 1/%d of memory is available\n" > + ksft_print_msg("ERROR: Less than 1/%d of memory is available\n" > "as huge pages\n", compaction_index); > goto close_fd; > } ^ permalink raw reply [flat|nested] 3+ messages in thread
[parent not found: <20240521074358.675031-1-dev.jain@arm.com>]
* [PATCH v2 1/3] selftests/mm: compaction_test: Fix bogus test success on Aarch64 [not found] <20240521074358.675031-1-dev.jain@arm.com> @ 2024-05-21 7:43 ` Dev Jain 0 siblings, 0 replies; 3+ messages in thread From: Dev Jain @ 2024-05-21 7:43 UTC (permalink / raw) To: akpm, shuah Cc: linux-mm, linux-kselftest, linux-kernel, Anshuman.Khandual, sjayaram, Dev Jain, stable Currently, if at runtime we are not able to allocate a huge page, the test will trivially pass on Aarch64 due to no exception being raised on division by zero while computing compaction_index. Fix that by checking for nr_hugepages == 0. Anyways, in general, avoid a division by zero by exiting the program beforehand. While at it, fix a typo, and handle the case where the number of hugepages may overflow an integer. Changes in v2: - Combine with this series, handle unsigned long number of hugepages v1: - https://lore.kernel.org/all/20240513082842.4117782-1-dev.jain@arm.com/ Fixes: bd67d5c15cc1 ("Test compaction of mlocked memory") Cc: stable@vger.kernel.org Signed-off-by: Dev Jain <dev.jain@arm.com> --- tools/testing/selftests/mm/compaction_test.c | 20 +++++++++++++------- 1 file changed, 13 insertions(+), 7 deletions(-) diff --git a/tools/testing/selftests/mm/compaction_test.c b/tools/testing/selftests/mm/compaction_test.c index 4f42eb7d7636..0b249a06a60b 100644 --- a/tools/testing/selftests/mm/compaction_test.c +++ b/tools/testing/selftests/mm/compaction_test.c @@ -82,12 +82,13 @@ int prereq(void) return -1; } -int check_compaction(unsigned long mem_free, unsigned int hugepage_size) +int check_compaction(unsigned long mem_free, unsigned long hugepage_size) { + unsigned long nr_hugepages_ul; int fd, ret = -1; int compaction_index = 0; - char initial_nr_hugepages[10] = {0}; - char nr_hugepages[10] = {0}; + char initial_nr_hugepages[20] = {0}; + char nr_hugepages[20] = {0}; /* We want to test with 80% of available memory. Else, OOM killer comes in to play */ @@ -134,7 +135,12 @@ int check_compaction(unsigned long mem_free, unsigned int hugepage_size) /* We should have been able to request at least 1/3 rd of the memory in huge pages */ - compaction_index = mem_free/(atoi(nr_hugepages) * hugepage_size); + nr_hugepages_ul = strtoul(nr_hugepages, NULL, 10); + if (!nr_hugepages_ul) { + ksft_print_msg("ERROR: No memory is available as huge pages\n"); + goto close_fd; + } + compaction_index = mem_free/(nr_hugepages_ul * hugepage_size); lseek(fd, 0, SEEK_SET); @@ -145,11 +151,11 @@ int check_compaction(unsigned long mem_free, unsigned int hugepage_size) goto close_fd; } - ksft_print_msg("Number of huge pages allocated = %d\n", - atoi(nr_hugepages)); + ksft_print_msg("Number of huge pages allocated = %lu\n", + nr_hugepages_ul); if (compaction_index > 3) { - ksft_print_msg("ERROR: Less that 1/%d of memory is available\n" + ksft_print_msg("ERROR: Less than 1/%d of memory is available\n" "as huge pages\n", compaction_index); goto close_fd; } -- 2.34.1 ^ permalink raw reply related [flat|nested] 3+ messages in thread
end of thread, other threads:[~2024-05-21 7:44 UTC | newest]
Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
[not found] <20240521063755.666388-1-dev.jain@arm.com>
2024-05-21 6:37 ` [PATCH v2 1/3] selftests/mm: compaction_test: Fix bogus test success on Aarch64 Dev Jain
2024-05-21 6:41 ` Dev Jain
[not found] <20240521074358.675031-1-dev.jain@arm.com>
2024-05-21 7:43 ` Dev Jain
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox