Yeah, and the whole thing seems totally bogus. It totally depends on
mmu_gather doing everything right (which very much includes the dependency
on mmu gathering disabling preempt).
For exmaple, if we were to go back to the original small tlb_gather with a
simple quicklist on the stack, rather than the per-cpu datastructure, the
quicklists would immediately break horribly - simply because they are
incorrectly now depending on the internal semantics of that tlb-gather.
As it is, the quicklists try to be something separate, but by virtue of
being separate, they will always be buggy.
The only way to fix it would be to integrate the quicklist stuff *with*
the mmu_gather stuff, so that these kinds of implementation issues are
explicitly shown in the relationship, instead of havign two "independent"
pieces of code where one piece very subtly depends on the exact
implementation of the other.
Linus
-