On 23.03.2018 12:06, kbuild test robot wrote: > Hi Kirill, > > Thank you for the patch! Perhaps something to improve: > > [auto build test WARNING on mmotm/master] > [also build test WARNING on v4.16-rc6 next-20180322] > [if your patch is applied to the wrong git tree, please drop us a note to help improve the system] > > url: https://github.com/0day-ci/linux/commits/Kirill-Tkhai/Improve-shrink_slab-scalability-old-complexity-was-O-n-2-new-is-O-n/20180323-052754 > base: git://git.cmpxchg.org/linux-mmotm.git master > reproduce: > # apt-get install sparse > make ARCH=x86_64 allmodconfig > make C=1 CF=-D__CHECK_ENDIAN__ > > > sparse warnings: (new ones prefixed by >>) > > include/trace/events/vmscan.h:79:1: sparse: cast from restricted gfp_t > include/trace/events/vmscan.h:79:1: sparse: cast from restricted gfp_t > include/trace/events/vmscan.h:79:1: sparse: cast from restricted gfp_t > include/trace/events/vmscan.h:79:1: sparse: cast from restricted gfp_t > include/trace/events/vmscan.h:79:1: sparse: cast from restricted gfp_t > include/trace/events/vmscan.h:79:1: sparse: cast from restricted gfp_t > include/trace/events/vmscan.h:79:1: sparse: cast from restricted gfp_t > include/trace/events/vmscan.h:79:1: sparse: cast from restricted gfp_t > include/trace/events/vmscan.h:79:1: sparse: cast from restricted gfp_t > include/trace/events/vmscan.h:79:1: sparse: cast from restricted gfp_t > include/trace/events/vmscan.h:79:1: sparse: cast from restricted gfp_t > include/trace/events/vmscan.h:79:1: sparse: cast from restricted gfp_t > include/trace/events/vmscan.h:79:1: sparse: cast from restricted gfp_t > include/trace/events/vmscan.h:79:1: sparse: cast from restricted gfp_t > include/trace/events/vmscan.h:79:1: sparse: cast from restricted gfp_t > include/trace/events/vmscan.h:79:1: sparse: cast from restricted gfp_t > include/trace/events/vmscan.h:79:1: sparse: cast from restricted gfp_t > include/trace/events/vmscan.h:79:1: sparse: cast from restricted gfp_t > include/trace/events/vmscan.h:79:1: sparse: cast from restricted gfp_t > include/trace/events/vmscan.h:79:1: sparse: cast from restricted gfp_t > include/trace/events/vmscan.h:79:1: sparse: cast from restricted gfp_t > include/trace/events/vmscan.h:79:1: sparse: cast from restricted gfp_t > include/trace/events/vmscan.h:79:1: sparse: cast from restricted gfp_t > include/trace/events/vmscan.h:79:1: sparse: cast from restricted gfp_t > include/trace/events/vmscan.h:79:1: sparse: cast from restricted gfp_t > include/trace/events/vmscan.h:79:1: sparse: cast from restricted gfp_t > include/trace/events/vmscan.h:79:1: sparse: cast from restricted gfp_t > include/trace/events/vmscan.h:79:1: sparse: cast from restricted gfp_t > include/trace/events/vmscan.h:79:1: sparse: cast from restricted gfp_t > include/trace/events/vmscan.h:79:1: sparse: cast from restricted gfp_t > include/trace/events/vmscan.h:79:1: sparse: cast from restricted gfp_t > include/trace/events/vmscan.h:79:1: sparse: incorrect type in argument 3 (different base types) @@ expected unsigned long [unsigned] flags @@ got resunsigned long [unsigned] flags @@ > include/trace/events/vmscan.h:79:1: expected unsigned long [unsigned] flags > include/trace/events/vmscan.h:79:1: got restricted gfp_t [usertype] gfp_flags > include/trace/events/vmscan.h:106:1: sparse: cast from restricted gfp_t > include/trace/events/vmscan.h:106:1: sparse: cast from restricted gfp_t > include/trace/events/vmscan.h:106:1: sparse: cast from restricted gfp_t > include/trace/events/vmscan.h:106:1: sparse: cast from restricted gfp_t > include/trace/events/vmscan.h:106:1: sparse: cast from restricted gfp_t > include/trace/events/vmscan.h:106:1: sparse: cast from restricted gfp_t > include/trace/events/vmscan.h:106:1: sparse: cast from restricted gfp_t > include/trace/events/vmscan.h:106:1: sparse: cast from restricted gfp_t > include/trace/events/vmscan.h:106:1: sparse: cast from restricted gfp_t > include/trace/events/vmscan.h:106:1: sparse: cast from restricted gfp_t > include/trace/events/vmscan.h:106:1: sparse: cast from restricted gfp_t > include/trace/events/vmscan.h:106:1: sparse: cast from restricted gfp_t > include/trace/events/vmscan.h:106:1: sparse: cast from restricted gfp_t > include/trace/events/vmscan.h:106:1: sparse: cast from restricted gfp_t > include/trace/events/vmscan.h:106:1: sparse: cast from restricted gfp_t > include/trace/events/vmscan.h:106:1: sparse: cast from restricted gfp_t > include/trace/events/vmscan.h:106:1: sparse: cast from restricted gfp_t > include/trace/events/vmscan.h:106:1: sparse: cast from restricted gfp_t > include/trace/events/vmscan.h:106:1: sparse: cast from restricted gfp_t > include/trace/events/vmscan.h:106:1: sparse: cast from restricted gfp_t > include/trace/events/vmscan.h:106:1: sparse: cast from restricted gfp_t > include/trace/events/vmscan.h:106:1: sparse: cast from restricted gfp_t > include/trace/events/vmscan.h:106:1: sparse: cast from restricted gfp_t > include/trace/events/vmscan.h:106:1: sparse: cast from restricted gfp_t > include/trace/events/vmscan.h:106:1: sparse: cast from restricted gfp_t > include/trace/events/vmscan.h:106:1: sparse: cast from restricted gfp_t > include/trace/events/vmscan.h:106:1: sparse: cast from restricted gfp_t > include/trace/events/vmscan.h:106:1: sparse: cast from restricted gfp_t > include/trace/events/vmscan.h:106:1: sparse: cast from restricted gfp_t > include/trace/events/vmscan.h:106:1: sparse: cast from restricted gfp_t > include/trace/events/vmscan.h:106:1: sparse: cast from restricted gfp_t > include/trace/events/vmscan.h:106:1: sparse: cast from restricted gfp_t > include/trace/events/vmscan.h:106:1: sparse: cast from restricted gfp_t > include/trace/events/vmscan.h:106:1: sparse: cast from restricted gfp_t > include/trace/events/vmscan.h:106:1: sparse: cast from restricted gfp_t > include/trace/events/vmscan.h:106:1: sparse: incorrect type in argument 3 (different base types) @@ expected unsigned long [unsigned] flags @@ got resunsigned long [unsigned] flags @@ > include/trace/events/vmscan.h:106:1: expected unsigned long [unsigned] flags > include/trace/events/vmscan.h:106:1: got restricted gfp_t [usertype] gfp_flags > include/trace/events/vmscan.h:196:1: sparse: cast from restricted gfp_t > include/trace/events/vmscan.h:196:1: sparse: cast from restricted gfp_t > include/trace/events/vmscan.h:196:1: sparse: cast from restricted gfp_t > include/trace/events/vmscan.h:196:1: sparse: cast from restricted gfp_t > include/trace/events/vmscan.h:196:1: sparse: cast from restricted gfp_t > include/trace/events/vmscan.h:196:1: sparse: cast from restricted gfp_t > include/trace/events/vmscan.h:196:1: sparse: cast from restricted gfp_t > include/trace/events/vmscan.h:196:1: sparse: cast from restricted gfp_t > include/trace/events/vmscan.h:196:1: sparse: cast from restricted gfp_t > include/trace/events/vmscan.h:196:1: sparse: cast from restricted gfp_t > include/trace/events/vmscan.h:196:1: sparse: cast from restricted gfp_t > include/trace/events/vmscan.h:196:1: sparse: cast from restricted gfp_t > include/trace/events/vmscan.h:196:1: sparse: cast from restricted gfp_t > include/trace/events/vmscan.h:196:1: sparse: cast from restricted gfp_t > include/trace/events/vmscan.h:196:1: sparse: cast from restricted gfp_t > include/trace/events/vmscan.h:196:1: sparse: cast from restricted gfp_t > include/trace/events/vmscan.h:196:1: sparse: cast from restricted gfp_t > include/trace/events/vmscan.h:196:1: sparse: cast from restricted gfp_t > include/trace/events/vmscan.h:196:1: sparse: cast from restricted gfp_t > include/trace/events/vmscan.h:196:1: sparse: cast from restricted gfp_t > include/trace/events/vmscan.h:196:1: sparse: cast from restricted gfp_t > include/trace/events/vmscan.h:196:1: sparse: cast from restricted gfp_t > include/trace/events/vmscan.h:196:1: sparse: cast from restricted gfp_t > include/trace/events/vmscan.h:196:1: sparse: cast from restricted gfp_t > include/trace/events/vmscan.h:196:1: sparse: cast from restricted gfp_t > include/trace/events/vmscan.h:196:1: sparse: cast from restricted gfp_t > include/trace/events/vmscan.h:196:1: sparse: cast from restricted gfp_t > include/trace/events/vmscan.h:196:1: sparse: too many warnings >>> mm/vmscan.c:231:15: sparse: incompatible types in conditional expression (different address spaces) >>> mm/vmscan.c:231:15: sparse: cast from unknown type >>> mm/vmscan.c:231:15: sparse: incompatible types in conditional expression (different address spaces) >>> mm/vmscan.c:231:15: sparse: incompatible types in conditional expression (different address spaces) >>> mm/vmscan.c:231:15: sparse: cast from unknown type > > vim +231 mm/vmscan.c Yeah, thanks for report. > > 205 > 206 static int memcg_expand_maps(struct mem_cgroup *memcg, int size, int old_size) > 207 { > 208 struct shrinkers_map *new, *old; > 209 int i; > 210 > 211 new = kvmalloc(sizeof(*new) + nr_node_ids * sizeof(new->map[0]), > 212 GFP_KERNEL); > 213 if (!new) > 214 return -ENOMEM; > 215 > 216 for (i = 0; i < nr_node_ids; i++) { > 217 new->map[i] = kvmalloc_node(size, GFP_KERNEL, i); > 218 if (!new->map[i]) { > 219 while (--i >= 0) > 220 kvfree(new->map[i]); > 221 kvfree(new); > 222 return -ENOMEM; > 223 } > 224 > 225 /* Set all old bits, clear all new bits */ > 226 memset(new->map[i], (int)0xff, old_size); > 227 memset((void *)new->map[i] + old_size, 0, size - old_size); > 228 } > 229 > 230 lockdep_assert_held(&bitmap_rwsem); > > 231 old = rcu_dereference_protected(SHRINKERS_MAP(memcg), true); > 232 > 233 /* > 234 * We don't want to use rcu_read_lock() in shrink_slab(). > 235 * Since expansion happens rare, we may just take the lock > 236 * here. > 237 */ > 238 if (old) > 239 down_write(&shrinker_rwsem); > 240 > 241 if (memcg) > 242 rcu_assign_pointer(memcg->shrinkers_map, new); > 243 else > 244 rcu_assign_pointer(root_shrinkers_map, new); > 245 > 246 if (old) { > 247 up_write(&shrinker_rwsem); > 248 call_rcu(&old->rcu, kvfree_map_rcu); > 249 } > 250 > 251 return 0; > 252 } > 253 > > --- > 0-DAY kernel test infrastructure Open Source Technology Center > https://lists.01.org/pipermail/kbuild-all Intel Corporation >