UML - Customize tlb.h
PATCH 1/5 UML - Customize tlb.h
[ Removed the check of mm_users which can't succeed and gave tlb.h an include of percpu.h ]
Customize the hooks in tlb.h to optimize TLB flushing some more.
Add start and end fields to tlb_gather_mmu, which are used to limit the address space range scanned when a region is unmapped.
The interfaces which just free page tables, without actually changing mappings, don't need to cause a TLB flush.
--- arch/um/kernel/tlb.c | 25 +++++++--- include/asm-um/tlb.h | 122 ++++++++++++++++++++++++++++++++++++++++++++++++++- 2 files changed, 139 insertions(+), 8 deletions(-)
arch/um/kernel/tlb.c +18 -7
@@ -193,18 +193,18 @@ static inline int update_pte_range(pmd_tif (!pte_young (*pte)) { r =0 ; w =0 ; - }else if (!pte_dirty (*pte)) { + }else if (!pte_dirty (*pte)) w =0 ; - } + prot = ((r ?UM_PROT_READ :0 ) | (w ?UM_PROT_WRITE :0 ) | (x ?UM_PROT_EXEC :0 ));if (hvc->force ||pte_newpage (*pte)) {if (pte_present (*pte)) ret =add_mmap (addr,pte_val (*pte) &PAGE_MASK ,PAGE_SIZE , prot, hvc); -else ret =add_munmap (addr,PAGE_SIZE , hvc); - } -else if (pte_newprot (*pte)) +else + ret =add_munmap (addr,PAGE_SIZE , hvc); + }else if (pte_newprot (*pte)) ret =add_mprotect (addr,PAGE_SIZE , prot, hvc); *pte =pte_mkuptodate (*pte); }while (pte++, addr +=PAGE_SIZE , ((addr != end) && !ret));
@@ -500,7 +500,8 @@ void flush_tlb_range(struct vm_area_struelse fix_range (vma->vm_mm, start, end,0 ); } -void flush_tlb_mm (struct mm_struct *mm) +void flush_tlb_mm_range (struct mm_struct *mm,unsigned long start, +unsigned long end) {/* * Don't bother flushing if this address space is about to be
@@ -509,7 +510,17 @@ void flush_tlb_mm(struct mm_struct *mm)if (atomic_read (&mm->mm_users) ==0 )return ; -fix_range (mm,0 ,TASK_SIZE ,0 ); +fix_range (mm, start, end,0 ); +} + +void flush_tlb_mm (struct mm_struct *mm) +{ +struct vm_area_struct *vma = mm->mmap; + +while (vma !=NULL ) { +fix_range (mm, vma->vm_start, vma->vm_end,0 ); + vma = vma->vm_next; + } }void force_flush_all (void )
include/asm-um/tlb.h +121 -1
127 lines not on this page · raw message
-------------------------------------------------------------------------
SF.Net email is sponsored by:
Check out the new SourceForge.net Marketplace.
It's the best place to buy or sell services for
just about anything Open Source.
http://sourceforge.net/services/buy/index.php
_______________________________________________
User-mode-linux-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/user-mode-linux-devel