On Sat, 5 Sep 2015 12:30:59 +0200 (CEST) Thomas Gleixner <tglx@xxxxxxxxxxxxx> wrote: > So the problem we need to solve is: > > retry: > lock(B); > if (!try_lock(A)) { > unlock(B); > cpu_relax(); > goto retry; > } > > So instead of doing that proposed magic boost, we can do something > more straight forward: > > retry: > lock(B); > if (!try_lock(A)) { > lock_and_drop(A, B); > unlock(A); > goto retry; > } > > lock_and_drop() queues the task as a waiter on A, drops B and then > does the PI adjustment on A. That was my original solution, and I believe I added patches to do exactly that to the networking code in the past. I remember writing that helper function such that on non PREEMPT_RT it was a nop. I even had that solution in my slides at LinuxCon/LinuxPlumbers ;-) But then I talk about dcache.c. Take a look at that file, and the complexity of that. Is it safe to take the inode and dcache parent locks after you unlock the other locks? -- Steve -- To unsubscribe from this list: send the line "unsubscribe linux-rt-users" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html