Как работают рабочие очереди Linux?

Я новичок в написании драйверов устройств Linux, и я пытаюсь создать драйвер устройства, который обрабатывает чип UART. Для этого я решил использовать рабочие запросы как мою нижнюю половину обработки, потому что я должен использовать некоторые семафоры при обработке данных, которые я получаю от чипа UART. Обработчик очереди работы, который был запланирован ранее в прерывании, теперь выполняется, и во время его выполнения он будет спать с семафором. В течение этого времени обработчик прерываний вызывается снова и назначает один и тот же обработчик очереди работы. Будет ли выполняться обработчик очереди работы до завершения первого выполнения?

Благодарю.

1
nl ja de

1 ответы

The default behavior of work queues is to allow concurrent execution on different CPUs. There is a flag WQ_NON_REENTRANT that changes this behavior. More information can be found in this post http://lwn.net/Articles/403891/

But it seems that in recent kernels work queues are non-reentrant by default - see http://lwn.net/Articles/511190

0
добавлено
Linux Help
Linux Help
2 686 участник(ов)

Правила: https://telegra.ph/Pravila-Linux-Help-10-15

Linux Security
Linux Security
652 участник(ов)

Данная группа принципиально про безопасность и в частности про безопасность Linux. Прочие темы просим обсуждать в профильных чатах.

Linux Gaming RUS
Linux Gaming RUS
28 участник(ов)

Русскоязычный чатик, посвящённый играм на различных дистрибутивах Linux, а также wine, proton Arch Linux RU @ArchLinuxChatRU Gnome RU @gnome_ru