edge-triggered IRQ
Martin Mares
mj na atrey.karlin.mff.cuni.cz
Pondělí Červen 15 19:55:44 CEST 1998
Zdravim,
> hledam nejakeho odbornika na Linuxove IRQ. Mam PC (single-CPU),
> P100, i82430HX (nebo mozna VX) a zarizeni na sbernici ISA. Vypada to, ze
> linux cas od casu (ale dost deterministicky) ztrati IRQ od daneho
> zarizeni. Bylo mi doporuceno od autora te karty, abych zkontroloval,
> ze mam PIC nastaveny na hranu (misto urovne). Vi nekdo, jak se to
> udela?
Dokumentace od PICu by mela byt obsazena v dokumentaci od vetsiny
chipsetu -- budto Intel nebo AMD to ve svych chipsetovych PDF zarucene
ma (mohu to zkusit najit ve svem domacim archivu). Ale tipoval bych,
ze to timto nebude.
> linux/arch/i386/io_apic.c obsahuje sice neco o edge/level-triggered
> prerusenich, ale pokud tomu rozumim, APIC je pouze na SMP systemech.
Ano. A mimochodem, ve kterem kernelu tyto problemy pozorujes?
> Pritom muj kod, ktery ma vyvolat preruseni, je pomerne jednoduchy.
> Mam prerusovaci rutinu (napriklad) tx_interrupt, ve ktere nastartuji
> DMA (nakonfiguruji DMA kontroler) a reknu karte, ze ma zacit DMA
> prenos a ze na konci mi ma dat preruseni. A prave to druhe preruseni
> se ztrati:
>
> static void tx_interrupt() {
> ...
> /* Nastaveni DMA kontroleru */
> ...
> /* Start DMA a zadost o preruseni na konci DMA. DMA sice
> * probehne, ale IRQ nedostanu. */
> outb(status_byte, TX_DMA_ENABLE|INTERRUPT_ENABLE);
> }
>
> Je videt, ze DMA startuji az na uplnem konci prerusovaci rutiny,
> takze o nejakych casovych prodlevach z duvodu zakazaneho IRQ snad nemuze
> byt rec.
Pouziva se nekde v onom driveru disable_irq()?
> Pokud je opravdu problem v casovani, muzu znacnou cast
> tx_interrupt() prepsat jako bottom half. Vi nekdo, jak se definuje
> a pouziva bottom half rutina?
Nedelal bych to primo jako bottom half, protoze tech je v celem kernelu
k dispozici neprijemne malo. Podstatne rozumejsi je vyuzit IMMEDIATE_BH
-- staci vyrobit strukturu tq_struct, do ni si dat pointer na svoji
funkci, zavolat queue_task(&dotycna_struktura, tq_immediate) a pak
mark_bh(IMMEDIATE_BH).
Have a nice fortnight
--
Martin `MJ' Mares <mj na ucw.cz> http://atrey.karlin.mff.cuni.cz/~mj/
Faculty of Math and Physics, Charles University, Prague, Czech Rep., Earth
"Anyone can build a fast CPU. The trick is to build a fast system." -- S. Cray
Další informace o konferenci Linux