Thank you for your contribution! Sashiko AI review found 1 potential issue(s) to consider: - [Medium] The tracepoint incorrectly uses `_RET_IP_` in a `static inline` function, causing it to report the caller's caller instead of the actual caller depending on compiler inlining. --
--- Patch [3]: [PATCH v5 3/5] percpu-refcount: add refcount_final_put tracepoint --- commit 9f895c01ce2cdf26a289904e12ffb409aa7dc2a0 Author: Eugene Mavick <[email protected]> percpu-refcount: add refcount_final_put tracepoint This commit adds the refcount_final_put tracepoint to the atomic fallback path in percpu_ref_put_many(). It fires when the atomic counter reaches zero, recording the caller function, the instruction pointer, and the refcount object. > diff --git a/include/linux/percpu-refcount.h b/include/linux/percpu-refcount.h > index d73a1c08c3e3c..244992b2f746e 100644 > --- a/include/linux/percpu-refcount.h > +++ b/include/linux/percpu-refcount.h [ ... ] > @@ -331,8 +332,10 @@ static inline void percpu_ref_put_many(struct percpu_ref > *ref, unsigned long nr) > > if (__ref_is_percpu(ref, &percpu_count)) > this_cpu_sub(*percpu_count, nr); > - else if (unlikely(atomic_long_sub_and_test(nr, &ref->data->count))) > + else if (unlikely(atomic_long_sub_and_test(nr, &ref->data->count))) { > + do_trace_refcount_final_put(ref); [Severity: Medium] Since percpu_ref_put_many() is a static inline function, won't using _RET_IP_ inside the trace macro evaluate to the caller's caller when inlined? When inlined by the compiler, _RET_IP_ (which expands to __builtin_return_address(0)) will yield the instruction pointer of the enclosing function rather than the caller of percpu_ref_put_many(). Could the instruction pointer be passed as an explicit argument from the call site instead? > ref->data->release(ref); > + } > > rcu_read_unlock(); > } -- Sashiko AI review ยท https://sashiko.dev/#/patchset/[email protected]?part=3
