Hi Florian, [auto build test WARNING on net-next/master]
url: https://github.com/0day-ci/linux/commits/Florian-Westphal/test_rhashtable-add-test-case-for-rhl-table/20170919-135550 config: x86_64-randconfig-a0-09192105 (attached as .config) compiler: gcc-4.4 (Debian 4.4.7-8) 4.4.7 reproduce: # save the attached .config to linux build tree make ARCH=x86_64 All warnings (new ones prefixed by >>): lib/test_rhashtable.c: In function 'test_rhltable': >> lib/test_rhashtable.c:433: warning: the frame size of 2144 bytes is larger >> than 2048 bytes vim +433 lib/test_rhashtable.c 254 255 static int __init test_rhltable(unsigned int entries) 256 { 257 struct test_obj_rhl *rhl_test_objects; 258 unsigned long *obj_in_table; 259 struct rhltable rhlt; 260 unsigned int i, j, k; 261 int ret, err; 262 263 if (entries == 0) 264 entries = 1; 265 266 rhl_test_objects = vzalloc(sizeof(*rhl_test_objects) * entries); 267 if (!rhl_test_objects) 268 return -ENOMEM; 269 270 ret = -ENOMEM; 271 obj_in_table = vzalloc(BITS_TO_LONGS(entries) * sizeof(unsigned long)); 272 if (!obj_in_table) 273 goto out_free; 274 275 /* nulls_base not supported in rhlist interface */ 276 test_rht_params.nulls_base = 0; 277 err = rhltable_init(&rhlt, &test_rht_params); 278 if (WARN_ON(err)) 279 goto out_free; 280 281 k = prandom_u32(); 282 ret = 0; 283 for (i = 0; i < entries; i++) { 284 rhl_test_objects[i].value.id = k; 285 err = rhltable_insert(&rhlt, &rhl_test_objects[i].list_node, 286 test_rht_params); 287 if (WARN(err, "error %d on element %d\n", err, i)) 288 break; 289 if (err == 0) 290 set_bit(i, obj_in_table); 291 } 292 293 if (err) 294 ret = err; 295 296 pr_info("test %d add/delete pairs into rhlist\n", entries); 297 for (i = 0; i < entries; i++) { 298 struct rhlist_head *h, *pos; 299 struct test_obj_rhl *obj; 300 struct test_obj_val key = { 301 .id = k, 302 }; 303 bool found; 304 305 rcu_read_lock(); 306 h = rhltable_lookup(&rhlt, &key, test_rht_params); 307 if (WARN(!h, "key not found during iteration %d of %d", i, entries)) { 308 rcu_read_unlock(); 309 break; 310 } 311 312 if (i) { 313 j = i - 1; 314 rhl_for_each_entry_rcu(obj, pos, h, list_node) { 315 if (WARN(pos == &rhl_test_objects[j].list_node, "old element found, should be gone")) 316 break; 317 } 318 } 319 320 cond_resched_rcu(); 321 322 found = false; 323 324 rhl_for_each_entry_rcu(obj, pos, h, list_node) { 325 if (pos == &rhl_test_objects[i].list_node) { 326 found = true; 327 break; 328 } 329 } 330 331 rcu_read_unlock(); 332 333 if (WARN(!found, "element %d not found", i)) 334 break; 335 336 err = rhltable_remove(&rhlt, &rhl_test_objects[i].list_node, test_rht_params); 337 WARN(err, "rhltable_remove: err %d for iteration %d\n", err, i); 338 if (err == 0) 339 clear_bit(i, obj_in_table); 340 } 341 342 if (ret == 0 && err) 343 ret = err; 344 345 for (i = 0; i < entries; i++) { 346 WARN(test_bit(i, obj_in_table), "elem %d allegedly still present", i); 347 348 err = rhltable_insert(&rhlt, &rhl_test_objects[i].list_node, 349 test_rht_params); 350 if (WARN(err, "error %d on element %d\n", err, i)) 351 break; 352 if (err == 0) 353 set_bit(i, obj_in_table); 354 } 355 356 pr_info("test %d random rhlist add/delete operations\n", entries); 357 for (j = 0; j < entries; j++) { 358 u32 i = prandom_u32_max(entries); 359 u32 prand = prandom_u32(); 360 361 cond_resched(); 362 363 if (prand == 0) 364 prand = prandom_u32(); 365 366 if (prand & 1) { 367 prand >>= 1; 368 continue; 369 } 370 371 err = rhltable_remove(&rhlt, &rhl_test_objects[i].list_node, test_rht_params); 372 if (test_bit(i, obj_in_table)) { 373 clear_bit(i, obj_in_table); 374 if (WARN(err, "cannot remove element at slot %d", i)) 375 continue; 376 } else { 377 if (WARN(err != -ENOENT, "removed non-existant element %d, error %d not %d", 378 i, err, -ENOENT)) 379 continue; 380 } 381 382 if (prand & 1) { 383 prand >>= 1; 384 continue; 385 } 386 387 err = rhltable_insert(&rhlt, &rhl_test_objects[i].list_node, test_rht_params); 388 if (err == 0) { 389 if (WARN(test_and_set_bit(i, obj_in_table), "succeeded to insert same object %d", i)) 390 continue; 391 } else { 392 if (WARN(!test_bit(i, obj_in_table), "failed to insert object %d", i)) 393 continue; 394 } 395 396 if (prand & 1) { 397 prand >>= 1; 398 continue; 399 } 400 401 i = prandom_u32_max(entries); 402 if (test_bit(i, obj_in_table)) { 403 err = rhltable_remove(&rhlt, &rhl_test_objects[i].list_node, test_rht_params); 404 WARN(err, "cannot remove element at slot %d", i); 405 if (err == 0) 406 clear_bit(i, obj_in_table); 407 } else { 408 err = rhltable_insert(&rhlt, &rhl_test_objects[i].list_node, test_rht_params); 409 WARN(err, "failed to insert object %d", i); 410 if (err == 0) 411 set_bit(i, obj_in_table); 412 } 413 } 414 415 for (i = 0; i < entries; i++) { 416 cond_resched(); 417 err = rhltable_remove(&rhlt, &rhl_test_objects[i].list_node, test_rht_params); 418 if (test_bit(i, obj_in_table)) { 419 if (WARN(err, "cannot remove element at slot %d", i)) 420 continue; 421 } else { 422 if (WARN(err != -ENOENT, "removed non-existant element, error %d not %d", 423 err, -ENOENT)) 424 continue; 425 } 426 } 427 428 rhltable_destroy(&rhlt); 429 out_free: 430 vfree(rhl_test_objects); 431 vfree(obj_in_table); 432 return ret; > 433 } 434 --- 0-DAY kernel test infrastructure Open Source Technology Center https://lists.01.org/pipermail/kbuild-all Intel Corporation
.config.gz
Description: application/gzip