Page 4 of 4

Re: 2 акт. обработчика PCI IRQ на разных линиях вешают систе

Posted: Mon Jul 08, 2013 1:20 pm
by Mario_r4
Serge wrote:Рестарт ядра снова виснет. Пишет установка обработчиков IDE и всё. Причем у меня установлен AHCI, и контроллеров IDE нет.
Будем посмотреть.
Вообще заметил такую жопу - куча устройств на одном прерывании может висеть и attach_int_handler в этом случае отрабатывает как то криво.

Re: 2 акт. обработчика PCI IRQ на разных линиях вешают систе

Posted: Mon Jul 08, 2013 1:24 pm
by Serge
Mario_r4
На PCI обычно надо прочитать или записать несколько бит в регистрах устройства, чтобы снять запрос прерывания. Проблемы возникают если драйвер этого не делает.
Ну и надо учитывать что работа ядра в режиме обработчика прерывания сильно отличается от обычной. Многие функции ядра нельзя использовать.

Re: 2 акт. обработчика PCI IRQ на разных линиях вешают систе

Posted: Mon Jul 08, 2013 1:46 pm
by Mario_r4
Serge wrote:На PCI обычно надо прочитать или записать несколько бит в регистрах устройства, чтобы снять запрос прерывания. Проблемы возникают если драйвер этого не делает.
Вообще-то подробности бы не помешали.
Serge wrote:Ну и надо учитывать что работа ядра в режиме обработчика прерывания сильно отличается от обычной. Многие функции ядра нельзя использовать.
Там всего-то обнуление переменной, да запись в порт IDE.

И вообще в AHCI назначение не должно производиться вообще, т.к. контроллер не найден. Скорее всего у меня в коде нужны кое-какие проверки еще.

Re: 2 акт. обработчика PCI IRQ на разных линиях вешают систе

Posted: Mon Jul 08, 2013 2:11 pm
by Serge
Вообще-то подробности бы не помешали.
Это надо внимательно документацию на контроллер читать. С isa проблем нет, там прерывание выставлено по фронту. Импульс от чипа прошёл, и всё. А PCI по уровню. Контроллер его должен снять. У некоторых устройств достаточно прочитать регистр статуса прерываний и они автоматом сбросятся. У других надо эти биты переписать для сброса.

Re: 2 акт. обработчика PCI IRQ на разных линиях вешают систе

Posted: Tue Jul 09, 2013 3:37 am
by Mario_r4
Serge wrote:Рестарт ядра снова виснет. Пишет установка обработчиков IDE и всё. Причем у меня установлен AHCI, и контроллеров IDE нет.
Проверь пожалуйста SVN r.3785, если не прокатит, то теперь (благодаря усилиям yogev_ezra) есть отображение лога BOARD в черный фон при загрузке, вторым столбцом. Сделай фото экрана в этом случае.

Re: 2 акт. обработчика PCI IRQ на разных линиях вешают систе

