diff options
| author | David S. Miller <davem@davemloft.net> | 2013-12-18 16:42:06 -0500 |
|---|---|---|
| committer | David S. Miller <davem@davemloft.net> | 2013-12-18 16:42:06 -0500 |
| commit | 143c9054949436cb05e468439dc5e46231f33d09 (patch) | |
| tree | c2e972d8188fb1b36368e9acb5b6b59466c9d903 /mm/huge_memory.c | |
| parent | 0b6807034791160d5e584138943d2daea765436d (diff) | |
| parent | 35eecf052250f663f07a4cded7d3503fd1b50729 (diff) | |
Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net
Conflicts:
drivers/net/ethernet/intel/i40e/i40e_main.c
drivers/net/macvtap.c
Both minor merge hassles, simple overlapping changes.
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'mm/huge_memory.c')
| -rw-r--r-- | mm/huge_memory.c | 12 |
1 files changed, 11 insertions, 1 deletions
diff --git a/mm/huge_memory.c b/mm/huge_memory.c index bccd5a628ea6..33a5dc492810 100644 --- a/mm/huge_memory.c +++ b/mm/huge_memory.c @@ -1481,8 +1481,18 @@ int move_huge_pmd(struct vm_area_struct *vma, struct vm_area_struct *new_vma, pmd = pmdp_get_and_clear(mm, old_addr, old_pmd); VM_BUG_ON(!pmd_none(*new_pmd)); set_pmd_at(mm, new_addr, new_pmd, pmd_mksoft_dirty(pmd)); - if (new_ptl != old_ptl) + if (new_ptl != old_ptl) { + pgtable_t pgtable; + + /* + * Move preallocated PTE page table if new_pmd is on + * different PMD page table. + */ + pgtable = pgtable_trans_huge_withdraw(mm, old_pmd); + pgtable_trans_huge_deposit(mm, new_pmd, pgtable); + spin_unlock(new_ptl); + } spin_unlock(old_ptl); } out: |
