selftests/mm: compaction_test: Fix bogus test success on Aarch64
Subsystems (3)
A message that is not in the archive (sent off-list or not yet received): [email protected]
PATCH v2 1/3 selftests/mm: compaction_test: Fix bogus test success on Aarch64
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
--- tools/testing/selftests/mm/compaction_test.c | 20 +++++++++++++------- 1 file changed, 13 insertions(+), 7 deletions(-)
tools/testing/selftests/mm/compaction_test.c +13 -7
@@ -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; }
Signature · 1 line
2.34.1
Sorry, I was just sending to myself for testing, git send-email picked
up [email protected] too. Please ignore this.
Quoted 66 lines · Dev Jain
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 fornr_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 hugepagesFixes bd67d5c15cc1 ("Test compaction of mlocked memory")Signed-off-by Dev Jain <[email protected]>--- tools/testing/selftests/mm/compaction_test.c | 20 +++++++++++++------- 1 file changed, 13 insertions(+), 7 deletions(-)tools/testing/selftests/mm/compaction_test.c +13
-7@@ -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; }