powerpc/mm: flatten function __find_linux_pte() step 1
authorChristophe Leroy <christophe.leroy@c-s.fr>
Fri, 26 Apr 2019 05:59:51 +0000 (05:59 +0000)
committerMichael Ellerman <mpe@ellerman.id.au>
Thu, 2 May 2019 15:20:24 +0000 (01:20 +1000)
__find_linux_pte() is full of if/else which is hard to
follow allthough the handling is pretty simple.

This patch flattens the function by getting rid of as much if/else
as possible. In order to ease the review, this is done in three steps.

Signed-off-by: Christophe Leroy <christophe.leroy@c-s.fr>
Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
arch/powerpc/mm/pgtable.c

index 9f4ccd15849f016ea2375ca839fd587aadb58cb3..d332abeedf0a496133902387571ed00aa09daa03 100644 (file)
@@ -339,12 +339,16 @@ pte_t *__find_linux_pte(pgd_t *pgdir, unsigned long ea,
         */
        if (pgd_none(pgd))
                return NULL;
-       else if (pgd_huge(pgd)) {
-               ret_pte = (pte_t *) pgdp;
+
+       if (pgd_huge(pgd)) {
+               ret_pte = (pte_t *)pgdp;
                goto out;
-       } else if (is_hugepd(__hugepd(pgd_val(pgd))))
+       }
+       if (is_hugepd(__hugepd(pgd_val(pgd)))) {
                hpdp = (hugepd_t *)&pgd;
-       else {
+               goto out_huge;
+       }
+       {
                /*
                 * Even if we end up with an unmap, the pgtable will not
                 * be freed, because we do an rcu free and here we are
@@ -356,12 +360,16 @@ pte_t *__find_linux_pte(pgd_t *pgdir, unsigned long ea,
 
                if (pud_none(pud))
                        return NULL;
-               else if (pud_huge(pud)) {
+
+               if (pud_huge(pud)) {
                        ret_pte = (pte_t *) pudp;
                        goto out;
-               } else if (is_hugepd(__hugepd(pud_val(pud))))
+               }
+               if (is_hugepd(__hugepd(pud_val(pud)))) {
                        hpdp = (hugepd_t *)&pud;
-               else {
+                       goto out_huge;
+               }
+               {
                        pdshift = PMD_SHIFT;
                        pmdp = pmd_offset(&pud, ea);
                        pmd  = READ_ONCE(*pmdp);
@@ -386,12 +394,16 @@ pte_t *__find_linux_pte(pgd_t *pgdir, unsigned long ea,
                        if (pmd_huge(pmd) || pmd_large(pmd)) {
                                ret_pte = (pte_t *) pmdp;
                                goto out;
-                       } else if (is_hugepd(__hugepd(pmd_val(pmd))))
+                       }
+                       if (is_hugepd(__hugepd(pmd_val(pmd)))) {
                                hpdp = (hugepd_t *)&pmd;
-                       else
-                               return pte_offset_kernel(&pmd, ea);
+                               goto out_huge;
+                       }
+
+                       return pte_offset_kernel(&pmd, ea);
                }
        }
+out_huge:
        if (!hpdp)
                return NULL;