LINUX.ORG.RU

CONFIG_PREEMPT=y и системные вызовы


0

0

Есть два системных вызова в ядре linux,
скелет первого

current->state=TASK_INTERRUPTIBLE;
list_add_tail(...);
schedule();
list_del();

скелет второго:
struct list_head *it
it=head->next;
while (it!=head) {
wake_up_process(...);
}

так вот в случае отключенного preempt все работает отлично,
а с CONFIG_PREEMPT=y
получаем следущее
[*]schedule
[*]wake_up_process
[*]second out
scheduling while atomic: test3/0x00000002/785
schedule+0x5d7/0x5e
sys_sched_yield+0x64/0x9
coredump_wait+0x38/0xa
do_coredump+0xbb/0x208
....
do_page_faul
[*]list_del
[*]first out

где [*] отладочная печать моего кода,

может кто-нибудь имеет идеи о том что не так в моем коде?
где бы почитать о preemtable, о его реализации и т.д.?

★★★★★

Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.