| From: Pankaj Raghav <p.raghav@samsung.com> |
| Subject: selftests/mm: use asm volatile to not optimize mmap read variable |
| Date: Thu, 6 Jun 2024 20:36:19 +0000 |
| |
| create_pagecache_thp_and_fd() in split_huge_page_test.c used the variable |
| dummy to perform mmap read. |
| |
| However, this test was skipped even on XFS which has large folio support. |
| The issue was compiler (gcc 13.2.0) was optimizing out the dummy variable, |
| therefore, not creating huge page in the page cache. |
| |
| Use asm volatile() trick to force the compiler not to optimize out the |
| loop where we read from the mmaped addr. This is similar to what is being |
| done in other tests (cow.c, etc) |
| |
| As the variable is now used in the asm statement, remove the unused |
| attribute. |
| |
| Link: https://lkml.kernel.org/r/20240606203619.677276-1-kernel@pankajraghav.com |
| Signed-off-by: Pankaj Raghav <p.raghav@samsung.com> |
| Reviewed-by: Zi Yan <ziy@nvidia.com> |
| Acked-by: David Hildenbrand <david@redhat.com> |
| Cc: Luis Chamberlain <mcgrof@kernel.org> |
| Cc: Matthew Wilcox (Oracle) <willy@infradead.org> |
| Cc: Pankaj Raghav <p.raghav@samsung.com> |
| Cc: Shuah Khan <shuah@kernel.org> |
| Signed-off-by: Andrew Morton <akpm@linux-foundation.org> |
| --- |
| |
| tools/testing/selftests/mm/split_huge_page_test.c | 3 ++- |
| 1 file changed, 2 insertions(+), 1 deletion(-) |
| |
| --- a/tools/testing/selftests/mm/split_huge_page_test.c~selftests-mm-use-asm-volatile-to-not-optimize-mmap-read-variable |
| +++ a/tools/testing/selftests/mm/split_huge_page_test.c |
| @@ -300,7 +300,7 @@ int create_pagecache_thp_and_fd(const ch |
| char **addr) |
| { |
| size_t i; |
| - int __attribute__((unused)) dummy = 0; |
| + int dummy = 0; |
| |
| srand(time(NULL)); |
| |
| @@ -341,6 +341,7 @@ int create_pagecache_thp_and_fd(const ch |
| |
| for (size_t i = 0; i < fd_size; i++) |
| dummy += *(*addr + i); |
| + asm volatile("" : "+r" (dummy)); |
| |
| if (!check_huge_file(*addr, fd_size / pmd_pagesize, pmd_pagesize)) { |
| ksft_print_msg("No large pagecache folio generated, please provide a filesystem supporting large folio\n"); |
| _ |