mm: numa: avoid unnecessary TLB flushes when setting NUMA hinting entries
If a PTE or PMD is already marked NUMA when scanning to mark entries for NUMA hinting then it is not necessary to update the entry and incur a TLB flush penalty. Avoid the avoidhead where possible. Signed-off-by: Mel Gorman <mgorman@suse.de> Cc: Aneesh Kumar K.V <aneesh.kumar@linux.vnet.ibm.com> Cc: Benjamin Herrenschmidt <benh@kernel.crashing.org> Cc: Dave Jones <davej@redhat.com> Cc: Hugh Dickins <hughd@google.com> Cc: Ingo Molnar <mingo@redhat.com> Cc: Kirill Shutemov <kirill.shutemov@linux.intel.com> Cc: Linus Torvalds <torvalds@linux-foundation.org> Cc: Paul Mackerras <paulus@samba.org> Cc: Rik van Riel <riel@redhat.com> Cc: Sasha Levin <sasha.levin@oracle.com> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
This commit is contained in:
		
					parent
					
						
							
								c0e7cad9f2
							
						
					
				
			
			
				commit
				
					
						10c1045f28
					
				
			
		
					 2 changed files with 12 additions and 6 deletions
				
			
		|  | @ -1493,12 +1493,14 @@ int change_huge_pmd(struct vm_area_struct *vma, pmd_t *pmd, | |||
| 			return 0; | ||||
| 		} | ||||
| 
 | ||||
| 		ret = 1; | ||||
| 		entry = pmdp_get_and_clear_notify(mm, addr, pmd); | ||||
| 		entry = pmd_modify(entry, newprot); | ||||
| 		ret = HPAGE_PMD_NR; | ||||
| 		set_pmd_at(mm, addr, pmd, entry); | ||||
| 		BUG_ON(pmd_write(entry)); | ||||
| 		if (!prot_numa || !pmd_protnone(*pmd)) { | ||||
| 			ret = 1; | ||||
| 			entry = pmdp_get_and_clear_notify(mm, addr, pmd); | ||||
| 			entry = pmd_modify(entry, newprot); | ||||
| 			ret = HPAGE_PMD_NR; | ||||
| 			set_pmd_at(mm, addr, pmd, entry); | ||||
| 			BUG_ON(pmd_write(entry)); | ||||
| 		} | ||||
| 		spin_unlock(ptl); | ||||
| 	} | ||||
| 
 | ||||
|  |  | |||
|  | @ -86,6 +86,10 @@ static unsigned long change_pte_range(struct vm_area_struct *vma, pmd_t *pmd, | |||
| 				page = vm_normal_page(vma, addr, oldpte); | ||||
| 				if (!page || PageKsm(page)) | ||||
| 					continue; | ||||
| 
 | ||||
| 				/* Avoid TLB flush if possible */ | ||||
| 				if (pte_protnone(oldpte)) | ||||
| 					continue; | ||||
| 			} | ||||
| 
 | ||||
| 			ptent = ptep_modify_prot_start(mm, addr, pte); | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 Mel Gorman
				Mel Gorman