[MIPS] Fix computation of {PGD,PMD,PTE}_T_LOG2.
authorRalf Baechle <ralf@linux-mips.org>
Wed, 1 Aug 2007 14:25:28 +0000 (15:25 +0100)
committerRalf Baechle <ralf@linux-mips.org>
Mon, 27 Aug 2007 01:16:48 +0000 (02:16 +0100)
For the generation of asm-offset.h to work these need to be evaulatable
by gcc as a constant expression.  This issue did exist for a while but
didn't bite because they're only in asm-offset.h for debugging purposes.

Signed-off-by: Ralf Baechle <ralf@linux-mips.org>
include/asm-mips/pgtable.h

index 2e2d70d13ff6b0e352d0664b06c8021a599527c4..e2fb9dbac3fcfd564d1f9fd191115c91fdd369e3 100644 (file)
@@ -168,9 +168,9 @@ static inline void pte_clear(struct mm_struct *mm, unsigned long addr, pte_t *pt
 #define set_pud(pudptr, pudval) do { *(pudptr) = (pudval); } while(0)
 #endif
 
-#define PGD_T_LOG2     ffz(~sizeof(pgd_t))
-#define PMD_T_LOG2     ffz(~sizeof(pmd_t))
-#define PTE_T_LOG2     ffz(~sizeof(pte_t))
+#define PGD_T_LOG2     (__builtin_ffs(sizeof(pgd_t)) - 1)
+#define PMD_T_LOG2     (__builtin_ffs(sizeof(pmd_t)) - 1)
+#define PTE_T_LOG2     (__builtin_ffs(sizeof(pte_t)) - 1)
 
 extern pgd_t swapper_pg_dir[PTRS_PER_PGD];