edge-triggered IRQ

Jan Kasprzak kas na informatics.muni.cz
Úterý Červen 16 13:48:21 CEST 1998


	Dobry den,

	nejprve bych chtel podekovat vsem, kdo se mi snazili pomoci.
Problem nakonec byl jinde - kvuli chybe v mem driveru posilala ta karta
preruseni jeste driv, nez jsem je mohl zachytit (pred skoncenim DMA).
Ted uz to zda se funguje.

Martin Mares:
: > 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?

	2.1.10[35], asi i nejake starsi - uz se v tom vrtam asi mesic.

:    Pouziva se nekde v onom driveru disable_irq()?

	Ne. K cemu vubec je disable_irq() - da se to pouzit k zamykani
kritickych sekci driveru lepe, nez spin_lock_irqsave(muj_zamek, flags)
/spin_unlock_irqrestore(muj_zamek, flags)?
 
: > 	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).

	No a je mi vubec bottom half k necemu? Moje prerusovaci rutina
v podstate jen zamkne strukturu, ktera popisuje dane zarizeni, zmeni
interni status, provede asi dve i/o operace, odemkne, a pak podle toho,
jestli jde o zacatek nebo konec prenosu budto nastartuje DMA
nebo probudi nejakou frontu procesu (wake_up_interruptible). Kod na
3x30 radku (start tx, start rx, konec prenosu). Asi nejvic tam budou
zabirat ty I/O operace - zvlaste kdyz je to na sbernici ISA. Ale i tak
je to tak 10-15 I/O operaci (vcetne konfigurovani DMA kontroleru).

Vlada Michl:
:  Po prijeti preruseni je treba rict radici preruseni, aby povolil dalsi
: (myslim ze se ma poslat 20h na I/O 20H).
: Jen nevim, zda se to musi v jadre delat explicitne, nebo to dela samo.

	Ja si myslim, ze tohle dela jadro samo nekde v arch/i386/irq.c.

-Yenya

--
\ Jan "Yenya" Kasprzak <kas at fi.muni.cz>       http://www.fi.muni.cz/~kas/
\\ PGP: finger kas at aisa.fi.muni.cz   0D99A7FB206605D7 8B35FCDE05B18A5E //
\\\             Czech Linux Homepage:  http://www.linux.cz/              ///
If there are race conditions in programs fix them. The "my programs suck fix
something else" mentality leads you to things like Java.         -- Alan Cox


Další informace o konferenci Linux