Thread (8 messages) 8 messages, 3 authors, 2021-07-27

Re: [PATCH] tracepoints: Update static_call before tp_funcs when adding a tracepoint

From: Peter Zijlstra <peterz@infradead.org>
Date: 2021-07-27 11:44:49
Also in: lkml

On Mon, Jul 26, 2021 at 02:49:03PM -0400, Steven Rostedt wrote:
OK. I see the issue you are saying. And this came from my assumption
that the tracepoint code did a synchronization when unregistering the
last callback. But of course it wont because that would make a lot of
back to back synchronizations of a large number of tracepoints being
unregistered at once.

And doing it for all 0->1 or 1->0 or even a 1->0->1 can be costly.

One way to handle this is when going from 1->0, set off a worker that
will do the synchronization asynchronously, and if a 0->1 comes in,
have that block until the synchronization is complete. This should
work, and not have too much of an overhead.

If one 1->0 starts the synchronization, and one or more 1->0
transitions happen, it will be recorded where the worker will do
another synchronization, to make sure all 1->0 have went through a full
synchronization before a 0->1 can happen.

If a 0->1 comes in while a synchronization is happening, it will note
the current "number" for the synchronizations (if another one is
queued, it will wait for one more), before it can begin. As locks will
be held while waiting for synchronizations to finish, we don't need to
worry about another 1->0 coming in while a 0->1 is waiting.
Wouldn't get_state_synchronize_rcu() and cond_synchronize_rcu() get you
what you need?
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help