Ticket #4391: 0014-general-fixes-for-openwrt-with-kernel-2.6.28.patch

File 0014-general-fixes-for-openwrt-with-kernel-2.6.28.patch, 12.0 KB (added by Hauke <hauke@…>, 9 years ago)

[PATCH] general fixes for openwrt with kernel 2.6.28

  • package/kernel/modules/wireless.mk

    From bd92b439c8aebe38ba6c710d9e2b0899cb836bd0 Mon Sep 17 00:00:00 2001
    From: Hauke Mehrtens <hauke@hauke-m.de>
    Date: Sun, 28 Dec 2008 16:29:43 +0100
    Subject: [PATCH] general fixes for openwrt with kernel 2.6.28
    
    
    Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
    ---
     package/kernel/modules/wireless.mk                 |    5 +-
     .../patches-2.6.28/300-fix_byteorder_header.patch  |  348 ++++++++++++++++++++
     .../170-fix_kernel_types_with_recent_kernel.patch  |   21 ++
     3 files changed, 372 insertions(+), 2 deletions(-)
     create mode 100644 target/linux/generic-2.6/patches-2.6.28/300-fix_byteorder_header.patch
     create mode 100644 toolchain/uClibc/patches/170-fix_kernel_types_with_recent_kernel.patch
    
    diff --git a/package/kernel/modules/wireless.mk b/package/kernel/modules/wireless.mk
    index 4db22ae..6351ca8 100644
    a b define KernelPackage/net-hermes 
    140140  KCONFIG:=CONFIG_HERMES 
    141141  FILES:= \ 
    142142        $(LINUX_DIR)/drivers/net/wireless/hermes.$(LINUX_KMOD_SUFFIX) \ 
    143         $(LINUX_DIR)/drivers/net/wireless/orinoco.$(LINUX_KMOD_SUFFIX) 
    144   AUTOLOAD:=$(call AutoLoad,50,hermes orinoco) 
     143        $(LINUX_DIR)/drivers/net/wireless/orinoco.$(LINUX_KMOD_SUFFIX) \ 
     144    $(if $(CONFIG_LINUX_2_6_28),$(LINUX_DIR)/drivers/net/wireless/hermes_dld.$(LINUX_KMOD_SUFFIX)) 
     145  AUTOLOAD:=$(if $(CONFIG_LINUX_2_6_28),$(call AutoLoad,50,hermes hermes_dld orinoco),$(call AutoLoad,50,hermes orinoco)) 
    145146endef 
    146147 
    147148define KernelPackage/net-hermes/description 
  • new file target/linux/generic-2.6/patches-2.6.28/300-fix_byteorder_header.patch

    diff --git a/target/linux/generic-2.6/patches-2.6.28/300-fix_byteorder_header.patch b/target/linux/generic-2.6/patches-2.6.28/300-fix_byteorder_header.patch
    new file mode 100644
    index 0000000..8a4e088
    - +  
     1glibc headers define both __LITTLE_ENDIAN and __BIG_ENDIAN 
     2which was tripping the check in linux/byteorder.h.  Let's 
     3just stay out of userspace's way and use __KERN_{endian} 
     4 
     5The old implementation got away with it as it kept the two 
     6implementations in different headers and conditionally included 
     7the right one.  The combined header does checks within each 
     8function body and depends on only one being defined. 
     9 
     10Converted the arches in mainline that have already moved to the 
     11new header, as the other arches merge the will need simlar 
     12fixups. 
     13 
     14Signed-off-by: Harvey Harrison <harvey.harrison@gmail.com> 
     15--- 
     16 arch/avr32/include/asm/byteorder.h |    2 +- 
     17 arch/mips/include/asm/byteorder.h  |    4 +- 
     18 arch/sh/include/asm/byteorder.h    |    4 +- 
     19 arch/sparc/include/asm/byteorder.h |    2 +- 
     20 include/linux/byteorder.h          |   84 ++++++++++++++++++------------------ 
     21 5 files changed, 48 insertions(+), 48 deletions(-) 
     22 
     23diff --git a/arch/avr32/include/asm/byteorder.h b/arch/avr32/include/asm/byteorder.h 
     24index 8e3af02..b7d6dd1 100644 
     25--- a/arch/avr32/include/asm/byteorder.h 
     26+++ b/arch/avr32/include/asm/byteorder.h 
     27@@ -7,7 +7,7 @@ 
     28 #include <asm/types.h> 
     29 #include <linux/compiler.h> 
     30  
     31-#define __BIG_ENDIAN 
     32+#define __KERN_BIG_ENDIAN 
     33 #define __SWAB_64_THRU_32__ 
     34  
     35 #ifdef __CHECKER__ 
     36diff --git a/arch/mips/include/asm/byteorder.h b/arch/mips/include/asm/byteorder.h 
     37index 2988d29..8ad8a5b 100644 
     38--- a/arch/mips/include/asm/byteorder.h 
     39+++ b/arch/mips/include/asm/byteorder.h 
     40@@ -12,9 +12,9 @@ 
     41 #include <asm/types.h> 
     42  
     43 #if defined(__MIPSEB__) 
     44-# define __BIG_ENDIAN 
     45+# define __KERN_BIG_ENDIAN 
     46 #elif defined(__MIPSEL__) 
     47-# define __LITTLE_ENDIAN 
     48+# define __KERN_LITTLE_ENDIAN 
     49 #else 
     50 # error "MIPS, but neither __MIPSEB__, nor __MIPSEL__???" 
     51 #endif 
     52diff --git a/arch/sh/include/asm/byteorder.h b/arch/sh/include/asm/byteorder.h 
     53index f5fa065..4aa5f1d 100644 
     54--- a/arch/sh/include/asm/byteorder.h 
     55+++ b/arch/sh/include/asm/byteorder.h 
     56@@ -9,9 +9,9 @@ 
     57 #include <linux/types.h> 
     58  
     59 #ifdef __LITTLE_ENDIAN__ 
     60-# define __LITTLE_ENDIAN 
     61+# define __KERN_LITTLE_ENDIAN 
     62 #else 
     63-# define __BIG_ENDIAN 
     64+# define __KERN_BIG_ENDIAN 
     65 #endif 
     66  
     67 #define __SWAB_64_THRU_32__ 
     68diff --git a/arch/sparc/include/asm/byteorder.h b/arch/sparc/include/asm/byteorder.h 
     69index 5a70f13..5b8347e 100644 
     70--- a/arch/sparc/include/asm/byteorder.h 
     71+++ b/arch/sparc/include/asm/byteorder.h 
     72@@ -4,7 +4,7 @@ 
     73 #include <asm/types.h> 
     74 #include <asm/asi.h> 
     75  
     76-#define __BIG_ENDIAN 
     77+#define __KERN_BIG_ENDIAN 
     78  
     79 #ifdef CONFIG_SPARC32 
     80 #define __SWAB_64_THRU_32__ 
     81diff --git a/include/linux/byteorder.h b/include/linux/byteorder.h 
     82index 29f002d..3599fbc 100644 
     83--- a/include/linux/byteorder.h 
     84+++ b/include/linux/byteorder.h 
     85@@ -4,33 +4,33 @@ 
     86 #include <linux/types.h> 
     87 #include <linux/swab.h> 
     88  
     89-#if defined(__LITTLE_ENDIAN) && defined(__BIG_ENDIAN) 
     90+#if defined(__KERN_LITTLE_ENDIAN) && defined(__KERN_BIG_ENDIAN) 
     91 # error Fix asm/byteorder.h to define one endianness 
     92 #endif 
     93  
     94-#if !defined(__LITTLE_ENDIAN) && !defined(__BIG_ENDIAN) 
     95+#if !defined(__KERN_LITTLE_ENDIAN) && !defined(__KERN_BIG_ENDIAN) 
     96 # error Fix asm/byteorder.h to define arch endianness 
     97 #endif 
     98  
     99-#ifdef __LITTLE_ENDIAN 
     100-# undef __LITTLE_ENDIAN 
     101-# define __LITTLE_ENDIAN 1234 
     102+#ifdef __KERN_LITTLE_ENDIAN 
     103+# ifndef __LITTLE_ENDIAN 
     104+#  define __LITTLE_ENDIAN 1234 
     105+# endif 
     106+# ifndef __LITTLE_ENDIAN_BITFIELD 
     107+#  define __LITTLE_ENDIAN_BITFIELD 
     108+# endif 
     109 #endif 
     110  
     111-#ifdef __BIG_ENDIAN 
     112-# undef __BIG_ENDIAN 
     113-# define __BIG_ENDIAN 4321 
     114+#ifdef __KERN_BIG_ENDIAN 
     115+# ifndef __BIG_ENDIAN 
     116+#  define __BIG_ENDIAN 4321 
     117+# endif 
     118+# ifndef __BIG_ENDIAN_BITFIELD 
     119+#  define __BIG_ENDIAN_BITFIELD 
     120+# endif 
     121 #endif 
     122  
     123-#if defined(__LITTLE_ENDIAN) && !defined(__LITTLE_ENDIAN_BITFIELD) 
     124-# define __LITTLE_ENDIAN_BITFIELD 
     125-#endif 
     126- 
     127-#if defined(__BIG_ENDIAN) && !defined(__BIG_ENDIAN_BITFIELD) 
     128-# define __BIG_ENDIAN_BITFIELD 
     129-#endif 
     130- 
     131-#ifdef __LITTLE_ENDIAN 
     132+#ifdef __KERN_LITTLE_ENDIAN 
     133 # define __le16_to_cpu(x) ((__force __u16)(__le16)(x)) 
     134 # define __le32_to_cpu(x) ((__force __u32)(__le32)(x)) 
     135 # define __le64_to_cpu(x) ((__force __u64)(__le64)(x)) 
     136@@ -46,7 +46,7 @@ 
     137 # define __cpu_to_be64(x) ((__force __be64)__swab64(x)) 
     138 #endif 
     139  
     140-#ifdef __BIG_ENDIAN 
     141+#ifdef __KERN_BIG_ENDIAN 
     142 # define __be16_to_cpu(x) ((__force __u16)(__be16)(x)) 
     143 # define __be32_to_cpu(x) ((__force __u32)(__be32)(x)) 
     144 # define __be64_to_cpu(x) ((__force __u64)(__be64)(x)) 
     145@@ -87,91 +87,91 @@ 
     146  
     147 static inline void __le16_to_cpus(__u16 *p) 
     148 { 
     149-#ifdef __BIG_ENDIAN 
     150+#ifdef __KERN_BIG_ENDIAN 
     151        __swab16s(p); 
     152 #endif 
     153 } 
     154  
     155 static inline void __cpu_to_le16s(__u16 *p) 
     156 { 
     157-#ifdef __BIG_ENDIAN 
     158+#ifdef __KERN_BIG_ENDIAN 
     159        __swab16s(p); 
     160 #endif 
     161 } 
     162  
     163 static inline void __le32_to_cpus(__u32 *p) 
     164 { 
     165-#ifdef __BIG_ENDIAN 
     166+#ifdef __KERN_BIG_ENDIAN 
     167        __swab32s(p); 
     168 #endif 
     169 } 
     170  
     171 static inline void __cpu_to_le32s(__u32 *p) 
     172 { 
     173-#ifdef __BIG_ENDIAN 
     174+#ifdef __KERN_BIG_ENDIAN 
     175        __swab32s(p); 
     176 #endif 
     177 } 
     178  
     179 static inline void __le64_to_cpus(__u64 *p) 
     180 { 
     181-#ifdef __BIG_ENDIAN 
     182+#ifdef __KERN_BIG_ENDIAN 
     183        __swab64s(p); 
     184 #endif 
     185 } 
     186  
     187 static inline void __cpu_to_le64s(__u64 *p) 
     188 { 
     189-#ifdef __BIG_ENDIAN 
     190+#ifdef __KERN_BIG_ENDIAN 
     191        __swab64s(p); 
     192 #endif 
     193 } 
     194  
     195 static inline void __be16_to_cpus(__u16 *p) 
     196 { 
     197-#ifdef __LITTLE_ENDIAN 
     198+#ifdef __KERN_LITTLE_ENDIAN 
     199        __swab16s(p); 
     200 #endif 
     201 } 
     202  
     203 static inline void __cpu_to_be16s(__u16 *p) 
     204 { 
     205-#ifdef __LITTLE_ENDIAN 
     206+#ifdef __KERN_LITTLE_ENDIAN 
     207        __swab16s(p); 
     208 #endif 
     209 } 
     210  
     211 static inline void __be32_to_cpus(__u32 *p) 
     212 { 
     213-#ifdef __LITTLE_ENDIAN 
     214+#ifdef __KERN_LITTLE_ENDIAN 
     215        __swab32s(p); 
     216 #endif 
     217 } 
     218  
     219 static inline void __cpu_to_be32s(__u32 *p) 
     220 { 
     221-#ifdef __LITTLE_ENDIAN 
     222+#ifdef __KERN_LITTLE_ENDIAN 
     223        __swab32s(p); 
     224 #endif 
     225 } 
     226  
     227 static inline void __be64_to_cpus(__u64 *p) 
     228 { 
     229-#ifdef __LITTLE_ENDIAN 
     230+#ifdef __KERN_LITTLE_ENDIAN 
     231        __swab64s(p); 
     232 #endif 
     233 } 
     234  
     235 static inline void __cpu_to_be64s(__u64 *p) 
     236 { 
     237-#ifdef __LITTLE_ENDIAN 
     238+#ifdef __KERN_LITTLE_ENDIAN 
     239        __swab64s(p); 
     240 #endif 
     241 } 
     242  
     243 static inline __u16 __le16_to_cpup(const __le16 *p) 
     244 { 
     245-#ifdef __LITTLE_ENDIAN 
     246+#ifdef __KERN_LITTLE_ENDIAN 
     247        return (__force __u16)*p; 
     248 #else 
     249        return __swab16p((__force __u16 *)p); 
     250@@ -180,7 +180,7 @@ static inline __u16 __le16_to_cpup(const __le16 *p) 
     251  
     252 static inline __u32 __le32_to_cpup(const __le32 *p) 
     253 { 
     254-#ifdef __LITTLE_ENDIAN 
     255+#ifdef __KERN_LITTLE_ENDIAN 
     256        return (__force __u32)*p; 
     257 #else 
     258        return __swab32p((__force __u32 *)p); 
     259@@ -189,7 +189,7 @@ static inline __u32 __le32_to_cpup(const __le32 *p) 
     260  
     261 static inline __u64 __le64_to_cpup(const __le64 *p) 
     262 { 
     263-#ifdef __LITTLE_ENDIAN 
     264+#ifdef __KERN_LITTLE_ENDIAN 
     265        return (__force __u64)*p; 
     266 #else 
     267        return __swab64p((__force __u64 *)p); 
     268@@ -198,7 +198,7 @@ static inline __u64 __le64_to_cpup(const __le64 *p) 
     269  
     270 static inline __le16 __cpu_to_le16p(const __u16 *p) 
     271 { 
     272-#ifdef __LITTLE_ENDIAN 
     273+#ifdef __KERN_LITTLE_ENDIAN 
     274        return (__force __le16)*p; 
     275 #else 
     276        return (__force __le16)__swab16p(p); 
     277@@ -207,7 +207,7 @@ static inline __le16 __cpu_to_le16p(const __u16 *p) 
     278  
     279 static inline __le32 __cpu_to_le32p(const __u32 *p) 
     280 { 
     281-#ifdef __LITTLE_ENDIAN 
     282+#ifdef __KERN_LITTLE_ENDIAN 
     283        return (__force __le32)*p; 
     284 #else 
     285        return (__force __le32)__swab32p(p); 
     286@@ -216,7 +216,7 @@ static inline __le32 __cpu_to_le32p(const __u32 *p) 
     287  
     288 static inline __le64 __cpu_to_le64p(const __u64 *p) 
     289 { 
     290-#ifdef __LITTLE_ENDIAN 
     291+#ifdef __KERN_LITTLE_ENDIAN 
     292        return (__force __le64)*p; 
     293 #else 
     294        return (__force __le64)__swab64p(p); 
     295@@ -225,7 +225,7 @@ static inline __le64 __cpu_to_le64p(const __u64 *p) 
     296  
     297 static inline __u16 __be16_to_cpup(const __be16 *p) 
     298 { 
     299-#ifdef __BIG_ENDIAN 
     300+#ifdef __KERN_BIG_ENDIAN 
     301        return (__force __u16)*p; 
     302 #else 
     303        return __swab16p((__force __u16 *)p); 
     304@@ -234,7 +234,7 @@ static inline __u16 __be16_to_cpup(const __be16 *p) 
     305  
     306 static inline __u32 __be32_to_cpup(const __be32 *p) 
     307 { 
     308-#ifdef __BIG_ENDIAN 
     309+#ifdef __KERN_BIG_ENDIAN 
     310        return (__force __u32)*p; 
     311 #else 
     312        return __swab32p((__force __u32 *)p); 
     313@@ -243,7 +243,7 @@ static inline __u32 __be32_to_cpup(const __be32 *p) 
     314  
     315 static inline __u64 __be64_to_cpup(const __be64 *p) 
     316 { 
     317-#ifdef __BIG_ENDIAN 
     318+#ifdef __KERN_BIG_ENDIAN 
     319        return (__force __u64)*p; 
     320 #else 
     321        return __swab64p((__force __u64 *)p); 
     322@@ -252,7 +252,7 @@ static inline __u64 __be64_to_cpup(const __be64 *p) 
     323  
     324 static inline __be16 __cpu_to_be16p(const __u16 *p) 
     325 { 
     326-#ifdef __BIG_ENDIAN 
     327+#ifdef __KERN_BIG_ENDIAN 
     328        return (__force __be16)*p; 
     329 #else 
     330        return (__force __be16)__swab16p(p); 
     331@@ -261,7 +261,7 @@ static inline __be16 __cpu_to_be16p(const __u16 *p) 
     332  
     333 static inline __be32 __cpu_to_be32p(const __u32 *p) 
     334 { 
     335-#ifdef __BIG_ENDIAN 
     336+#ifdef __KERN_BIG_ENDIAN 
     337        return (__force __be32)*p; 
     338 #else 
     339        return (__force __be32)__swab32p(p); 
     340@@ -270,7 +270,7 @@ static inline __be32 __cpu_to_be32p(const __u32 *p) 
     341  
     342 static inline __be64 __cpu_to_be64p(const __u64 *p) 
     343 { 
     344-#ifdef __BIG_ENDIAN 
     345+#ifdef __KERN_BIG_ENDIAN 
     346        return (__force __be64)*p; 
     347 #else 
     348        return (__force __be64)__swab64p(p); 
  • new file toolchain/uClibc/patches/170-fix_kernel_types_with_recent_kernel.patch

    diff --git a/toolchain/uClibc/patches/170-fix_kernel_types_with_recent_kernel.patch b/toolchain/uClibc/patches/170-fix_kernel_types_with_recent_kernel.patch
    new file mode 100644
    index 0000000..307279c
    - +  
     1This patch is out of uClibc trunk. 
     2 
     3--- uClibc/libc/sysdeps/linux/i386/bits/kernel_types.h  2008/07/23 11:23:36     22935 
     4+++ uClibc/libc/sysdeps/linux/i386/bits/kernel_types.h  2008/12/23 09:04:50     24515 
     5@@ -7,10 +7,14 @@ 
     6  
     7 /* a hack for compiling a 32 bit user space with 64 bit 
     8  * kernel on x86_64  */ 
     9-#if !defined(__ARCH_I386_POSIX_TYPES_H) && !defined(_ASM_X86_64_POSIX_TYPES_H) 
     10+#if !defined(__ARCH_I386_POSIX_TYPES_H) && \ 
     11+    !defined(_ASM_X86_64_POSIX_TYPES_H) && \ 
     12+    !defined(_ASM_X86_POSIX_TYPES_32_H) && \ 
     13+    !defined(_ASM_X86_POSIX_TYPES_64_H) 
     14 #define _ASM_X86_64_POSIX_TYPES_H 
     15 #define __ARCH_I386_POSIX_TYPES_H 
     16- 
     17+#define _ASM_X86_POSIX_TYPES_32_H 
     18+#define _ASM_X86_POSIX_TYPES_64_H 
     19 typedef unsigned short __kernel_dev_t; 
     20 typedef unsigned long  __kernel_ino_t; 
     21 typedef unsigned short __kernel_mode_t;