powerpc/mm: Move WIMG update to helper.
authorAneesh Kumar K.V <aneesh.kumar@linux.vnet.ibm.com>
Tue, 1 Dec 2015 03:36:51 +0000 (09:06 +0530)
committerMichael Ellerman <mpe@ellerman.id.au>
Mon, 14 Dec 2015 04:19:13 +0000 (15:19 +1100)
Only difference here is, we apply the WIMG mapping early, so rflags
passed to updatepp will also be changed.

Acked-by: Scott Wood <scottwood@freescale.com>
Signed-off-by: Aneesh Kumar K.V <aneesh.kumar@linux.vnet.ibm.com>
Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
arch/powerpc/mm/hash64_4k.c
arch/powerpc/mm/hash64_64k.c
arch/powerpc/mm/hash_utils_64.c
arch/powerpc/mm/hugepage-hash64.c
arch/powerpc/mm/hugetlbpage-hash64.c

index ee86313..e7c0454 100644 (file)
@@ -54,11 +54,6 @@ int __hash_page_4K(unsigned long ea, unsigned long access, unsigned long vsid,
         * need to add in 0x1 if it's a read-only user page
         */
        rflags = htab_convert_pte_flags(new_pte);
-       /*
-        * Add in WIMG bits
-        */
-       rflags |= (new_pte & (_PAGE_WRITETHRU | _PAGE_NO_CACHE |
-                               _PAGE_COHERENT | _PAGE_GUARDED));
 
        if (!cpu_has_feature(CPU_FTR_NOEXECUTE) &&
            !cpu_has_feature(CPU_FTR_COHERENT_ICACHE))
index b14280e..0762c1e 100644 (file)
@@ -86,11 +86,6 @@ int __hash_page_4K(unsigned long ea, unsigned long access, unsigned long vsid,
         */
        subpg_pte = new_pte & ~subpg_prot;
        rflags = htab_convert_pte_flags(subpg_pte);
-       /*
-        * Add in WIMG bits
-        */
-       rflags |= (subpg_pte & (_PAGE_WRITETHRU | _PAGE_NO_CACHE |
-                               _PAGE_COHERENT | _PAGE_GUARDED));
 
        if (!cpu_has_feature(CPU_FTR_NOEXECUTE) &&
            !cpu_has_feature(CPU_FTR_COHERENT_ICACHE)) {
@@ -258,11 +253,6 @@ int __hash_page_64K(unsigned long ea, unsigned long access,
                                          old_pte, new_pte));
 
        rflags = htab_convert_pte_flags(new_pte);
-       /*
-        * Add in WIMG bits
-        */
-       rflags |= (new_pte & (_PAGE_WRITETHRU | _PAGE_NO_CACHE |
-                               _PAGE_COHERENT | _PAGE_GUARDED));
 
        if (!cpu_has_feature(CPU_FTR_NOEXECUTE) &&
            !cpu_has_feature(CPU_FTR_COHERENT_ICACHE))
index 6c67bd0..4233dcc 100644 (file)
@@ -182,7 +182,18 @@ unsigned long htab_convert_pte_flags(unsigned long pteflags)
        /*
         * Always add "C" bit for perf. Memory coherence is always enabled
         */
-       return rflags | HPTE_R_C | HPTE_R_M;
+       rflags |=  HPTE_R_C | HPTE_R_M;
+       /*
+        * Add in WIG bits
+        */
+       if (pteflags & _PAGE_WRITETHRU)
+               rflags |= HPTE_R_W;
+       if (pteflags & _PAGE_NO_CACHE)
+               rflags |= HPTE_R_I;
+       if (pteflags & _PAGE_GUARDED)
+               rflags |= HPTE_R_G;
+
+       return rflags;
 }
 
 int htab_bolt_mapping(unsigned long vstart, unsigned long vend,
index 91fcac6..1f666de 100644 (file)
@@ -120,13 +120,6 @@ int __hash_page_thp(unsigned long ea, unsigned long access, unsigned long vsid,
                pa = pmd_pfn(__pmd(old_pmd)) << PAGE_SHIFT;
                new_pmd |= _PAGE_HASHPTE;
 
-               /* Add in WIMG bits */
-               rflags |= (new_pmd & (_PAGE_WRITETHRU | _PAGE_NO_CACHE |
-                                     _PAGE_GUARDED));
-               /*
-                * enable the memory coherence always
-                */
-               rflags |= HPTE_R_M;
 repeat:
                hpte_group = ((hash & htab_hash_mask) * HPTES_PER_GROUP) & ~0x7UL;
 
index 304c852..0734e4d 100644 (file)
@@ -91,14 +91,6 @@ int __hash_page_huge(unsigned long ea, unsigned long access, unsigned long vsid,
                /* clear HPTE slot informations in new PTE */
                new_pte = (new_pte & ~_PAGE_HPTEFLAGS) | _PAGE_HASHPTE;
 
-               /* Add in WIMG bits */
-               rflags |= (new_pte & (_PAGE_WRITETHRU | _PAGE_NO_CACHE |
-                                     _PAGE_COHERENT | _PAGE_GUARDED));
-               /*
-                * enable the memory coherence always
-                */
-               rflags |= HPTE_R_M;
-
                slot = hpte_insert_repeating(hash, vpn, pa, rflags, 0,
                                             mmu_psize, ssize);