Posted: Tue Jul 09, 2013 10:36 am
by Serge
Spoiler:K : Attach Interrupt 6 Handler 8003070B
K : Set IDE IRQ6 return code 80059C10
Intel videocard detected, PciId=8086:0102, which is known
EDID successfully read:
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
K : edx=00036881
K : has_ownership
K : edx=00036881
K : has_ownership
K : HCSPARAMS=00200002, HCCPARAMS=00036881
K : attaching to IRQ 0A
K : Attach Interrupt 10 Handler 8002E3E0
K : EHCI controller at 00:D0 with 2 ports initialized
K : HCSPARAMS=00200002, HCCPARAMS=00036881
K : attaching to IRQ 03
K : Attach Interrupt 3 Handler 8002E3E0
K : EHCI controller at 00:E8 with 2 ports initialized
K : Attach Interrupt 1 Handler 800325D0
K : IRQ1 error code 80059C4C
K : kernel SVN r3785
K : 4 CPU detected
K : BAR0 01F0
K : BAR1 03F4
K : BAR2 0170
K : BAR3 0374
K : BAR4 0000
K : IDEContrProgrammingInterface 0000
K : IDE_Interrupt 0202
K : [2] EHCI 80991094: status of port 0 changed to 00001803
K : [2] EHCI 80995094: status of port 0 changed to 00001803
Loading RTL8169 driver
Hooking into device, dev:0, bus:3, irq:A, addr:0000DE00
K : [12] EHCI 80991094 port 0 state is 00001801
K : [12] EHCI 80991094: port 0 has HS or FS device, resetting
K : [12] EHCI 80995094 port 0 state is 00001801
K : [12] EHCI 80995094: port 0 has HS or FS device, resetting
K : [14] EHCI 80991094: reset port 0 done
K : [14] EHCI 80995094: reset port 0 done
K : [16] EHCI 80991094 status of port 0 is 00001005
K : [16] EHCI 80995094 status of port 0 is 00001005
K : address set in device
K : async advance doorbell
K : address set in device
K : async advance doorbell
K : async advance int
K : address set for controller
K : async advance int
K : address set for controller
K : async advance doorbell
K : async advance doorbell
K : async advance int
K : async advance int
K : device descriptor: 12 01 00 02 09 00 01 40 87 80 24 00 00 00 00 00 00 01
K : found USB device with ID 8087:0024, 1 configuration(s)
K : device descriptor: 12 01 00 02 09 00 01 40 87 80 24 00 00 00 00 00 00 01
K : found USB device with ID 8087:0024, 1 configuration(s)
K : config descriptor: 09 02 19 00 01 01 00 E0 00 09 04 00 00 01 09 00 00 00 07 05 81 03 01 00 0C
K : USB interface class/subclass/protocol = 09/00/00
K : config descriptor: 09 02 19 00 01 01 00 E0 00 09 04 00 00 01 09 00 00 00 07 05 81 03 02 00 0C
K : hub config: 09 29 06 09 00 32 00 00 FF
K : found hub with 6 ports
K : USB interface class/subclass/protocol = 09/00/00
K : hub config: 0B 29 08 09 00 32 00 00 00 FF FF
K : found hub with 8 ports
========= tmpdisk 0.45 =========
trying to add disk
disk size is not specified
10% from free RAM will be used, new DiskSize: 324 MB
operation completed successfully
K : final: hub 808246D0 port 0 status 0101 change 01
K : final: hub 808247D0 port 2 status 0101 change 01
K : final: hub 808247D0 port 4 status 0101 change 01
K : address set in device
K : async advance doorbell
K : async advance int
K : address set for controller
K : async advance doorbell
K : async advance int
K : device descriptor: 12 01 00 02 00 00 00 08 6D 04 62 C0 00 31 01 02 00 01
K : found USB device with ID 046D:C062, 1 configuration(s)
K : config descriptor: 09 02 22 00 01 01 00 A0 31 09 04 00 00 01 03 01 02 00 09 21 10 01 00 01 22 47 00 07 05 81 03 06 00 0A
K : USB interface class/subclass/protocol = 03/01/02
K : USB HID device detected
K : report descriptor: 05 01 09 02 A1 01 09 01 A1 00 05 09 19 01 29 08 15 00 25 01 95 08 75 01 81 02 95 00 81 03 05 01 09 30 09 31 16 01 F8 26 FF 07 75 0C 95 02 81 06 09 38 15 81 25 7F 75 08 95 01 81 06 05 0C 0A 38 02 95 01 81 06 C0 C0
K : address set in device
K : async advance doorbell
K : async advance int
K : address set for controller
K : async advance doorbell
K : async advance int
K : device descriptor: 12 01 10 01 00 00 00 08 2A 06 01 02 00 01 00 01 00 01
K : found USB device with ID 062A:0201, 1 configuration(s)
K : config descriptor: 09 02 3B 00 02 01 00 A0 32 09 04 00 00 01 03 01 01 00 09 21 10 01 00 01 22 41 00 07 05 81 03 08 00 0A 09 04 01 00 01 03 01 02 00 09 21 10 01 00 01 22 98 00 07 05 82 03 04 00 0A
K : USB interface class/subclass/protocol = 03/01/01
K : USB HID device detected
K : USB interface class/subclass/protocol = 03/01/02
K : USB HID device detected
K : report descriptor: 05 01 09 06 A1 01 05 07 19 E0 29 E7 15 00 25 01 75 01 95 08 81 02 95 01 75 08 81 01 95 03 75 01 05 08 19 01 29 03 91 02 95 05 75 01 91 01 95 06 75 08 15 00 26 FF 00 05 07 19 00 2A FF 00 81 00 C0
K : report descriptor: 05 01 09 02 A1 01 85 05 09 38 09 30 09 31 15 81 25 7F 75 08 95 03 81 06 C0 05 0C 09 01 A1 01 85 01 19 00 2A 3C 02 15 00 26 3C 02 95 01 75 10 81 00 C0 05 01 09 80 A1 01 85 02 19 81 29 83 25 01 75 01 95 03 81 02 95 05 81 01 C0 05 09 09 01 A1 01 85 04 0A 56 01 0A 57 01 0A 58 01 0A 59 01 0A 5A 01 0A 5B 01 0A B2 00 0A 06 02 15 00 25 01 75 01 95 08 81 02 C0 05 09 09 01 A1 01 85 06 15 00 25 01 75 01 95 15 81 01 0A 5C 01 75 01 95 01 81 02 75 01 95 02 81 01 C0
K : final: hub 808247D0 port 4 status 0503 change 10
K : address set in device
K : async advance doorbell
K : async advance int
K : address set for controller
K : async advance doorbell
K : async advance int
K : device descriptor: 12 01 00 02 00 00 00 40 51 09 42 16 00 01 01 02 03 01
K : found USB device with ID 0951:1642, 1 configuration(s)
K : config descriptor: 09 02 20 00 01 01 00 80 32 09 04 00 00 02 08 06 50 00 07 05 81 02 00 02 FF 07 05 02 02 00 02 FF
K : USB interface class/subclass/protocol = 08/06/50
K : USB mass storage device detected
K : 1 logical unit(s)
K : media is ready
K : 0 attempts, 24 ticks
K : peripheral device type is 00
K : direct-access mass storage device detected
K : sector size is 512, last sector is 30233587
K : Attach Interrupt 10 Handler 809A4A54
ETH_input: Unknown packet type=0018
ETH_input: Unknown packet type=0888
На рестарте после
K : IDEContrProgrammingInterface 0000
K : IDE_Interrupt 0202
пишет
'K : warning: relinking handler from IRQ3 to IRQ10
и всё виснет.

