|
|
  |
Прерывания PCI. |
|
|
|
Sep 10 2010, 13:48
|

Гуру
     
Группа: Свой
Сообщений: 3 615
Регистрация: 12-01-09
Из: США, Главное разведовательное управление
Пользователь №: 43 230

|
Только что проверил, у меня прерывание вызывается два раза. Первый раз вызвалось, а потом просто затыкается обмен с карточкой, и я уже не могу ничего туда записать судя по всему. Раньше один раз вызывалось. Цитата(DS @ Sep 10 2010, 16:41)  Нет клина прерывания (после выхода обработчик вызывается снова и так до бесконечности) ? Проверьте как-нибудь. Если этого нет, то проблема с самой шиной скорее всего. Без прерываний обмен работает ? Не похоже. Иначе бы у меня комп крашился из за переполнения стека или еще чего. У меня в обработчике стоит счетчик, который я могу посмотреть. Раньше он показывал 1, а теперь показывает два. Обмен работает. И запись и чтение и DMA из карточки в ОЗУ компа и обратно, и MSI-X прерывания работает. Клины у меня с поддержкой легаси прерываний. Но после легаси прерывания затыкается.
|
|
|
|
|
Sep 10 2010, 14:00
|
Гуру
     
Группа: СуперМодераторы
Сообщений: 3 096
Регистрация: 16-01-06
Из: Москва
Пользователь №: 13 250

|
Цитата(Methane @ Sep 10 2010, 17:48)  Только что проверил, у меня прерывание вызывается два раза. Первый раз вызвалось, а потом просто затыкается обмен с карточкой, и я уже не могу ничего туда записать судя по всему. Раньше один раз вызывалось. Не похоже. Иначе бы у меня комп крашился из за переполнения стека или еще чего. У меня в обработчике стоит счетчик, который я могу посмотреть. Раньше он показывал 1, а теперь показывает два. Обмен работает. И запись и чтение и DMA из карточки в ОЗУ компа и обратно, и MSI-X прерывания работает. Клины у меня с поддержкой легаси прерываний. Но после легаси прерывания затыкается. А в цепочке обработчиков ничего больше не сидит ? Так клинит обычно, когда "залипает" запрос прерывания. В остальных случаях он бы у Вас вывалился и больше не вернулся в обработчик - машина бы не повисла. При зацикливании в обработчике стек не переполняется - в обработчике прерывания запрещены, после выхода из обработчика стек восстанавливается, и обработчик вызывается снова с корректными параметрами. Помахать чем-нибудь из обработчика можете ?
--------------------
Не бойтесь тюрьмы, не бойтесь сумы, не бойтесь мора и глада, а бойтесь единственно только того, кто скажет - "Я знаю как надо". А. Галич.
|
|
|
|
|
Sep 13 2010, 11:55
|

Гуру
     
Группа: Свой
Сообщений: 3 615
Регистрация: 12-01-09
Из: США, Главное разведовательное управление
Пользователь №: 43 230

|
Цитата(DS @ Sep 13 2010, 14:01)  Из обработчика прерывания можно каким нибудь проводом дергать ? Надо понять, встает шина или "залип" запрос на обработку прерывания. Иначе дальше не двинетесь. Нужно что-то поднять и опустить во время нахождения в обработчике, чтобы было видно зацикливание. Встает шина. Если после этого попробовать что-то прочитать из карточки, то в карточку не приходит запросов вообще, и как результат читаются одни FF. И сразу после чтения жесткий зависон всего. На сигнал-тап видно. Прошло одно прерывание, обработчик его сбросил. Пришло второе, и уже просто ни команда записи, ни команды чтения до автомата который обрабатывает входящие сообщения не доходят. Цитата(Oldring @ Sep 13 2010, 14:11)  А у Линукса что-ли нет ядерного отладчика? Быть не может. У меня явно не в отладчике проблема. У меня явно что-то не то по шине твориться. У меня совершенно нормально бегают MSI-X прерывания. У меня запись/чтение нормально работают. У меня только непонятно с легаси. По моему я что-то упустил. Хотя там всего два вывода. Я уже все варианты перепробовал.
|
|
|
|
|
Sep 13 2010, 12:20
|

Гуру
     
