LINUX.ORG.RU

completion


0

0

ситуация такая: девайсу выдается запрос, ожидается его выполнение, а потом в юзерспейс возвращается результат. насколько я понял completion предназначен для этого.

итак есть один completion на запрос, на него вешаются нити по wait_for_completion_interruptible. теперь вопрос, как его правильно (пере-)инициализировать? отловить тот момент, пока он еще жив я могу, а потом? нити начинают выходить из ожидания, а я заново инициализирую completion. что меня ожидает, насколько это хреново, и что можно предпринять?

> как его правильно (пере-)инициализировать?

Единственное, что от тебя требуется:

c->done = 0;
init_waitqueue_heat(&c->wait);

Это делается один раз -- после выделения структуры.

> нити начинают выходить из ожидания, а я заново инициализирую completion. что меня ожидает

Все нити у тебя сразу из ожидания не выйдут, потому что ожидание эксклюзивное, т. е. из очереди берётся один процесс и будится.

Возможно 2 варианта:
1) Процесс, вызывающий wait_for_completion, уснёт
2) Если один из ожидавших процессов уже помещён в список активных процессов, но ещё не выполнялся после пробуждения, то
он снова будет помещён в очередь, потому что вызывающий процесс просто сбросит done и выйдет из wait_for_completion.

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