2014-12-02 2 views
0

У нас есть ISR, который может быть выполнен на любом из доступных ядер и может привести к успеху или сбою на основе того, является ли ядро ​​занятым или бесплатным. В обработчике, мы помещаем очередь на рабочие очереди на ядро ​​с помощью функции queue_work_on(). Для каждого ядра будет вызываться функция queue_work_on() на основе возвращаемых значений queue_work_on(), как мы можем передать возвращаемые значения ISR IRQ_HANDLED, IRQ_NONEПроцесс Hung из-за тайм-аута планировщика в многоядерной системе

Как обращаться, если какая-либо из функций queue_work_on не работает и как вернуть значение ISR.

Надеюсь, я предоставил достаточно контекста, чтобы посмотреть на него.

Edit:

Сценарий больше похож: у нас есть, например, 1024, которые потребляются несколькими процессами для выполнения некоторой функции разгрузки драйвером хоста. После отправки для разгрузки процесс блокируется вызовом wait_for_completion() и в идеале должен быть вызван уведомлением о завершении. В драйвере выгруженные кольца выставляются в очередь и основываются на успехе разгрузки, isr уведомляет рабочие потоки о том, чтобы удалить задания на колесики и вызвать событие завершения. Теперь мы видим больше событий завершения, чем процессы ожидания, приводящие к процессу, зависящему от состояния TASK_UNITERRUPTIBLE, что приводит к таймауту планировщика. Нужны некоторые указатели для развертывания возможной синхронизации в многоядерной системе.

ответ

0

Когда вы получаете запрос прерывания, который действительно поступает с вашего устройства, вы не должны не должны return IRQ_NONE. Следствием этого было бы то, что ядро ​​думает, что строка прерывания вашего устройства застряла и отключает устройство.

Если вы не знаете, на каком ядре ЦПУ очередь на какую-то работу, используйте queue_work(), чтобы получить следующее свободное ядро.

+0

Спасибо за ответ. Я попробовал это предложение, но никакой разницы :( Сценарий больше похож: у нас есть, например, 1024 очереди, которые потребляются несколькими процессами для выполнения некоторой функции разгрузки с помощью хост-драйвера. –

+0

Спасибо за ответ. Я попробовал предложение, но без разницы: ( См. Отредактированный запрос с более подробной информацией о сценарии и результирующей проблеме. Надеюсь, что это поможет вам дать более интересные указатели для дальнейшего изучения. –