Messages in this thread | | | Date | Tue, 17 Nov 2020 18:05:51 -0500 (EST) | From | Mathieu Desnoyers <> | Subject | Re: [PATCH] bpf: don't fail kmalloc while releasing raw_tp |
| |
----- On Nov 16, 2020, at 5:10 PM, rostedt rostedt@goodmis.org wrote:
> On Mon, 16 Nov 2020 16:34:41 -0500 (EST) > Mathieu Desnoyers <mathieu.desnoyers@efficios.com> wrote:
[...]
>> I think you'll want a WRITE_ONCE(old[i].func, tp_stub_func) here, matched >> with a READ_ONCE() in __DO_TRACE. This introduces a new situation where the >> func pointer can be updated and loaded concurrently. > > I thought about this a little, and then only thing we really should worry > about is synchronizing with those that unregister. Because when we make > this update, there are now two states. the __DO_TRACE either reads the > original func or the stub. And either should be OK to call. > > Only the func gets updated and not the data. So what exactly are we worried > about here?
Indeed with a stub function, I don't see any need for READ_ONCE/WRITE_ONCE.
However, if we want to compare the function pointer to some other value and conditionally do (or skip) the call, I think you'll need the READ_ONCE/WRITE_ONCE to make sure the pointer is not re-fetched between comparison and call.
Thanks,
Mathieu
-- Mathieu Desnoyers EfficiOS Inc. http://www.efficios.com
| |