Как разбудить задачу, спящую с schedule_hrtimeout, до того, как тайм-аут возникнет в ядре Linux? - PullRequest
3 голосов
/ 25 апреля 2019

В ядре 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);
    }

Тем не менее, это просто позволяет ядру аварийно завершить работу, когда он туда попадает.Так что я думаю, что это не тот способ, которым следует использовать функцию.

Есть ли у вас какие-либо идеи или советы по этой проблеме?

...