The new definition of the clone flags is binary incompatible with older 2.5 kernels. How about this instead: #define CLONE_PARENT_SETTID 0x00100000 #define CLONE_CHILD_CLEARTID 0x00200000 #define CLONE_DETACHED 0x00400000 #define CLONE_UNTRACED 0x00800000 #define CLONE_CHILD_SETTID 0x01000000 > -#if CONFIG_SMP || CONFIG_PREEMPT > +asmlinkage void FASTCALL(schedule_tail(task_t *prev)); > asmlinkage void schedule_tail(task_t *prev) > { > finish_arch_switch(this_rq(), prev); Maybe finish_arch_switch should only be called if CONFIG_SMP || CONFIG_PREEMPT, like what happened without this patch? > + if (clone_flags & CLONE_PARENT_SETTID) > + put_user(p->pid, parent_tidptr); How about failing if put_user fails?