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 ee863137035aebd78358933499078ef1bb25c9a7..e7c04542ba62255d7547f5e204724c5d85e46c4a 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 b14280e9d850a60ac7800811e9fe59765d061de5..0762c1e08c88644f35cc8a3df5ba50c52c1801a2 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 6c67bd0bec55743ba99c67381934fde6960c8da1..4233dcccbaf7728d6afe86c0d250bd1b1e88a952 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 91fcac6f989d69f0e64fa3a180b6252f9b4e4fb0..1f666de0110acf80da3e3e3be067f1dfc58be44c 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 304c8520506e72be36563a00501c9630828cef88..0734e4daffefd1b91a8c18953a5ec973601ff373 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);