--- zzzz-none-000/linux-2.4.17/include/asm-ppc/smplock.h 2001-11-03 01:43:54.000000000 +0000 +++ sangam-fb-322/linux-2.4.17/include/asm-ppc/smplock.h 2004-11-24 13:21:50.000000000 +0000 @@ -15,7 +15,15 @@ extern spinlock_t kernel_flag; +#ifdef CONFIG_SMP #define kernel_locked() spin_is_locked(&kernel_flag) +#else +#ifdef CONFIG_PREEMPT +#define kernel_locked() preempt_is_disabled() +#else +#define kernel_locked() 1 +#endif +#endif /* * Release global kernel lock and global interrupt lock @@ -47,8 +55,14 @@ */ static __inline__ void lock_kernel(void) { +#ifdef CONFIG_PREEMPT + if (current->lock_depth == -1) + spin_lock(&kernel_flag); + ++current->lock_depth; +#else if (!++current->lock_depth) spin_lock(&kernel_flag); +#endif } static __inline__ void unlock_kernel(void)