Update. Нашел ошибки в коде.

Code: Select all

        stdcall attach_int_handler, 14, IDE_common_irq_handler, 0
        DEBUGF  1, "K : Set IDE IRQ14 return code %x\n", eax
        stdcall attach_int_handler, 15, IDE_common_irq_handler, 0
        DEBUGF  1, "K : Set IDE IRQ15 return code %x\n", eax

        stdcall enable_irq, 14 <<<<<<лишний вызов, attach_int_handler  уже размаскировала линию irq
        stdcall enable_irq, 15 <<<<<<лишний вызов

        jmp     .enable_IDE_interrupt
;--------------------------------------
.sata_ide:
        cmp     ax, 0x0185
        je      .sata_ide_1

        cmp     ax, 0x018f
        jne     .end_set_interrupts
;--------------------------------------
.sata_ide_1:
        cmp     [IDEContrRegsBaseAddr], 0
        je      .end_set_interrupts

        mov     ax, [IDE_Interrupt]
        movzx   eax, al
        stdcall attach_int_handler, eax, IDE_common_irq_handler, 0
        DEBUGF  1, "K : Set IDE IRQ%d return code %x\n", [IDE_Interrupt]:1, eax

        stdcall enable_irq, eax <<<<<<в eax содержится адрес структуры обработчика
Update 2.
Mario
Думаю, твой код здесь ни при чём.
Методом научного тыка установил, что рестарт с включённым APIC не приводит к зависанию ядра. Когда я правил sound.asm у меня в образе лежал devices.dat и ядро работало в режиме apic. Потом я обновлял образ, когда менял /addappl на /KolibriOS, ядро работало в дефолтном PIC и перестало рестартовать.

Re: 2 акт. обработчика PCI IRQ на разных линиях вешают систе

Posted: Tue Jul 09, 2013 1:09 pm
by Mario_r4
stdcall enable_irq, eax <<<<<<в eax содержится адрес структуры обработчика
Serge - ну, ты мозг! Я уже свой сломал почти, почему у меня DMA для такого режима не пашет. :-)
Вот так вот тупейшая ошибка, а у меня глаз уже "замылился".

З.Ы. В ревизии 3791 убрал лишние вызовы stdcall enable_irq. DMA все еще не хочет дружить с контроллерами SATA IDE, но по крайней мере теперь при включенном DMA у меня хотя бы Dell Inspiron загружаться начал.