Re: [PATCH v19 34/40] rcu/update: fix same dept key collision between various types of RCU
Byungchul Park <[email protected]> Fri, 10 Jul 2026 15:20:55 +0900
| Newsgroups | org.kernel.vger.linux-ide,dev.linux.lists.linux-rt-devel,dev.linux.lists.sashiko-reviews,org.freedesktop.lists.dri-devel,org.kernel.vger.linux-kernel,org.kernel.vger.linux-modules |
|---|---|
| Message-ID | <[email protected]> |
On Tue, Jul 07, 2026 at 07:33:52AM +0000, [email protected] wrote: > Thank you for your contribution! Sashiko AI review found 1 potential issue(s) to consider: > - [Low] Unused struct member `dkey` inflates stack footprint > -- > > commit de6aa9797881496b4a8d7d66626b1bfd19cfdd54 > Author: Yunseong Kim <[email protected]> > > rcu/update: fix same dept key collision between various types of RCU > > This commit addresses a false positive circular dependency report in dept > by assigning separate dept keys and maps to each struct rcu_synchronize > execution context. > > > diff --git a/include/linux/rcupdate_wait.h b/include/linux/rcupdate_wait.h > > --- a/include/linux/rcupdate_wait.h > > +++ b/include/linux/rcupdate_wait.h > > @@ -19,17 +19,20 @@ struct rcu_synchronize { > > > > /* This is for debugging. */ > > struct rcu_gp_oldstate oldstate; > > + struct dept_map dmap; > > + struct dept_key dkey; > > [Severity: Low] > Does this code ever use the dkey member of struct rcu_synchronize? > > The _wait_rcu_gp() macro defines its own static struct dept_key __key, > which it passes as an argument to __wait_rcu_gp(). This leaves the dkey > member of struct rcu_synchronize completely unused and uninitialized, while > needlessly increasing the stack footprint of the rs_array allocated in the > macro. I will fix it. Byungchul > > }; > > void wakeme_after_rcu(struct rcu_head *head); > > > > void __wait_rcu_gp(bool checktiny, unsigned int state, int n, call_rcu_func_t *crcu_array, > > - struct rcu_synchronize *rs_array); > > + struct rcu_synchronize *rs_array, struct dept_key *dkey); > > > > #define _wait_rcu_gp(checktiny, state, ...) \ > > -do { \ > > - call_rcu_func_t __crcu_array[] = { __VA_ARGS__ }; \ > > - struct rcu_synchronize __rs_array[ARRAY_SIZE(__crcu_array)]; \ > > - __wait_rcu_gp(checktiny, state, ARRAY_SIZE(__crcu_array), __crcu_array, __rs_array); \ > > +do { \ > > + call_rcu_func_t __crcu_array[] = { __VA_ARGS__ }; \ > > + static struct dept_key __key; \ > > + struct rcu_synchronize __rs_array[ARRAY_SIZE(__crcu_array)]; \ > > + __wait_rcu_gp(checktiny, state, ARRAY_SIZE(__crcu_array), __crcu_array, __rs_array, &__key); \ > > } while (0) > > [ ... ] > > > diff --git a/kernel/rcu/update.c b/kernel/rcu/update.c > > --- a/kernel/rcu/update.c > > +++ b/kernel/rcu/update.c > > [ ... ] > > > @@ -426,7 +426,8 @@ void __wait_rcu_gp(bool checktiny, unsigned int state, int n, call_rcu_func_t *c > > break; > > if (j == i) { > > init_rcu_head_on_stack(&rs_array[i].head); > > - init_completion(&rs_array[i].completion); > > + sdt_map_init_key(&rs_array[i].dmap, dkey); > > + init_completion_dmap(&rs_array[i].completion, &rs_array[i].dmap); > > (crcu_array[i])(&rs_array[i].head, wakeme_after_rcu); > > } > > } > > -- > Sashiko AI review · https://sashiko.dev/#/patchset/[email protected]?part=34