Есть два системных вызова в ядре 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, о его реализации и т.д.?
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.
Похожие темы
- Форум Системные вызовы (2020)
- Новости Linux 2.6: CONFIG_PREEMPT - «y» или «n»? (2004)
- Форум Подмена системных вызовов (2010)
- Форум Перехват системных вызовов (2019)
- Форум Блокирующие системные вызовы (2015)
- Форум Прототипы системных вызовов (2013)
- Форум Реализация системного вызова ? (2008)
- Форум Распознание системного вызова (2003)
- Форум Выполнение системных вызовов чтения. (2016)
- Форум возврат ошибок системных вызовов (2013)