On Thu, Jun 13, 2024 at 09:40:36AM -0600, Keith Busch wrote: > On Thu, Jun 13, 2024 at 08:15:06AM -0700, Paul E. McKenney wrote: > > On Thu, Jun 13, 2024 at 08:47:26AM -0600, Keith Busch wrote: > > > > > > > > Just make a helper function like this: > > > > > > > > static void my_synchronize_srcu(void) > > > > { > > > > synchronize_srcu(&my_srcu_struct); > > > > } > > > > > > > > Or am I missing something subtle here? > > > > > > That would work if we had a global srcu, but the intended usage > > > dynamically allocates one per device the driver is attached to, so a > > > void callback doesn't know which one to sync. > > > > Ah, good point! I suppose that a further suggestion to just JIT the > > needed function would not be well-received? ;-) > > > > I cannot resist suggesting placing a pointer to the srcu_struct in > > the task structure. /me runs... > > > > Perhaps somewhat more constructively, my usual question: Is it really > > necessary to have per-driver SRCU here? What would break if there was > > a global srcu_struct that applied to all drivers? > > There's not a strict need for srcu_struct to be per device that I know > of. It was just done this way to keep usage localized to the parts that > need to be protected. The fear being that one device's long running > reader could prevent another device from quickly tearing down. That is a legitimate concern. Is there a way to avoid this issue by making this be a statement parameter to a macro? Thanx, Paul