On Tue, 2018-01-23 at 14:03 -0800, Paul E. McKenney wrote: > On Tue, Jan 23, 2018 at 04:04:17PM +0000, Bart Van Assche wrote: > > It would be great if Paul could provide feedback. The comment in > > include/linux/rcupdate.h seems to contradict the following paragraph from > > Documentation/RCU/Design/Requirements/Requirements.html for statically > > allocated objects: > > > > The corresponding <tt>rcu_head</tt> structures that are > > dynamically allocated are automatically tracked, but > > <tt>rcu_head</tt> structures allocated on the stack > > must be initialized with <tt>init_rcu_head_on_stack()</tt> > > and cleaned up with <tt>destroy_rcu_head_on_stack()</tt>. > > Similarly, statically allocated non-stack <tt>rcu_head</tt> > > structures must be initialized with <tt>init_rcu_head()</tt> > > and cleaned up with <tt>destroy_rcu_head()</tt>. > > And this is the intent. What breaks when you do that? Hello Paul, I inserted a init_rcu_head() call in the ib_srpt driver for a dynamically allocated object and that triggers a linker error with CONFIG_DEBUG_OBJECTS_RCU_HEAD=y. I just verified that the ib_srpt driver still works fine if the init_rcu_head() calls are removed from that driver. However, the following part of the comment in include/linux/rcupdate.h above init_rcu_head() seems confusing to me: "rcu_head structures allocated dynamically in the heap or defined statically don't need any initialization." Should that comment perhaps be updated such that it matches Documentation/RCU/Design/Requirements/Requirements.html? Thanks, Bart.��.n��������+%������w��{.n�����{���fk��ܨ}���Ơz�j:+v�����w����ޙ��&�)ߡ�a����z�ޗ���ݢj��w�f