Группа: Свой
Сообщений: 3 615
Регистрация: 12-01-09
Из: США, Главное разведовательное управление
Пользователь №: 43 230

|
Цитата(Oldring @ Sep 13 2010, 15:01)  "жесткий зависон всего" - это как? Это ведь экспресс? Комп вообще ни на что не реагирует, пока карточку через jtag не остановиш. Цитата Карты в других слотах работают или тоже зависают? У меня один сплот для видеокарточки, в него мое и воткнуто.
|
|
|
|
|
Sep 13 2010, 12:27
|

Гуру
     
Группа: Свой
Сообщений: 3 041
Регистрация: 10-01-05
Из: Москва
Пользователь №: 1 874

|
Цитата(Methane @ Sep 13 2010, 16:20)  Комп вообще ни на что не реагирует, пока карточку через jtag не остановиш. А после остановки карточки оживает? А если просто карточку выдернуть? Похоже что карточка бомбардирует root complex какими-то запросами, и случается DOS. Что мне кажется странным. Наверное, такими запросами должны быть неснятые прерывания, которые процессор непрерывно обрабатывает. Как это может случиться под Линуксом - не скажу. Цитата(Methane @ Sep 13 2010, 16:20)  У меня один сплот для видеокарточки, в него мое и воткнуто. Мне кажется, эта проблема не стоит даже упоминания. Мамка с несколькими экспрессными слотами обойдется явно дешевле вашей зарплаты.
--------------------
Пишите в личку.
|
|
|
|
|
Sep 13 2010, 12:35
|

Гуру
     
Группа: Свой
Сообщений: 3 615
Регистрация: 12-01-09
Из: США, Главное разведовательное управление
Пользователь №: 43 230

|
Цитата(Oldring @ Sep 13 2010, 15:27)  А после остановки карточки оживает? А если просто карточку выдернуть? Похоже что карточка бомбардирует root complex какими-то запросами, и случается DOS. Что мне кажется странным. Наверное, такими запросами должны быть неснятые прерывания, которые процессор непрерывно обрабатывает. Как это может случиться под Линуксом - не скажу. Может быть. Сигнал что INTA случилось, имеет более высокий приоритет. НО! У меня всего две линии. Одну я могу либо вверх либо вниз. А другой - просто ACK. У меня нет других возможностей на INTА влиять. Цитата Мне кажется, эта проблема не стоит даже упоминания. Мамка с несколькими экспрессными слотами обойдется явно дешевле вашей зарплаты. Все не пашет. Ни клава ни мышка. И сама карточка не пашет после первого прерывания. Я явно что-то делаю не так.
|
|
|
|
|
Sep 15 2010, 07:08
|

Гуру
     
Группа: Свой
Сообщений: 3 615
Регистрация: 12-01-09
Из: США, Главное разведовательное управление
Пользователь №: 43 230

|
Цитата(Oldring @ Sep 15 2010, 09:29)  Ну так в случае DOS клава с мышкой работать и не должны - им не хватит времени. Да и обработка мышки скорее всего сделана не в самом обрабортчике мышиного прерывания. Цитата static irqreturn_t Avia_pci_interrupt (int irq, void *dev_id) {
RP1 *rp; rp = (RP1 *) dev_id;
rp->interrupts++; barrier(); mb(); rp->dmaRxMain.iomem->dma0.msi[0].dataA = 1; return IRQ_HANDLED; } Вот обработчик. В аттаче картинка. app_int_sts - INTA app_int_ack - ACK для INTA. vector_pending - кол-векторов которые требуют обработки, ..clear_req - шина по которой вектора сбрасываются. dma_tx_reg_addr - адресс внутри карточки, dataA - имеет адресс 0х10000 запись в этот регистр поднимает clear_req, и запрос на обработку прерывания сбрасывается, INTA опускается. Видно что одно прерывание проходит нормально, а когда происходит второе прерывание, обработчик в переывание входит, но сбросить запрос на прерывание уже не получается, потому что карточка стоит. Потом, как я понимаю, когда заканчиваются TAGи, зависает и комп. Если, через JTAG начать заливать новую прошивку в ПЛИС, комп уходит в мягкий ресет.
Эскизы прикрепленных изображений
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|