Действительно ли безопасно использовать spin_lock () вместо spin_lock_irqsave () внутри очереди задач, если я вынужден это сделать? - PullRequest
0 голосов
/ 28 декабря 2018

У меня есть список ядра, который доступен как ISR (верхняя половина), так и нижняя половина (рабочая очередь в моем случае).Первоначально я использовал spin_lock_irqsave () / spin_unlock_irqstore () для отключения прерываний как внутри ISR, так и в нижней половине.

Программа работает нормально, за исключением предупреждения, потому что я вызываю dma_alloc_coherent () внутри spin_lock_irqsave () / spin_lock_irqstore ().Я проверил, что код выглядит так, как будто эта функция не должна вызываться, когда прерывание отключено ... После переключения на использование spin_lock () внутри рабочей очереди, но оставьте spin_lock_irqsave () внутри ISR, и предупреждение исчезнет ...

Я должен использовать spin_lock () внутри очереди задач, потому что это ограничение проекта.Так действительно ли эта программа безопасна после компромисса?

PS: я использовал GFP_KERNEL с dma_alloc_coherent () ранее, не уверен, является ли GFP_ATOMIC правильным флагом для использования вместо этого?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...