diff options
Diffstat (limited to 'arch/sparc/mm/tlb.c')
| -rw-r--r-- | arch/sparc/mm/tlb.c | 19 | 
1 files changed, 13 insertions, 6 deletions
diff --git a/arch/sparc/mm/tlb.c b/arch/sparc/mm/tlb.c index 847ddffbf38a..b5cfab711651 100644 --- a/arch/sparc/mm/tlb.c +++ b/arch/sparc/mm/tlb.c @@ -163,13 +163,10 @@ static void tlb_batch_pmd_scan(struct mm_struct *mm, unsigned long vaddr,  	pte_unmap(pte);  } -void set_pmd_at(struct mm_struct *mm, unsigned long addr, -		pmd_t *pmdp, pmd_t pmd) -{ -	pmd_t orig = *pmdp; - -	*pmdp = pmd; +static void __set_pmd_acct(struct mm_struct *mm, unsigned long addr, +			   pmd_t orig, pmd_t pmd) +{  	if (mm == &init_mm)  		return; @@ -219,6 +216,15 @@ void set_pmd_at(struct mm_struct *mm, unsigned long addr,  	}  } +void set_pmd_at(struct mm_struct *mm, unsigned long addr, +		pmd_t *pmdp, pmd_t pmd) +{ +	pmd_t orig = *pmdp; + +	*pmdp = pmd; +	__set_pmd_acct(mm, addr, orig, pmd); +} +  static inline pmd_t pmdp_establish(struct vm_area_struct *vma,  		unsigned long address, pmd_t *pmdp, pmd_t pmd)  { @@ -227,6 +233,7 @@ static inline pmd_t pmdp_establish(struct vm_area_struct *vma,  	do {  		old = *pmdp;  	} while (cmpxchg64(&pmdp->pmd, old.pmd, pmd.pmd) != old.pmd); +	__set_pmd_acct(vma->vm_mm, address, old, pmd);  	return old;  }  | 

