Синхронизация между контекстом процесса и функцией таймера - PullRequest
0 голосов
/ 22 октября 2018

Я хочу обновить структуру данных атомарно как в контексте процесса (в частности, в функции queuecommand), так и в функции таймера.В контексте процесса, я должен использовать spin_lock_bh или spin_lock_irq или просто spin_lock?

Насколько я понимаю, мы должны использовать spin_lock_bh в очереди команды (контекст процесса) и просто spin_lock в таймерефункция.Я прав?

1 Ответ

0 голосов
/ 23 октября 2018

Если я правильно понимаю, это примерно timer_list ( нижняя половина контекста ).Тогда ваше предположение верно: да, было бы достаточно использовать spin_lock_bh в контексте процесса и spin_lock в обработчике таймера (function из timer_list).Но это верно только , если этот замок (и соответствующая структура данных) используется только в упомянутых контекстах не используетсяобработчик прерываний .Если это так, вам нужно, например, spin_lock_irq.

Также имейте в виду, что вы не должны использовать спящие функции внутри spin_lock* - spin_unlock*.

В источниках ядра Linux есть много примеров, например::

...