Re: x86_64: potential critical issue with quicklists and page tablepages

From: Linus Torvalds
Date: Fri Sep 21 2007 - 15:21:00 EST




On Fri, 21 Sep 2007, Christoph Lameter wrote:
>
> The final flush does only check if there are too many pages on the
> quicklists. Otherwise the quicklist is not dumped/freed (unlike the
> mmu_gather list) but kept for the following page table page allocations
> since we have cache hot cpu objects there.

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
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/