Each subsystem using SRCU must create an struct srcu_struct, either by declaring a variable of this type or by dynamically allocating the memory, for example, via kmalloc(). Once this structure is in place, it must be initialized via init_srcu_struct(), which returns zero for success or an error code for failure (for example, upon memory exhaustion).
If the struct srcu_struct is dynamically allocated, then
cleanup_srcu_struct() must be called before it is freed.
Similarly, if the struct srcu_struct is a variable declared within
a Linux kernel module, then cleanup_srcu_struct() must be called
before the module is unloaded.
Either way, the caller must take care to ensure that all SRCU read-side
critical sections have completed (and that no more will commence) before
calling cleanup_srcu_struct().
One way to accomplish this is described in
Section .