Hi André, kernel test robot noticed the following build warnings: [auto build test WARNING on tip/locking/core] [also build test WARNING on linus/master v6.11-rc6 next-20240906] [If your patch is applied to the wrong git tree, kindly drop us a note. And when submitting patch, we suggest to use '--base' as documented in https://git-scm.com/docs/git-format-patch#_base_tree_information] url: https://github.com/intel-lab-lkp/linux/commits/Andr-Almeida/selftests-futex-Create-test-for-robust-list/20240903-214428 base: tip/locking/core patch link: https://lore.kernel.org/r/20240903134033.816500-1-andrealmeid%40igalia.com patch subject: [PATCH v2] selftests/futex: Create test for robust list :::::: branch date: 4 days ago :::::: commit date: 4 days ago compiler: clang version 18.1.5 (https://github.com/llvm/llvm-project 617a15a9eac96088ae5e9134248d8236e34b91b1) reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20240907/202409071354.clW9RcwR-lkp@xxxxxxxxx/reproduce) If you fix the issue in a separate patch/commit (i.e. not just a new version of the same patch/commit), kindly add following tags | Reported-by: kernel test robot <lkp@xxxxxxxxx> | Closes: https://lore.kernel.org/r/202409071354.clW9RcwR-lkp@xxxxxxxxx/ All warnings (new ones prefixed by >>): >> robust_list.c:117:44: warning: passing 'int *' to parameter of type 'unsigned int *' converts between pointers to integer types with different sign [-Wpointer-sign] 117 | if (atomic_compare_exchange_strong(futex, &zero, tid)) { | ^~~~~ /opt/cross/clang-617a15a9ea/lib/clang/18/include/stdatomic.h:144:112: note: expanded from macro 'atomic_compare_exchange_strong' 144 | #define atomic_compare_exchange_strong(object, expected, desired) __c11_atomic_compare_exchange_strong(object, expected, desired, __ATOMIC_SEQ_CST, __ATOMIC_SEQ_CST) | ^~~~~~~~ 1 warning generated. vim +117 tools/testing/selftests/futex/functional/robust_list.c 32807b4449f353 André Almeida 2024-09-03 101 32807b4449f353 André Almeida 2024-09-03 102 /* 32807b4449f353 André Almeida 2024-09-03 103 * A basic (and incomplete) mutex lock function with robustness 32807b4449f353 André Almeida 2024-09-03 104 */ 32807b4449f353 André Almeida 2024-09-03 105 static int mutex_lock(struct lock_struct *lock, struct robust_list_head *head, bool error_inject) 32807b4449f353 André Almeida 2024-09-03 106 { 32807b4449f353 André Almeida 2024-09-03 107 _Atomic(unsigned int) *futex = &lock->futex; 32807b4449f353 André Almeida 2024-09-03 108 int zero = 0, ret = -1; 32807b4449f353 André Almeida 2024-09-03 109 pid_t tid = gettid(); 32807b4449f353 André Almeida 2024-09-03 110 32807b4449f353 André Almeida 2024-09-03 111 /* 32807b4449f353 André Almeida 2024-09-03 112 * Set list_op_pending before starting the lock, so the kernel can catch 32807b4449f353 André Almeida 2024-09-03 113 * the case where the thread died during the lock operation 32807b4449f353 André Almeida 2024-09-03 114 */ 32807b4449f353 André Almeida 2024-09-03 115 head->list_op_pending = &lock->list; 32807b4449f353 André Almeida 2024-09-03 116 32807b4449f353 André Almeida 2024-09-03 @117 if (atomic_compare_exchange_strong(futex, &zero, tid)) { 32807b4449f353 André Almeida 2024-09-03 118 /* 32807b4449f353 André Almeida 2024-09-03 119 * We took the lock, insert it in the robust list 32807b4449f353 André Almeida 2024-09-03 120 */ 32807b4449f353 André Almeida 2024-09-03 121 struct robust_list *list = &head->list; 32807b4449f353 André Almeida 2024-09-03 122 32807b4449f353 André Almeida 2024-09-03 123 /* Error injection to test list_op_pending */ 32807b4449f353 André Almeida 2024-09-03 124 if (error_inject) 32807b4449f353 André Almeida 2024-09-03 125 return 0; 32807b4449f353 André Almeida 2024-09-03 126 32807b4449f353 André Almeida 2024-09-03 127 while (list->next != &head->list) 32807b4449f353 André Almeida 2024-09-03 128 list = list->next; 32807b4449f353 André Almeida 2024-09-03 129 32807b4449f353 André Almeida 2024-09-03 130 list->next = &lock->list; 32807b4449f353 André Almeida 2024-09-03 131 lock->list.next = &head->list; 32807b4449f353 André Almeida 2024-09-03 132 32807b4449f353 André Almeida 2024-09-03 133 ret = 0; 32807b4449f353 André Almeida 2024-09-03 134 } else { 32807b4449f353 André Almeida 2024-09-03 135 /* 32807b4449f353 André Almeida 2024-09-03 136 * We didn't take the lock, wait until the owner wakes (or dies) 32807b4449f353 André Almeida 2024-09-03 137 */ 32807b4449f353 André Almeida 2024-09-03 138 struct timespec to; 32807b4449f353 André Almeida 2024-09-03 139 32807b4449f353 André Almeida 2024-09-03 140 clock_gettime(CLOCK_MONOTONIC, &to); 32807b4449f353 André Almeida 2024-09-03 141 to.tv_sec = to.tv_sec + FUTEX_TIMEOUT; 32807b4449f353 André Almeida 2024-09-03 142 32807b4449f353 André Almeida 2024-09-03 143 tid = atomic_load(futex); 32807b4449f353 André Almeida 2024-09-03 144 /* Kernel ignores futexes without the waiters flag */ 32807b4449f353 André Almeida 2024-09-03 145 tid |= FUTEX_WAITERS; 32807b4449f353 André Almeida 2024-09-03 146 atomic_store(futex, tid); 32807b4449f353 André Almeida 2024-09-03 147 32807b4449f353 André Almeida 2024-09-03 148 ret = futex_wait((futex_t *) futex, tid, &to, 0); 32807b4449f353 André Almeida 2024-09-03 149 32807b4449f353 André Almeida 2024-09-03 150 /* 32807b4449f353 André Almeida 2024-09-03 151 * A real mutex_lock() implementation would loop here to finally 32807b4449f353 André Almeida 2024-09-03 152 * take the lock. We don't care about that, so we stop here. 32807b4449f353 André Almeida 2024-09-03 153 */ 32807b4449f353 André Almeida 2024-09-03 154 } 32807b4449f353 André Almeida 2024-09-03 155 32807b4449f353 André Almeida 2024-09-03 156 head->list_op_pending = NULL; 32807b4449f353 André Almeida 2024-09-03 157 32807b4449f353 André Almeida 2024-09-03 158 return ret; 32807b4449f353 André Almeida 2024-09-03 159 } 32807b4449f353 André Almeida 2024-09-03 160 -- 0-DAY CI Kernel Test Service https://github.com/intel/lkp-tests/wiki