Re: [PATCH] rcu: Reduce stack usage in show_rcu_gp_kthreads()
David Laight <[email protected]> Fri, 24 Jul 2026 14:20:48 +0100
| Newsgroups | org.kernel.vger.rcu,org.kernel.vger.linux-kernel |
|---|---|
| Message-ID | <20260724142048.53e392a9@pumpkin> |
On Thu, 23 Jul 2026 18:04:30 +0800 Zqiang <[email protected]> wrote: > When CONFIG_KASAN=y and CONFIG_KASAN_STACK=y builds, the > show_rcu_gp_kthreads() exceeds the 1024-byte frame-size limit: > ... > rcu_for_each_node_breadth_first(rnp) { > if (ULONG_CMP_GE(READ_ONCE(rcu_state.gp_seq), READ_ONCE(rnp->gp_seq_needed)) && > !data_race(READ_ONCE(rnp->qsmask)) && !data_race(READ_ONCE(rnp->boost_tasks)) && > !data_race(READ_ONCE(rnp->exp_tasks)) && !data_race(READ_ONCE(rnp->gp_tasks))) > continue; > - pr_info("\trcu_node %d:%d ->gp_seq %ld ->gp_seq_needed %ld ->qsmask %#lx %c%c%c%c ->n_boosts %ld\n", > - rnp->grplo, rnp->grphi, > - (long)data_race(READ_ONCE(rnp->gp_seq)), > - (long)data_race(READ_ONCE(rnp->gp_seq_needed)), > - data_race(READ_ONCE(rnp->qsmask)), > - ".b"[!!data_race(READ_ONCE(rnp->boost_kthread_task))], > - ".B"[!!data_race(READ_ONCE(rnp->boost_tasks))], > - ".E"[!!data_race(READ_ONCE(rnp->exp_tasks))], > - ".G"[!!data_race(READ_ONCE(rnp->gp_tasks))], > - data_race(READ_ONCE(rnp->n_boosts))); Isn't that code carefully reading all the values twice? Also the "ab"[!!val] generates far worse code than the more obvious (val ? 'a' : 'b'). For the former gcc indexes a constant string, the latter is done using arithmetic. I'm sure there is a good reason for data_race(READ_ONCE(xxx)) ... David