Проблемка с драйвером на двуядерном проце
От: V-ctor  
Дата: 18.09.07 15:38
Оценка:
собственно проблемка у меня стара, стала всплывать еше на проциках с HT,
http://www.rsdn.ru/Forum/?mid=1901516
Автор: Евгений Музыченко
Дата: 17.05.06

http://www.rsdn.ru/forum/message/1900042.1.aspx
Автор: V-ctor
Дата: 16.05.06

но тогда пришлось позабросить, щас вернулся

В общем в кратце суть такая самописный WDM драйвер исправно обслуживает мою самодельную PCI-плату на одноядерных, однопроцессорных машинах. Но если помимо ядра есть что-то еще (еще ядра или HT) , то драйвер глючит. Выглядит это так прорабоатет себе драйвер некторое время (когда пару секунд не продержицо,а когд и несколько минут), а потом вижу картину: было прерывание сработал ISR (в плате гашу прерывание), запланировал DPC, последнее начало выполняцо и тут как будто снова посреди DPC срабатывает ISR со всеми признаками того что это отклик на прежнее прерывание.
Долго ниче не мог понять, как бы это развести грамотно.
Сделал тупо
завел переменную-флаг в ISR проверяю установлен? тогда выход с возвратом false иначе выставляем флаг и отрабаываем по полной "программе", а потом в конце DPC перед самым выходом сбрасываю, вроде стоит, вроде работает. Но что-то уж через чур по бубуински, наверно это не правильно, как грамотно тут разрулить?
Логике не протеворечит ибо очередь DPC не расчитана более чем на одного человека, т.е. если у меня и сгенерятся в плате несколько разных, но близких по времени прерывания, все кроме первого будут потеряны, но для этого в плате приняты меры что бы такого не происходило, что бы ОС успевала выгребать.

И вообще может быть такое что оба ядра берутся за обслуживания прерывания одновременно в силу стечения каких-то обстоятельств (ну например планировщик не имел более приоритетных прерываний)? не хватает понимания принципа работы ядра ОС на многоядерных системах
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.