From: Mathieu Desnoyers the #endif /* CONFIG_SMP */ should cover the default condition, or it may cause bad parameter to be silently missed. To make it work correctly, we have to remove the ifdef CONFIG SMP surrounding __xchg_called_with_bad_pointer declaration. Thanks to Adrian Bunk for detecting this. Signed-off-by: Mathieu Desnoyers Acked-by: Hirokazu Takata Cc: Adrian Bunk Signed-off-by: Andrew Morton --- include/asm-m32r/system.h | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff -puN include/asm-m32r/system.h~fix-m32r-__xchg include/asm-m32r/system.h --- a/include/asm-m32r/system.h~fix-m32r-__xchg +++ a/include/asm-m32r/system.h @@ -127,9 +127,7 @@ static inline void local_irq_disable(voi ((__typeof__(*(ptr)))__xchg_local((unsigned long)(x), (ptr), \ sizeof(*(ptr)))) -#ifdef CONFIG_SMP extern void __xchg_called_with_bad_pointer(void); -#endif #ifdef CONFIG_CHIP_M32700_TS1 #define DCACHE_CLEAR(reg0, reg1, addr) \ @@ -189,9 +187,9 @@ __xchg(unsigned long x, volatile void *p #endif /* CONFIG_CHIP_M32700_TS1 */ ); break; +#endif /* CONFIG_SMP */ default: __xchg_called_with_bad_pointer(); -#endif /* CONFIG_SMP */ } local_irq_restore(flags); _