With CONFIG_SMP=n, CONFIG_PREEMPT=y, CONFIG_DEBUG_SPINLOCK=y we get many undefined refs to kernel_flag. This is because spinlock debugging works on uniprocessor kernels now, and it stores state inside the spinlock structure to do this. Having working spinlock debugging on UP kernels seems more important than saving four bytes, so... kernel/ksyms.c | 2 ++ kernel/sched.c | 2 +- 2 files changed, 3 insertions(+), 1 deletion(-) diff -puN kernel/ksyms.c~resurrect-kernel_flag kernel/ksyms.c --- 25/kernel/ksyms.c~resurrect-kernel_flag 2003-03-08 21:43:58.000000000 -0800 +++ 25-akpm/kernel/ksyms.c 2003-03-08 21:43:58.000000000 -0800 @@ -485,6 +485,8 @@ EXPORT_SYMBOL(task_nice); EXPORT_SYMBOL_GPL(idle_cpu); #if CONFIG_SMP EXPORT_SYMBOL_GPL(set_cpus_allowed); +#endif +#if CONFIG_SMP || CONFIG_PREEMPT EXPORT_SYMBOL(kernel_flag); #endif EXPORT_SYMBOL(jiffies); diff -puN kernel/sched.c~resurrect-kernel_flag kernel/sched.c --- 25/kernel/sched.c~resurrect-kernel_flag 2003-03-08 21:43:58.000000000 -0800 +++ 25-akpm/kernel/sched.c 2003-03-08 21:43:58.000000000 -0800 @@ -2426,7 +2426,7 @@ __init int migration_init(void) #endif -#if CONFIG_SMP +#if CONFIG_SMP || CONFIG_PREEMPT /* * The 'big kernel lock' * _