См. Это:
http://lxr.linux.no/linux+v3.0.4/include/linux/sched.h#L242
250/*
251 * This serializes "schedule()" and also protects
252 * the run-queue from deletions/modifications (but
253 * _adding_ to the beginning of the run-queue has
254 * a separate lock).
255 */
256extern rwlock_t tasklist_lock;
257extern spinlock_t mmlist_lock;
258
Итак, мы знаем, что эта блокировка предназначена для синхронизации доступа для обновления структуры планирования.Чтобы изменить статус выполнения задания, посмотрите пример:
http://lxr.linux.no/linux+v3.0.4/kernel/signal.c#L1812
1769 read_lock(&tasklist_lock);
1809 __set_current_state(TASK_RUNNING);
1810 if (clear_code)
1811 current->exit_code = 0;
1812 read_unlock(&tasklist_lock
U вам просто нужно заблокировать / разблокировать tasklist_lock и установить статус.