memory.c (555a098af6086256bc64d3806519f37ccae936e0) | memory.c (e1f56c89b040134add93f686931cc266541d239a) |
---|---|
1/* 2 * linux/mm/memory.c 3 * 4 * Copyright (C) 1991, 1992, 1993, 1994 Linus Torvalds 5 */ 6 7/* 8 * demand-loading started 01.12.91 - seems it is high on the list of --- 368 unchanged lines hidden (view full) --- 377 * has been handled earlier when unmapping all the memory regions. 378 */ 379static void free_pte_range(struct mmu_gather *tlb, pmd_t *pmd, 380 unsigned long addr) 381{ 382 pgtable_t token = pmd_pgtable(*pmd); 383 pmd_clear(pmd); 384 pte_free_tlb(tlb, token, addr); | 1/* 2 * linux/mm/memory.c 3 * 4 * Copyright (C) 1991, 1992, 1993, 1994 Linus Torvalds 5 */ 6 7/* 8 * demand-loading started 01.12.91 - seems it is high on the list of --- 368 unchanged lines hidden (view full) --- 377 * has been handled earlier when unmapping all the memory regions. 378 */ 379static void free_pte_range(struct mmu_gather *tlb, pmd_t *pmd, 380 unsigned long addr) 381{ 382 pgtable_t token = pmd_pgtable(*pmd); 383 pmd_clear(pmd); 384 pte_free_tlb(tlb, token, addr); |
385 tlb->mm->nr_ptes--; | 385 atomic_long_dec(&tlb->mm->nr_ptes); |
386} 387 388static inline void free_pmd_range(struct mmu_gather *tlb, pud_t *pud, 389 unsigned long addr, unsigned long end, 390 unsigned long floor, unsigned long ceiling) 391{ 392 pmd_t *pmd; 393 unsigned long next; --- 174 unchanged lines hidden (view full) --- 568 * seen in-order. See the alpha page table accessors for the 569 * smp_read_barrier_depends() barriers in page table walking code. 570 */ 571 smp_wmb(); /* Could be smp_wmb__xxx(before|after)_spin_lock */ 572 573 spin_lock(&mm->page_table_lock); 574 wait_split_huge_page = 0; 575 if (likely(pmd_none(*pmd))) { /* Has another populated it ? */ | 386} 387 388static inline void free_pmd_range(struct mmu_gather *tlb, pud_t *pud, 389 unsigned long addr, unsigned long end, 390 unsigned long floor, unsigned long ceiling) 391{ 392 pmd_t *pmd; 393 unsigned long next; --- 174 unchanged lines hidden (view full) --- 568 * seen in-order. See the alpha page table accessors for the 569 * smp_read_barrier_depends() barriers in page table walking code. 570 */ 571 smp_wmb(); /* Could be smp_wmb__xxx(before|after)_spin_lock */ 572 573 spin_lock(&mm->page_table_lock); 574 wait_split_huge_page = 0; 575 if (likely(pmd_none(*pmd))) { /* Has another populated it ? */ |
576 mm->nr_ptes++; | 576 atomic_long_inc(&mm->nr_ptes); |
577 pmd_populate(mm, pmd, new); 578 new = NULL; 579 } else if (unlikely(pmd_trans_splitting(*pmd))) 580 wait_split_huge_page = 1; 581 spin_unlock(&mm->page_table_lock); 582 if (new) 583 pte_free(mm, new); 584 if (wait_split_huge_page) --- 3687 unchanged lines hidden --- | 577 pmd_populate(mm, pmd, new); 578 new = NULL; 579 } else if (unlikely(pmd_trans_splitting(*pmd))) 580 wait_split_huge_page = 1; 581 spin_unlock(&mm->page_table_lock); 582 if (new) 583 pte_free(mm, new); 584 if (wait_split_huge_page) --- 3687 unchanged lines hidden --- |