selftests/mm: mremap_test: fix build warning

Message ID 20240111082039.3398848-1-usama.anjum@collabora.com
State New
Headers
Series selftests/mm: mremap_test: fix build warning |

Commit Message

Muhammad Usama Anjum Jan. 11, 2024, 8:20 a.m. UTC
  Fix following build warning:
warning: format ‘%d’ expects argument of type ‘int’, but argument 2 has type ‘long long unsigned int’

Fixes: a4cb3b243343 ("selftests: mm: add a test for remapping to area immediately after existing mapping")
Signed-off-by: Muhammad Usama Anjum <usama.anjum@collabora.com>
---
 tools/testing/selftests/mm/mremap_test.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
  

Comments

Andrew Morton Jan. 11, 2024, 9:14 p.m. UTC | #1
On Thu, 11 Jan 2024 13:20:38 +0500 Muhammad Usama Anjum <usama.anjum@collabora.com> wrote:

> Fix following build warning:
> warning: format ‘%d’ expects argument of type ‘int’, but argument 2 has type ‘long long unsigned int’
> 

Looks good to me, but... grumble.

`i' is an integer.  That's just how it is, Blame Fortran if you like. 
Discovering that someone used `i' for an unsigned long long is like
seeing

	struct inode *page;

It is surprising, and readers shouldn't be subjected to surprises.

`i' is used in two ways here.  Twice to iterate across threshold values
(as a ULL) and once to iterate across dest_preamble_size, which is an
int.  It would be better to have two different variables for the two
different uses.  Ones with more appropriate names than `i'.
  
Muhammad Usama Anjum Jan. 12, 2024, 6:50 a.m. UTC | #2
On 1/12/24 2:14 AM, Andrew Morton wrote:
> On Thu, 11 Jan 2024 13:20:38 +0500 Muhammad Usama Anjum <usama.anjum@collabora.com> wrote:
> 
>> Fix following build warning:
>> warning: format ‘%d’ expects argument of type ‘int’, but argument 2 has type ‘long long unsigned int’
>>
> 
> Looks good to me, but... grumble.
> 
> `i' is an integer.  That's just how it is, Blame Fortran if you like. 
Didn't know this. Thanks for sharing. I'll send a v2 by using two variables.

> Discovering that someone used `i' for an unsigned long long is like
> seeing
> 
> 	struct inode *page;
> 
> It is surprising, and readers shouldn't be subjected to surprises.
> 
> `i' is used in two ways here.  Twice to iterate across threshold values
> (as a ULL) and once to iterate across dest_preamble_size, which is an
> int.  It would be better to have two different variables for the two
> different uses.  Ones with more appropriate names than `i'.
>
  

Patch

diff --git a/tools/testing/selftests/mm/mremap_test.c b/tools/testing/selftests/mm/mremap_test.c
index 1d4c1589c305..dd1cbb068982 100644
--- a/tools/testing/selftests/mm/mremap_test.c
+++ b/tools/testing/selftests/mm/mremap_test.c
@@ -457,7 +457,7 @@  static long long remap_region(struct config c, unsigned int threshold_mb,
 			char c = (char) rand();
 
 			if (((char *) dest_preamble_addr)[i] != c) {
-				ksft_print_msg("Preamble data after remap doesn't match at offset %d\n",
+				ksft_print_msg("Preamble data after remap doesn't match at offset %llu\n",
 					       i);
 				ksft_print_msg("Expected: %#x\t Got: %#x\n", c & 0xff,
 					       ((char *) dest_preamble_addr)[i] & 0xff);