[PATCH 20/19] ARM: LPAE: Invalidate the TLB before freeing the PMD

Russell King - ARM Linux linux at arm.linux.org.uk
Wed May 11 10:00:10 EDT 2011


On Wed, May 11, 2011 at 02:40:49PM +0100, Catalin Marinas wrote:
> On Wed, 2011-05-11 at 11:54 +0100, Russell King - ARM Linux wrote:
> > One of the points about the shootdown interface is that it batches things
> > up.  So what's wrong with:
> > 
> > static inline void __pmd_free_tlb(struct mmu_gather *tlb, pmd_t *pmdp,
> >         unsigned long addr)
> > {
> > #ifdef CONFIG_ARM_LPAE
> >         tlb_add_flush(tlb, addr);
> >         tlb_remove_page(tlb, virt_to_page(pmdp));
> > #endif
> > }
> > 
> > and leave the tlb invalidate and actual page freeing to the batching code
> > to deal with?
> 
> There isn't a big overhead with my initial code as a pmd covers 1GB and
> we only have 1 or 2 pmds per process that we can free.
> 
> Is there any room for optimising the mmu_gather range? I think this only
> matters for case 1 in your tlb_flush() comment - unmapping a page range
> with a few pages in one pmd and a few other pages in the next pmd we get
> over 1GB range when we actually only need to flush the TLB for a few
> pages.

One of the points is to keep the code as similar to other architectures
so that the folk who are working on consolidating this stuff across other
architectures don't have to wonder why ARM is _unnecessarily_ doing things
differently.



More information about the linux-arm-kernel mailing list