diff -Naurp linux-2.6.16.orig/arch/mips/Makefile linux-2.6.16/arch/mips/Makefile --- linux-2.6.16.orig/arch/mips/Makefile 2006-03-26 15:48:55.000000000 -0500 +++ linux-2.6.16/arch/mips/Makefile 2006-03-26 16:18:53.000000000 -0500 @@ -16,7 +16,7 @@ as-option = $(shell if $(CC) $(CFLAGS) $ -xassembler /dev/null > /dev/null 2>&1; then echo "$(1)"; \ else echo "$(2)"; fi ;) -cflags-y := +cflags-y := -ffreestanding # # Select the object file format to substitute into the linker script. @@ -149,7 +149,7 @@ if $(CC) $$gcc_abi -S -o /dev/null -xc / else \ gcc_abi=; gcc_isa=-$(5); \ fi; \ -gas_abi=-Wa,-$(gcc-abi); gas_cpu=$$cpu; gas_isa=-Wa,$$isa; \ +gas_abi=-Wa,-mabi=$(gcc-abi); gas_cpu=$$cpu; gas_isa=-Wa,$$isa; \ while :; do \ for gas_opt in -Wa,-march= -Wa,-mcpu=; do \ $(CC) $$gas_abi $$gas_opt$$cpu $$gas_isa -Wa,-Z -c \ @@ -160,7 +160,7 @@ while :; do \ break; \ done; \ if test "$(gcc-abi)" != "$(gas-abi)"; then \ - gas_abi="-Wa,-$(gas-abi) -Wa,-mgp$(gcc-abi)"; \ + gas_abi="-Wa,-mabi=$(gas-abi) -Wa,-mgp$(gcc-abi)"; \ fi; \ if test "$$gcc_opt" = -march= && test -n "$$gcc_abi"; then \ $(CC) $$gcc_abi $$gcc_opt$$gcc_cpu -S -o /dev/null \ diff -Naurp linux-2.6.16.orig/arch/mips/kernel/traps.c linux-2.6.16/arch/mips/kernel/traps.c --- linux-2.6.16.orig/arch/mips/kernel/traps.c 2006-03-20 00:53:29.000000000 -0500 +++ linux-2.6.16/arch/mips/kernel/traps.c 2006-03-26 16:18:53.000000000 -0500 @@ -1168,7 +1168,8 @@ void __init per_cpu_trap_init(void) #ifdef CONFIG_64BIT status_set |= ST0_FR|ST0_KX|ST0_SX|ST0_UX; #endif - if (current_cpu_data.isa_level == MIPS_CPU_ISA_IV) + if (current_cpu_data.isa_level == MIPS_CPU_ISA_IV + || current_cpu_data.cputype == CPU_SB1) status_set |= ST0_XX; change_c0_status(ST0_CU|ST0_MX|ST0_RE|ST0_FR|ST0_BEV|ST0_TS|ST0_KX|ST0_SX|ST0_UX, status_set); diff -Naurp linux-2.6.16.orig/drivers/md/md.c linux-2.6.16/drivers/md/md.c --- linux-2.6.16.orig/drivers/md/md.c 2006-03-20 00:53:29.000000000 -0500 +++ linux-2.6.16/drivers/md/md.c 2006-03-26 16:18:54.000000000 -0500 @@ -573,6 +573,7 @@ abort: return ret; } +#if 0 static unsigned int calc_sb_csum(mdp_super_t * sb) { unsigned int disk_csum, csum; @@ -583,6 +584,23 @@ static unsigned int calc_sb_csum(mdp_sup sb->sb_csum = disk_csum; return csum; } +#else +unsigned long calc_sb_csum(mdp_super_t *super) +{ + unsigned int oldcsum = super->sb_csum; + unsigned long long newcsum = 0; + unsigned long csum; + int i; + unsigned int *superc = (int*) super; + super->sb_csum = 0; + + for(i=0; i>32); + super->sb_csum = oldcsum; + return csum; +} +#endif /* diff -Naurp linux-2.6.16.orig/drivers/video/console/newport_con.c linux-2.6.16/drivers/video/console/newport_con.c --- linux-2.6.16.orig/drivers/video/console/newport_con.c 2006-03-20 00:53:29.000000000 -0500 +++ linux-2.6.16/drivers/video/console/newport_con.c 2006-03-26 16:18:54.000000000 -0500 @@ -87,7 +87,7 @@ static inline void newport_render_backgr static inline void newport_init_cmap(void) { - unsigned short i; + unsigned long i; for (i = 0; i < 16; i++) { newport_bfwait(npregs); @@ -722,7 +722,7 @@ const struct consw newport_con = { .con_set_palette = newport_set_palette, .con_scrolldelta = newport_scrolldelta, .con_set_origin = DUMMY, - .con_save_screen = DUMMY + .con_save_screen = DUMMY, }; #ifdef MODULE diff -Naurp linux-2.6.16.orig/include/asm-mips/atomic.h linux-2.6.16/include/asm-mips/atomic.h --- linux-2.6.16.orig/include/asm-mips/atomic.h 2006-03-20 00:53:29.000000000 -0500 +++ linux-2.6.16/include/asm-mips/atomic.h 2006-03-26 16:18:54.000000000 -0500 @@ -67,8 +67,8 @@ static __inline__ void atomic_add(int i, " sc %0, %1 \n" " beqzl %0, 1b \n" " .set mips0 \n" - : "=&r" (temp), "=m" (v->counter) - : "Ir" (i), "m" (v->counter)); + : "=&r" (temp), "+m" (v->counter) + : "Ir" (i)); } else if (cpu_has_llsc) { unsigned long temp; @@ -79,8 +79,8 @@ static __inline__ void atomic_add(int i, " sc %0, %1 \n" " beqz %0, 1b \n" " .set mips0 \n" - : "=&r" (temp), "=m" (v->counter) - : "Ir" (i), "m" (v->counter)); + : "=&r" (temp), "+m" (v->counter) + : "Ir" (i)); } else { unsigned long flags; @@ -109,8 +109,8 @@ static __inline__ void atomic_sub(int i, " sc %0, %1 \n" " beqzl %0, 1b \n" " .set mips0 \n" - : "=&r" (temp), "=m" (v->counter) - : "Ir" (i), "m" (v->counter)); + : "=&r" (temp), "+m" (v->counter) + : "Ir" (i)); } else if (cpu_has_llsc) { unsigned long temp; @@ -121,8 +121,8 @@ static __inline__ void atomic_sub(int i, " sc %0, %1 \n" " beqz %0, 1b \n" " .set mips0 \n" - : "=&r" (temp), "=m" (v->counter) - : "Ir" (i), "m" (v->counter)); + : "=&r" (temp), "+m" (v->counter) + : "Ir" (i)); } else { unsigned long flags; @@ -151,9 +151,8 @@ static __inline__ int atomic_add_return( " addu %0, %1, %3 \n" " sync \n" " .set mips0 \n" - : "=&r" (result), "=&r" (temp), "=m" (v->counter) - : "Ir" (i), "m" (v->counter) - : "memory"); + : "=&r" (result), "=&r" (temp), "+m" (v->counter) + : "Ir" (i)); } else if (cpu_has_llsc) { unsigned long temp; @@ -166,9 +165,8 @@ static __inline__ int atomic_add_return( " addu %0, %1, %3 \n" " sync \n" " .set mips0 \n" - : "=&r" (result), "=&r" (temp), "=m" (v->counter) - : "Ir" (i), "m" (v->counter) - : "memory"); + : "=&r" (result), "=&r" (temp), "+m" (v->counter) + : "Ir" (i)); } else { unsigned long flags; @@ -198,9 +196,8 @@ static __inline__ int atomic_sub_return( " subu %0, %1, %3 \n" " sync \n" " .set mips0 \n" - : "=&r" (result), "=&r" (temp), "=m" (v->counter) - : "Ir" (i), "m" (v->counter) - : "memory"); + : "=&r" (result), "=&r" (temp), "+m" (v->counter) + : "Ir" (i)); } else if (cpu_has_llsc) { unsigned long temp; @@ -213,9 +210,8 @@ static __inline__ int atomic_sub_return( " subu %0, %1, %3 \n" " sync \n" " .set mips0 \n" - : "=&r" (result), "=&r" (temp), "=m" (v->counter) - : "Ir" (i), "m" (v->counter) - : "memory"); + : "=&r" (result), "=&r" (temp), "+m" (v->counter) + : "Ir" (i)); } else { unsigned long flags; @@ -257,9 +253,8 @@ static __inline__ int atomic_sub_if_posi " sync \n" "1: \n" " .set mips0 \n" - : "=&r" (result), "=&r" (temp), "=m" (v->counter) - : "Ir" (i), "m" (v->counter) - : "memory"); + : "=&r" (result), "=&r" (temp), "+m" (v->counter) + : "Ir" (i)); } else if (cpu_has_llsc) { unsigned long temp; @@ -276,9 +271,8 @@ static __inline__ int atomic_sub_if_posi " sync \n" "1: \n" " .set mips0 \n" - : "=&r" (result), "=&r" (temp), "=m" (v->counter) - : "Ir" (i), "m" (v->counter) - : "memory"); + : "=&r" (result), "=&r" (temp), "+m" (v->counter) + : "Ir" (i)); } else { unsigned long flags; @@ -421,8 +415,8 @@ static __inline__ void atomic64_add(long " scd %0, %1 \n" " beqzl %0, 1b \n" " .set mips0 \n" - : "=&r" (temp), "=m" (v->counter) - : "Ir" (i), "m" (v->counter)); + : "=&r" (temp), "+m" (v->counter) + : "Ir" (i)); } else if (cpu_has_llsc) { unsigned long temp; @@ -433,8 +427,8 @@ static __inline__ void atomic64_add(long " scd %0, %1 \n" " beqz %0, 1b \n" " .set mips0 \n" - : "=&r" (temp), "=m" (v->counter) - : "Ir" (i), "m" (v->counter)); + : "=&r" (temp), "+m" (v->counter) + : "Ir" (i)); } else { unsigned long flags; @@ -463,8 +457,8 @@ static __inline__ void atomic64_sub(long " scd %0, %1 \n" " beqzl %0, 1b \n" " .set mips0 \n" - : "=&r" (temp), "=m" (v->counter) - : "Ir" (i), "m" (v->counter)); + : "=&r" (temp), "+m" (v->counter) + : "Ir" (i)); } else if (cpu_has_llsc) { unsigned long temp; @@ -475,8 +469,8 @@ static __inline__ void atomic64_sub(long " scd %0, %1 \n" " beqz %0, 1b \n" " .set mips0 \n" - : "=&r" (temp), "=m" (v->counter) - : "Ir" (i), "m" (v->counter)); + : "=&r" (temp), "+m" (v->counter) + : "Ir" (i)); } else { unsigned long flags; @@ -505,9 +499,8 @@ static __inline__ long atomic64_add_retu " addu %0, %1, %3 \n" " sync \n" " .set mips0 \n" - : "=&r" (result), "=&r" (temp), "=m" (v->counter) - : "Ir" (i), "m" (v->counter) - : "memory"); + : "=&r" (result), "=&r" (temp), "+m" (v->counter) + : "Ir" (i)); } else if (cpu_has_llsc) { unsigned long temp; @@ -520,9 +513,8 @@ static __inline__ long atomic64_add_retu " addu %0, %1, %3 \n" " sync \n" " .set mips0 \n" - : "=&r" (result), "=&r" (temp), "=m" (v->counter) - : "Ir" (i), "m" (v->counter) - : "memory"); + : "=&r" (result), "=&r" (temp), "+m" (v->counter) + : "Ir" (i)); } else { unsigned long flags; @@ -552,9 +544,8 @@ static __inline__ long atomic64_sub_retu " subu %0, %1, %3 \n" " sync \n" " .set mips0 \n" - : "=&r" (result), "=&r" (temp), "=m" (v->counter) - : "Ir" (i), "m" (v->counter) - : "memory"); + : "=&r" (result), "=&r" (temp), "+m" (v->counter) + : "Ir" (i)); } else if (cpu_has_llsc) { unsigned long temp; @@ -567,9 +558,8 @@ static __inline__ long atomic64_sub_retu " subu %0, %1, %3 \n" " sync \n" " .set mips0 \n" - : "=&r" (result), "=&r" (temp), "=m" (v->counter) - : "Ir" (i), "m" (v->counter) - : "memory"); + : "=&r" (result), "=&r" (temp), "+m" (v->counter) + : "Ir" (i)); } else { unsigned long flags; @@ -611,9 +601,8 @@ static __inline__ long atomic64_sub_if_p " sync \n" "1: \n" " .set mips0 \n" - : "=&r" (result), "=&r" (temp), "=m" (v->counter) - : "Ir" (i), "m" (v->counter) - : "memory"); + : "=&r" (result), "=&r" (temp), "+m" (v->counter) + : "Ir" (i)); } else if (cpu_has_llsc) { unsigned long temp; @@ -630,9 +619,8 @@ static __inline__ long atomic64_sub_if_p " sync \n" "1: \n" " .set mips0 \n" - : "=&r" (result), "=&r" (temp), "=m" (v->counter) - : "Ir" (i), "m" (v->counter) - : "memory"); + : "=&r" (result), "=&r" (temp), "+m" (v->counter) + : "Ir" (i)); } else { unsigned long flags;