edge-triggered IRQ

Martin Mares mj na atrey.karlin.mff.cuni.cz
Úterý Červen 16 16:20:32 CEST 1998


Zdravim,

> 	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)?

   disable_irq() umoznuje nechat si zakazat konkretni IRQ, takze jej clovek
muze pouzivat tam, kde by jinak pouzil globalni cli(), a tim si lockovat
sve struktury proti interruptum, aniz by brzdil obsluhu ostatnich interruptu.
Na druhou stranu, brani pouze prislusnemu interruptu, takze pokud ma byt
kod SMP-safe, nezbyde nic nez pouzit spinlocku. spin_lock_irqsave zakazujici
jen specificky interrupt ale bohuzel k dispozici neni :-(
 
> 	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).

   Pokud to neni vykonove prilis kriticke, presunul bych to radeji do BH,
aby se tim zbytecne neblokovaly ostatni interrupty, ktere casto kriticke
jsou (napr. input buffer full od serialu). To vse jen diky tomu, ze PC
ma naprosto zcestne vyresene priority interruptu :(

> 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.

   Na 100% dela.

				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
"Spelling checkers at maximum!  Fire!"


Další informace o konferenci Linux