Hello Paul E. McKenney, The patch 7939f0d7b28c: "rcu: Restrict access to RCU CPU stall notifiers" from Nov 1, 2023 (linux-next), leads to the following Smatch static checker warning: kernel/rcu/rcutorture.c:2502 rcu_torture_stall() error: uninitialized symbol 'ret'. kernel/rcu/rcutorture.c 2446 static int rcu_torture_stall(void *args) 2447 { 2448 int idx; 2449 int ret; 2450 unsigned long stop_at; 2451 2452 VERBOSE_TOROUT_STRING("rcu_torture_stall task started"); 2453 if (rcu_cpu_stall_notifiers) { 2454 ret = rcu_stall_chain_notifier_register(&rcu_torture_stall_block); 2455 if (ret) 2456 pr_info("%s: rcu_stall_chain_notifier_register() returned %d, %sexpected.\n", 2457 __func__, ret, !IS_ENABLED(CONFIG_RCU_STALL_COMMON) ? "un" : ""); ret is only initialized if rcu_cpu_stall_notifiers is true. 2458 } 2459 if (stall_cpu_holdoff > 0) { 2460 VERBOSE_TOROUT_STRING("rcu_torture_stall begin holdoff"); 2461 schedule_timeout_interruptible(stall_cpu_holdoff * HZ); 2462 VERBOSE_TOROUT_STRING("rcu_torture_stall end holdoff"); 2463 } 2464 if (!kthread_should_stop() && stall_gp_kthread > 0) { 2465 VERBOSE_TOROUT_STRING("rcu_torture_stall begin GP stall"); 2466 rcu_gp_set_torture_wait(stall_gp_kthread * HZ); 2467 for (idx = 0; idx < stall_gp_kthread + 2; idx++) { 2468 if (kthread_should_stop()) 2469 break; 2470 schedule_timeout_uninterruptible(HZ); 2471 } 2472 } 2473 if (!kthread_should_stop() && stall_cpu > 0) { 2474 VERBOSE_TOROUT_STRING("rcu_torture_stall begin CPU stall"); 2475 stop_at = ktime_get_seconds() + stall_cpu; 2476 /* RCU CPU stall is expected behavior in following code. */ 2477 idx = cur_ops->readlock(); 2478 if (stall_cpu_irqsoff) 2479 local_irq_disable(); 2480 else if (!stall_cpu_block) 2481 preempt_disable(); 2482 pr_alert("%s start on CPU %d.\n", 2483 __func__, raw_smp_processor_id()); 2484 while (ULONG_CMP_LT((unsigned long)ktime_get_seconds(), 2485 stop_at)) 2486 if (stall_cpu_block) { 2487 #ifdef CONFIG_PREEMPTION 2488 preempt_schedule(); 2489 #else 2490 schedule_timeout_uninterruptible(HZ); 2491 #endif 2492 } else if (stall_no_softlockup) { 2493 touch_softlockup_watchdog(); 2494 } 2495 if (stall_cpu_irqsoff) 2496 local_irq_enable(); 2497 else if (!stall_cpu_block) 2498 preempt_enable(); 2499 cur_ops->readunlock(idx); 2500 } 2501 pr_alert("%s end.\n", __func__); --> 2502 if (!ret) { Uninitialized here 2503 if (rcu_cpu_stall_notifiers) { But maybe we can just reverse the tests or delete one of the conditions? 2504 ret = rcu_stall_chain_notifier_unregister(&rcu_torture_stall_block); 2505 if (ret) 2506 pr_info("%s: rcu_stall_chain_notifier_unregister() returned %d.\n", __func__, ret); 2507 } 2508 } 2509 torture_shutdown_absorb("rcu_torture_stall"); 2510 while (!kthread_should_stop()) 2511 schedule_timeout_interruptible(10 * HZ); 2512 return 0; 2513 } regards, dan carpenter