summaryrefslogtreecommitdiffstats
path: root/target/linux/generic-2.6/patches-2.6.21/31-use_kbuild.h.patch
diff options
context:
space:
mode:
Diffstat (limited to 'target/linux/generic-2.6/patches-2.6.21/31-use_kbuild.h.patch')
-rw-r--r--target/linux/generic-2.6/patches-2.6.21/31-use_kbuild.h.patch21
1 files changed, 21 insertions, 0 deletions
diff --git a/target/linux/generic-2.6/patches-2.6.21/31-use_kbuild.h.patch b/target/linux/generic-2.6/patches-2.6.21/31-use_kbuild.h.patch
new file mode 100644
index 000000000..45c753b55
--- /dev/null
+++ b/target/linux/generic-2.6/patches-2.6.21/31-use_kbuild.h.patch
@@ -0,0 +1,21 @@
+[MIPS] Fix computation of {PGD,PMD,PTE}_T_LOG2.
+
+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.
+
+--- a/include/asm-mips/pgtable.h
++++ b/include/asm-mips/pgtable.h
+@@ -168,9 +168,9 @@ static inline void pte_clear(struct mm_s
+ #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];
+