Board.KolibriOS.org http://board.kolibrios.org/ |
|
2 акт. обработчика PCI IRQ на разных линиях вешают систему http://board.kolibrios.org/viewtopic.php?f=1&t=1808 |
Page 3 of 4 |
Author: | CleverMouse [ Thu Jul 04, 2013 3:55 pm ] |
Post subject: | Re: 2 акт. обработчика PCI IRQ на разных линиях вешают систе |
Serge wrote: Хак писала Вероника. Имхо в этом случае лучше включить APIC, пусть это и требует некоторых телодвижений. Я тоже так думаю, но при текущем уровне развития системы это не вариант - даже если считать инструкцию по включению APIC очевидной, она таки требует, чтобы система могла хоть как-то загрузиться. Mario_r4 wrote: Меня смущает процедура irq_serv в файле core/irq.inc. Пришлось убрать: Это зря. Mario_r4 wrote: а также добавить: Вот это правильно. |
Author: | Mario_r4 [ Thu Jul 04, 2013 4:03 pm ] |
Post subject: | Re: 2 акт. обработчика PCI IRQ на разных линиях вешают систе |
CleverMouse wrote: Mario_r4 wrote: Меня смущает процедура irq_serv в файле core/irq.inc. Пришлось убрать: Это зря. Можно расширенное толкование? |
Author: | CleverMouse [ Thu Jul 04, 2013 4:48 pm ] |
Post subject: | Re: 2 акт. обработчика PCI IRQ на разных линиях вешают систе |
Mario_r4, весь этот хак предназначен для случая "драйвер устройства повесил обработчик на прерывание A, а устройство генерирует прерывание Б". Если управляющему коду приходит прерывание Б и все драйверы, сидящие на Б, говорят "нет, это не моё прерывание", то управляющий код начинает опрашивать всех-всех-всех с остальных прерываний, вдруг кто сознается. Очевидно, что для корректной работы этого механизма нужно, чтобы драйверы не врали в ответ на вопрос "твоё ли это прерывание?" Но некоторые врут, поэтому их нужно исключать при опросах. Первая часть исключений, с "jz .fail", отвечает за то, чтобы не начинать опрос, если обработчик прерывания А говорит, что прерывание не его, хотя на самом деле оно его: таким свойством обладают А=6, 14, 15 - все они врут в отрицательную сторону. Поэтому отсюда 14 и 15 убирать нельзя, пока нет нормального обработчика. Вторая часть исключений, с "jz .try_next_irq", отвечает за то, чтобы игнорировать обработчик прерывания Б, который говорит, что прерывание его, хотя на самом деле оно не его. Это как раз legacy ISA, Б=1, 12, где нет возможности проверить, действительно ли прерывание пришло от нужного источника. И сюда 14 и 15 добавить можно, если уж обработчик всегда говорит, что это его прерывание. |
Author: | Mario_r4 [ Fri Jul 05, 2013 12:44 am ] |
Post subject: | Re: 2 акт. обработчика PCI IRQ на разных линиях вешают систе |
CleverMouse wrote: Поэтому отсюда 14 и 15 убирать нельзя, пока нет нормального обработчика. Что подразумевается под "нормальным обработчиком"? Я пока сделал так: Spoiler: Show Оба назначаются через: Code: stdcall attach_int_handler, 14, hdd_irq14, 0 И мне, к сожалению, так и никто не прояснил, какие данные передаются через третий параметр (где сейчас 0). |
Author: | Serge [ Fri Jul 05, 2013 1:41 am ] |
Post subject: | Re: 2 акт. обработчика PCI IRQ на разных линиях вешают систе |
Quote: И мне, к сожалению, так и никто не прояснил, какие данные передаются через третий параметр Quote: Третий параметр может быть любым. Ядро передаёт его в установленный обработчик прерывания. Удобно передавать указатель на данные контроллера.
|
Author: | Mario_r4 [ Fri Jul 05, 2013 2:15 am ] |
Post subject: | Re: 2 акт. обработчика PCI IRQ на разных линиях вешают систе |
Serge wrote: Третий параметр может быть любым. Ядро передаёт его в установленный обработчик прерывания. Удобно передавать указатель на данные контроллера. Виноват - провтыкал... |
Author: | CleverMouse [ Fri Jul 05, 2013 8:36 pm ] |
Post subject: | Re: 2 акт. обработчика PCI IRQ на разных линиях вешают систе |
Mario_r4 wrote: Что подразумевается под "нормальным обработчиком"? Обработчик, регистрируемый через attach_int_handler. Если таковой есть, но всегда возвращает единицу, то добавлять в часть А сравнения с 14,15 можно, но бессмысленно - они никогда не сработают. |
Author: | Mario_r4 [ Fri Jul 05, 2013 10:07 pm ] |
Post subject: | Re: 2 акт. обработчика PCI IRQ на разных линиях вешают систе |
CleverMouse wrote: добавлять в часть А сравнения с 14,15 можно, но бессмысленно - они никогда не сработают. Сейчас код выглядит так: Spoiler: Show Следует ли понимать что "часть А" это: Spoiler: Show Если так, то этот код там был до меня и на мое сообщение: Spoiler: Show Было замечание: Spoiler: Show Как следует понимать эти два противоречащих друг другу утверждения? |
Author: | CleverMouse [ Fri Jul 05, 2013 10:11 pm ] |
Post subject: | Re: 2 акт. обработчика PCI IRQ на разных линиях вешают систе |
Извини, на тот момент я не поняла, что обработчик, зарегистрированный через attach_int_handler, уже есть. Тогда всё в порядке. |
Author: | Mario_r4 [ Fri Jul 05, 2013 10:13 pm ] |
Post subject: | Re: 2 акт. обработчика PCI IRQ на разных линиях вешают систе |
Еще раз уточню, чтобы избежать непоняток - следует ли удалить: Code: cmp ebp, 14 из текущего кода? |
Author: | CleverMouse [ Fri Jul 05, 2013 10:13 pm ] |
Post subject: | Re: 2 акт. обработчика PCI IRQ на разных линиях вешают систе |
Да. |
Author: | Mario_r4 [ Sat Jul 06, 2013 1:23 am ] |
Post subject: | Re: 2 акт. обработчика PCI IRQ на разных линиях вешают систе |
Есть ли смысл перевести на attach_int_handler также обработчик IRQ6? |
Author: | Serge [ Sat Jul 06, 2013 9:04 am ] |
Post subject: | Re: 2 акт. обработчика PCI IRQ на разных линиях вешают систе |
Mario_r4 Да. |
Author: | Mario_r4 [ Sat Jul 06, 2013 2:40 pm ] |
Post subject: | Re: 2 акт. обработчика PCI IRQ на разных линиях вешают систе |
SVN r.3771 - динамическая установка обработчика прерывания Floppy - IRQ6, через attach_int_handler. Как всегда не обошлось без сюрпризов. Ревизия связанная с новым шедулером сломала работу с флопиком. Почему-то в самый не продходящий момент гасится двигатель флопика и все кирдык. Временно закомментировал в kernel.asm Spoiler: Show После этого флопик работает нормально. Сразу предупреждаю - это не идеальное решение и автор шедулера может предложить (и я уверен что предложит), что то более подходящее. Заткнул проблему как сумел. |
Author: | Serge [ Mon Jul 08, 2013 1:10 pm ] |
Post subject: | Re: 2 акт. обработчика PCI IRQ на разных линиях вешают систе |
Рестарт ядра снова виснет. Пишет установка обработчиков IDE и всё. Причем у меня установлен AHCI, и контроллеров IDE нет. |
Page 3 of 4 | All times are UTC+03:00 |
Powered by phpBB® Forum Software © phpBB Limited https://www.phpbb.com/ |