LINUX.ORG.RU

Проблемы с прерываниями


0

0

После установки ядра 2.6.14-r5 (вместо 2.6.14-r4) мой PCI драйвер перестал реагировать на прерывания от DMA. Причем и прерывания стали определяться по-другому (раньше IRQ 10, сейчас IRQ 5). Что случилось ? Непонятно. Прерывания определяю так: pci_read_config_dword(....., &mirq) request_irq(mirq, irq_hndl, SA_SHIRQ, ..., dev_id);

Ну и еще, что в системе изменилось - поставил ext3 вместо ext2.


Ответ на: комментарий от anonymous

Еще в логе сообщение странное:

irq 19: nobody cared (try booting with the "irqpoll" option)

Хотя у меня irq 5.

senjy
() автор топика

> Прерывания определяю так: pci_read_config_dword(....., &mirq)

а вот так делать не надо. если это работало, то вам просто
везло.

pci_dev->irq

anonymous
()
Ответ на: комментарий от anonymous

Значит сделал так при загрузке grub'ом:
kernel ....... irqpoll
И заработало - появилась реакция на прерывание.
Может кто объяснить, что это такое ?

senjy
() автор топика
Ответ на: комментарий от idle

Да вот на самом деле трудно объяснить... :))) попытаюсь
1. Работал мой собственный PCI драйвер.
2. Установил новое ядро 2.6.14-gentoo-r5.
3. Драйвер перестал реагировать на прерывания. Т.е. вижу, что передача блока данных в PCI-устройство состоялась, должно по этому поводу возникнуть прерывание и реакция на него (влететь в обработчик). Но этого не происходит.
4. Смотрю в логе. Там странная фраза, относящаяся к драйверу:
irq 19: nobody cared (try booting with the "irqpoll" option)
Думаю, какое нафиг irq 19, когда и BIOS определяет irq 5, и из конф. пространства вычитываю irq 5. А потом смотрю - pci_dev->irq показывает - irq 19. Ладно, пробую сделать как написано в логе, т.е. гружусь с опцией irqpoll -
в менюшке grub'a: kernel /boot/vmlinuz..... irqpoll. И заработало. Но, как то не устойчиво, то сработает, то вообще висяк.
Вот я собственно и спросил, что бы это значило ? Какие причины, что вдруг!!! без irqpoll перестало работать ?
5. Порылся в конфигурации ядра и нахожу интересный пункт:
Plug and Play ACPI support, который у меня стоит в includes. Я делаю ему
excludes и все заработало нормально. Т.к. и номера прерываний начали совпадать, т.е. irq, определенное BIOS'ом = irq из конф. пространства и = dev_pci->irq, то получается, что ядро само еще (наклав на BIOS'овсоке распределение) пыталось распределить прерывания, но видно у него это коряво выходило. Или это может я что-то коряво делаю ???!!!
Вроде проблема решилась, но если у кого будут замечания или комментарии -
БУДУ РАД ВЫСЛУШАТЬ !!!!


senjy
() автор топика
Ответ на: комментарий от senjy

так я же писал вам, что нужно использовать pci_dev->irq !

не надо искать номер прерывания в конф. пространства, это
всегда (очень давно) было неправильно.

а с irqpoll ответ очевиден, просто посмотрите документацию
в Documentation/kernel-parameters.txt.

idle ★★★★★
()
Ответ на: комментарий от idle

> так я же писал вам, что нужно использовать pci_dev->irq !

Да, спасибо, я так сейчас и делаю.

senjy
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.