On Wed, 23 Sep 2020 22:55:54 +0200 Thomas Gleixner tglx@linutronix.de wrote:
Perhaps make migrate_disable() an anonymous local_lock()?
This should lower the SHC in theory, if you can't have stacked migrate disables on the same CPU.
I'm pretty sure this ends up in locking hell pretty fast and aside of that it's not working for scenarios like:
kmap_local(); migrate_disable(); ... copy_from_user() -> #PF -> schedule()
which brought us into that discussion in the first place. You would stop any other migrate disable user from running until the page fault is resolved...
Then scratch the idea of having anonymous local_lock() and just bring local_lock in directly? Then have a kmap local lock, which would only block those that need to do a kmap.
Now as for migration disabled nesting, at least now we would have groupings of this, and perhaps the theorists can handle that. I mean, how is this much different that having a bunch of tasks blocked on a mutex with the owner is pinned on a CPU?
migrate_disable() is a BKL of pinning affinity. If we only have local_lock() available (even on !RT), then it makes the blocking in groups. At least this way you could grep for all the different local_locks in the system and plug that into the algorithm for WCS, just like one would with a bunch of mutexes.
-- Steve