В ядре Linux я засыпаю с
set_current_state(TASK_INTERRUPTIBLE);
schedule_hrtimeout(&next_release_time, HRTIMER_MODE_ABS);
Это работает до сих пор.Документация гласит:
/* %TASK_INTERRUPTIBLE - the routine may return early if a signal is
* delivered to the current task or the current task is explicitly woken
* up.
Итак, я предполагал, что вызов
wake_up_process(task);
позволит рутине вернуться.На данный момент я не звоню из текущей задачи.Precisley Я зацикливаюсь на списке, который содержит все задачи, требующие пробуждения.
list_for_each(pos, &my_obj_list){
obj = list_entry(pos, struct my_obj, my_obj_list);
wake_up_process(obj->task);
}
Тем не менее, это просто позволяет ядру аварийно завершить работу, когда он туда попадает.Так что я думаю, что это не тот способ, которым следует использовать функцию.
Есть ли у вас какие-либо идеи или советы по этой проблеме?