On Mon, Apr 17, 2023 at 06:22:14PM +0200, John Stultz wrote:
On Mon, Apr 17, 2023 at 1:19 PM Peter Zijlstra peterz@infradead.org wrote:
On Wed, Apr 12, 2023 at 03:59:05AM +0000, John Stultz wrote:
Apparently despite it being marked inline, the compiler may not inline __down_read_common() which makes it difficult to identify the cause of lock contention, as the blocked function will always be listed as __down_read_common().
So this patch adds __always_inline annotation to the function to force it to be inlines so the calling function will be listed.
I'm a wee bit confused; what are you looking at? Wchan?
Apologies! Yes, traceevent data via wchan, sorry I didn't make that clear.
No worries; good addition to the v3 Changelog ;-)
What is stopping the compiler from now handing you __down_read{,_interruptible,_killable}() instead? Is that fine?
No, we want to make the blocked calling function, rather than the locking functions, visible in the tracepoints captured. That said, the other __down_read* functions seem to be properly inlined in practice (Waiman's theory as to why sounds convincing to me).
Right, but we should not rely on the compiler heuristics for correctness :-)
If you'd like I can add those as well to be always_inline, as well so it's more consistent?
Yes please. I'm not sure I care much about the whole 'inline __sched' vs '__always_inline' thing, but I do feel it should all be consistently applied.