On 6/6/23 12:16 PM, John Hubbard wrote: > Dummy variables are required in order to make these two (similar) > routines work, so in both cases, declare the variables as volatile in > order to avoid the clang compiler warning. > > Furthermore, in order to ensure that each test actually does what is > intended, add an asm volatile invocation (thanks to David Hildenbrand > for the suggestion), with a clarifying comment so that it survives > future maintenance. > > Reviewed-by: David Hildenbrand <david@xxxxxxxxxx> > Reviewed-by: Peter Xu <peterx@xxxxxxxxxx> > Signed-off-by: John Hubbard <jhubbard@xxxxxxxxxx> Tested-by: Muhammad Usama Anjum <usama.anjum@xxxxxxxxxxxxx> > --- > tools/testing/selftests/mm/hugetlb-madvise.c | 8 ++++++-- > tools/testing/selftests/mm/migration.c | 5 ++++- > 2 files changed, 10 insertions(+), 3 deletions(-) > > diff --git a/tools/testing/selftests/mm/hugetlb-madvise.c b/tools/testing/selftests/mm/hugetlb-madvise.c > index 28426e30d9bc..d55322df4b73 100644 > --- a/tools/testing/selftests/mm/hugetlb-madvise.c > +++ b/tools/testing/selftests/mm/hugetlb-madvise.c > @@ -65,11 +65,15 @@ void write_fault_pages(void *addr, unsigned long nr_pages) > > void read_fault_pages(void *addr, unsigned long nr_pages) > { > - unsigned long dummy = 0; > + volatile unsigned long dummy = 0; > unsigned long i; > > - for (i = 0; i < nr_pages; i++) > + for (i = 0; i < nr_pages; i++) { > dummy += *((unsigned long *)(addr + (i * huge_page_size))); > + > + /* Prevent the compiler from optimizing out the entire loop: */ > + asm volatile("" : "+r" (dummy)); > + } > } > > int main(int argc, char **argv) > diff --git a/tools/testing/selftests/mm/migration.c b/tools/testing/selftests/mm/migration.c > index 1cec8425e3ca..379581567f27 100644 > --- a/tools/testing/selftests/mm/migration.c > +++ b/tools/testing/selftests/mm/migration.c > @@ -95,12 +95,15 @@ int migrate(uint64_t *ptr, int n1, int n2) > > void *access_mem(void *ptr) > { > - uint64_t y = 0; > + volatile uint64_t y = 0; > volatile uint64_t *x = ptr; > > while (1) { > pthread_testcancel(); > y += *x; > + > + /* Prevent the compiler from optimizing out the writes to y: */ > + asm volatile("" : "+r" (y)); > } > > return NULL; -- BR, Muhammad Usama Anjum