Re: New version of pageattr caching conflict fix for 2.4

Benjamin LaHaise (bcrl@redhat.com)
Thu, 13 Jun 2002 21:37:24 -0400


On Fri, Jun 14, 2002 at 03:24:29AM +0200, Andi Kleen wrote:
> > This version is missing a few of the fixes included in my version:
> > it doesn't properly flush global tlb entries, or update the page
>
> Sure it does. INVLPG (__flush_tlb_one) flushes global entries.

It failed to do so in my testing. The only safe way of flushing
global entries is to disable them in cr4 before attempting the
tlb flush.

> > tables of processes which have copied 4MB page table entries into
> > their page tables. Also, the revert_page function must be called
>
> That's done in set_pmd_page.

Doh. I should consume coffee after waking up but before posting...

> > before the tlb flush and free the page after the tlb flush, or
> > else tlb prefetching on the P4 can cache stale pmd pointers. I'd
>
> Fair point. Hmm, I had that correct, but somehow it got messed up again.
>
> Another thing that probably needs to be added is that DRM needs
> some change_page_attr() calls too, because it does private AGP mappings.

I'd still prefer to get the typing of the page table manipulations
correct. Also, the code can prematurely revert to 4MB mappings if
the caller does anything awry, like changing the attributes back to
standard attributes on the same page twice. The usage of #ifdef __i386__
is inconsistent, too.

-ben

-- 
"You will be reincarnated as a toad; and you will be much happier."
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/