aboutsummaryrefslogtreecommitdiffstats
path: root/arch/powerpc/mm/pgtable-hash64.c
diff options
context:
space:
mode:
authorOliver O'Halloran <oohall@gmail.com>2017-06-27 21:32:34 -0400
committerMichael Ellerman <mpe@ellerman.id.au>2017-07-02 06:40:28 -0400
commitebd31197931d75c837269f3fd3365b4cee358faf (patch)
tree53525796d793b5cc488c21d5d1fca5cb739623eb /arch/powerpc/mm/pgtable-hash64.c
parentb584c2544041707ea041748dbfbb1081289c6cf5 (diff)
powerpc/mm: Add devmap support for ppc64
Add support for the devmap bit on PTEs and PMDs for PPC64 Book3S. This is used to differentiate device backed memory from transparent huge pages since they are handled in more or less the same manner by the core mm code. Cc: Aneesh Kumar K.V <aneesh.kumar@linux.vnet.ibm.com> Signed-off-by: Oliver O'Halloran <oohall@gmail.com> Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
Diffstat (limited to 'arch/powerpc/mm/pgtable-hash64.c')
-rw-r--r--arch/powerpc/mm/pgtable-hash64.c4
1 files changed, 3 insertions, 1 deletions
diff --git a/arch/powerpc/mm/pgtable-hash64.c b/arch/powerpc/mm/pgtable-hash64.c
index 16877f60fb87..a0facee58811 100644
--- a/arch/powerpc/mm/pgtable-hash64.c
+++ b/arch/powerpc/mm/pgtable-hash64.c
@@ -184,7 +184,7 @@ unsigned long hash__pmd_hugepage_update(struct mm_struct *mm, unsigned long addr
184 unsigned long old; 184 unsigned long old;
185 185
186#ifdef CONFIG_DEBUG_VM 186#ifdef CONFIG_DEBUG_VM
187 WARN_ON(!pmd_trans_huge(*pmdp)); 187 WARN_ON(!hash__pmd_trans_huge(*pmdp) && !pmd_devmap(*pmdp));
188 assert_spin_locked(&mm->page_table_lock); 188 assert_spin_locked(&mm->page_table_lock);
189#endif 189#endif
190 190
@@ -216,6 +216,7 @@ pmd_t hash__pmdp_collapse_flush(struct vm_area_struct *vma, unsigned long addres
216 216
217 VM_BUG_ON(address & ~HPAGE_PMD_MASK); 217 VM_BUG_ON(address & ~HPAGE_PMD_MASK);
218 VM_BUG_ON(pmd_trans_huge(*pmdp)); 218 VM_BUG_ON(pmd_trans_huge(*pmdp));
219 VM_BUG_ON(pmd_devmap(*pmdp));
219 220
220 pmd = *pmdp; 221 pmd = *pmdp;
221 pmd_clear(pmdp); 222 pmd_clear(pmdp);
@@ -296,6 +297,7 @@ void hash__pmdp_huge_split_prepare(struct vm_area_struct *vma,
296{ 297{
297 VM_BUG_ON(address & ~HPAGE_PMD_MASK); 298 VM_BUG_ON(address & ~HPAGE_PMD_MASK);
298 VM_BUG_ON(REGION_ID(address) != USER_REGION_ID); 299 VM_BUG_ON(REGION_ID(address) != USER_REGION_ID);
300 VM_BUG_ON(pmd_devmap(*pmdp));
299 301
300 /* 302 /*
301 * We can't mark the pmd none here, because that will cause a race 303 * We can't mark the pmd none here, because that will cause a race