Hi, On Wed, Jan 26, 2022 at 3:13 PM Paul E. McKenney <paulmck@xxxxxxxxxx> wrote: > > On Wed, Jan 26, 2022 at 10:03:54AM -0500, Alexander Aring wrote: > > This patch fixes a sparse issue if DEFINE_STATIC_SRCU() of srcutree is > > used by a module. Sparse will show: > > > > sparse: symbol '__srcu_struct_nodes_srcu' was not declared. Should it be static? > > > > The problem is here that the DEFINE_STATIC_SRCU() of srcutree uses > > __DEFINE_SRCU() and define a non-static srcu_struct. This srcu_struct > > will be exported by inserting it in a special module section > > '__section("___srcu_struct_ptrs")'. During load/unloading srcutree runs > > their init/cleanup functionality. It seems sparse does not understand > > this connection. To avoid the sparse warning we make a prototype of the > > exported srcu_struct with an export keyword. This way we tell the > > that the srcu_struct might be used outside of the module. > > > > Signed-off-by: Alexander Aring <aahringo@xxxxxxxxxx> > > Queued for further review and testing, thank you!!! > > As usual, I could not resist the urge to wordsmith a bit. Could you > please check below in case I messed something up? > > Thanx, Paul > > ------------------------------------------------------------------------ > > commit fa92d727f94486195e12dc782fec17d103072101 > Author: Alexander Aring <aahringo@xxxxxxxxxx> > Date: Wed Jan 26 10:03:54 2022 -0500 > > srcutree: Use export for srcu_struct defined by DEFINE_STATIC_SRCU() > > If an srcu_struct structure defined by tree SRCU's DEFINE_STATIC_SRCU() > is used by a module, sparse will give the following diagnostic: > > sparse: symbol '__srcu_struct_nodes_srcu' was not declared. Should it be static? > > The problem is that a within-module DEFINE_STATIC_SRCU() must define > a non-static srcu_struct because it is exported by referencing it in a > special '__section("___srcu_struct_ptrs")'. This reference is needed > so that module load and unloading can invoke init_srcu_struct() and > cleanup_srcu_struct(), respectively. Unfortunately, sparse is unaware of > '__section("___srcu_struct_ptrs")', resulting in the above false-positive > diagnostic. To avoid this false positive, this commit therefore creates > a prototype of the srcu_struct with an "extern" keyword. > perfect, thanks. - Alex