
tree: https://gitee.com/openeuler/kernel.git OLK-6.6 head: a5cbe5b715d9cac271b2c6175e728f0c4167f675 commit: 200321e8a69ef82350d070de35ac4a666ab79ba6 [1826/1826] mm: mem_reliable: Add limiting the usage of reliable memory config: arm64-randconfig-r123-20250118 (https://download.01.org/0day-ci/archive/20250118/202501180645.GOqTUifa-lkp@i...) compiler: clang version 15.0.7 (https://github.com/llvm/llvm-project 8dfdcc7b7bf66834a761bd8de445840ef68e4d1a) reproduce: (https://download.01.org/0day-ci/archive/20250118/202501180645.GOqTUifa-lkp@i...) 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@intel.com> | Closes: https://lore.kernel.org/oe-kbuild-all/202501180645.GOqTUifa-lkp@intel.com/ sparse warnings: (new ones prefixed by >>)
mm/mem_reliable.c:131:52: sparse: sparse: incorrect type in argument 3 (different address spaces) @@ expected void * @@ got void [noderef] __user *buffer @@ mm/mem_reliable.c:131:52: sparse: expected void * mm/mem_reliable.c:131:52: sparse: got void [noderef] __user *buffer mm/mem_reliable.c:150:52: sparse: sparse: incorrect type in argument 3 (different address spaces) @@ expected void * @@ got void [noderef] __user *buffer @@ mm/mem_reliable.c:150:52: sparse: expected void * mm/mem_reliable.c:150:52: sparse: got void [noderef] __user *buffer mm/mem_reliable.c:172:52: sparse: sparse: incorrect type in argument 3 (different address spaces) @@ expected void * @@ got void [noderef] __user *buffer @@ mm/mem_reliable.c:172:52: sparse: expected void * mm/mem_reliable.c:172:52: sparse: got void [noderef] __user *buffer mm/mem_reliable.c:190:33: sparse: sparse: incorrect type in initializer (incompatible argument 3 (different address spaces)) @@ expected int ( [usertype] *proc_handler )( ... ) @@ got int ( * )( ... ) @@ mm/mem_reliable.c:190:33: sparse: expected int ( [usertype] *proc_handler )( ... ) mm/mem_reliable.c:190:33: sparse: got int ( * )( ... ) mm/mem_reliable.c:197:33: sparse: sparse: incorrect type in initializer (incompatible argument 3 (different address spaces)) @@ expected int ( [usertype] *proc_handler )( ... ) @@ got int ( * )( ... ) @@ mm/mem_reliable.c:197:33: sparse: expected int ( [usertype] *proc_handler )( ... ) mm/mem_reliable.c:197:33: sparse: got int ( * )( ... ) mm/mem_reliable.c:205:33: sparse: sparse: incorrect type in initializer (incompatible argument 3 (different address spaces)) @@ expected int ( [usertype] *proc_handler )( ... ) @@ got int ( * )( ... ) @@ mm/mem_reliable.c:205:33: sparse: expected int ( [usertype] *proc_handler )( ... ) mm/mem_reliable.c:205:33: sparse: got int ( * )( ... )
vim +131 mm/mem_reliable.c 123 124 static int reliable_pagecache_max_bytes_write(struct ctl_table *table, 125 int write, void __user *buffer, 126 size_t *length, loff_t *ppos) 127 { 128 unsigned long old_value = pagecache_reliable_limit; 129 int ret; 130
131 ret = proc_doulongvec_minmax(table, write, buffer, length, ppos); 132 if (!ret && write) { 133 if (pagecache_reliable_limit > 134 PAGES_TO_B(total_reliable_pages())) { 135 pagecache_reliable_limit = old_value; 136 return -EINVAL; 137 } 138 } 139 140 return ret; 141 } 142 143 static int reliable_limit_handler(struct ctl_table *table, int write, 144 void __user *buffer, size_t *length, 145 loff_t *ppos) 146 { 147 unsigned long old = task_reliable_limit; 148 int ret; 149 150 ret = proc_doulongvec_minmax(table, write, buffer, length, ppos); 151 if (!ret && write) { 152 if (task_reliable_limit > PAGES_TO_B(total_reliable_pages()) || 153 task_reliable_limit < 154 (task_reliable_used_pages() << PAGE_SHIFT)) { 155 task_reliable_limit = old; 156 return -EINVAL; 157 } 158 } 159 160 return ret; 161 } 162 163 #ifdef CONFIG_SHMEM 164 static int reliable_shmem_bytes_limit_handler(struct ctl_table *table, 165 int write, void __user *buffer, 166 size_t *length, loff_t *ppos) 167 { 168 unsigned long *data_ptr = (unsigned long *)(table->data); 169 unsigned long old = *data_ptr; 170 int ret; 171 172 ret = proc_doulongvec_minmax(table, write, buffer, length, ppos); 173 if (!ret && write) { 174 if (*data_ptr > PAGES_TO_B(total_reliable_pages())) { 175 *data_ptr = old; 176 return -EINVAL; 177 } 178 } 179 180 return ret; 181 } 182 #endif 183 184 static struct ctl_table reliable_ctl_table[] = { 185 { 186 .procname = "reliable_pagecache_max_bytes", 187 .data = &pagecache_reliable_limit, 188 .maxlen = sizeof(pagecache_reliable_limit), 189 .mode = 0644, 190 .proc_handler = reliable_pagecache_max_bytes_write, 191 }, 192 { 193 .procname = "task_reliable_limit", 194 .data = &task_reliable_limit, 195 .maxlen = sizeof(task_reliable_limit), 196 .mode = 0644, 197 .proc_handler = reliable_limit_handler, 198 }, 199 #ifdef CONFIG_SHMEM 200 { 201 .procname = "shmem_reliable_bytes_limit", 202 .data = &shmem_reliable_limit, 203 .maxlen = sizeof(shmem_reliable_limit), 204 .mode = 0644, 205 .proc_handler = reliable_shmem_bytes_limit_handler, 206 }, 207 #endif 208 {} 209 }; 210
-- 0-DAY CI Kernel Test Service https://github.com/intel/lkp-tests/wiki