Re: [PATCH] mm: fix up a spurious page fault whenever it happens

From: Rik van Riel
Date: Wed May 22 2013 - 14:45:58 EST


On 05/22/2013 02:42 PM, H. Peter Anvin wrote:
On 05/22/2013 11:35 AM, Rik van Riel wrote:
On 05/22/2013 02:21 PM, Stanislav Meduna wrote:
On 22.05.2013 20:11, Steven Rostedt wrote:

Did you apply both patches? Without the first one, this one is
meaningless.

Sure.

BTW, back when I tried to pinpoint it I also tried adding
flush_tlb_page(vma, address)
at the beginning of handle_pte_fault, which as I read should
be basically the same. It did not not change anything.

I'm stumped.

If the Geode knows how to flush single TLB entries, it
should do that when flush_tlb_page is called.

If it does not know, it should throw an invalid instruction
exception, and not quietly complete the instruction without
doing anything.


Some CPUs have had errata when it comes to flushing large pages that
have been split into small pages by hardware, e.g. due to MTRR
conflicts. In that case, fragments of the large page may have been left
in the TLB.

Could that explain what you are seeing?

That would be testable by changing __native_flush_tlb_single()
to call __flush_tlb(), instead of doing an invlpg instruction.

In other words, make the code look like this, for testing:

static inline void __native_flush_tlb_single(unsigned long addr)
{
__flush_tlb();
}

This on top of the other two patches.
--
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/