[pso] [Tema2][Linux] /proc/interrupts
Andrei Trandafir
andreitra1987 at yahoo.com
Sat Apr 10 15:57:53 EEST 2010
Ok..."Registre"...mea culpa :)
Eu am gandit ordinea curenta pe urmatoarea idee: daca as initializa intai device-ul si intreruperile ultimele, ar exista riscul executarii unei comenzi de open / read / write etc. (o preemptare) inainte ca handler-ul meu de interupere sa fie si el instalat. Pe cand asa, nu ma deranjeaza daca se genereaza vreo intrerupere la inceput, insa stiu sigur ca atunci cand cineva face read / write, handler-ul este disponibil si functioneaza.
--- On Sat, 4/10/10, Razvan Deaconescu <razvan.deaconescu at cs.pub.ro> wrote:
> From: Razvan Deaconescu <razvan.deaconescu at cs.pub.ro>
> Subject: Re: [pso] [Tema2][Linux] /proc/interrupts
> To: "Proiectarea Sistemelor de Operare" <pso at cursuri.cs.pub.ro>
> Date: Saturday, April 10, 2010, 5:46 AM
> On Sat, 2010-04-10 at 02:45 -0700,
> Andrei Trandafir wrote:
> > Am reusit sa rezolv problema, pana la urma. Eu, dupa
> ce inseram
> > handler-ul,
>
> Te referi la request_irq?
>
> > mai faceam 3 operatii: resetam registrii,
>
> s/registri/registre; s/registrii/registrele[1]
>
> > activam intreruperile din IER si activam FIFO-ul, iar
> apoi citeam
> > starea curenta a registrilor UART. Am mutat toate
> aceste 3 operatii in
> > functia de deschidere a dispozitivului si acum
> functioneaza totul
> > corect.
> > Totusi, nu am inteles unde era problema. Ordinea de
> initializare (si
> > ordinea inversa de eliminare) in modul era:
> > - porturi
> > - intreruperi
> > (*)
> > - device
> > (**)
> >
> > De ce efectuarea celor 3 operatii in (*) dadea
> problema
> > din /proc/interrupts (care apoi ducea la blocarea
> sistemului) si in
> > (**) nu mai face asta...is beyond me.
>
> Ordinea de initializare trebuie sa fie:
>
> register_chrdev_reqion (dispozitiv)
> request_region (porturi)
> request_irq (intreruperi)
>
> Primele doua pot fi in orice ordine dar _ultima_
> initializare trebuie sa
> fie cea a intreruperilor. Aceasta pentru ca dupa activarea
> intreruperilor se transmit semnale catre procesor. Daca
> acesta nu a
> inregistrat inca porturi (request_region) pentru lucrul cu
> dispozitivul
> dat atunci evil things will happen.
>
> Ca good practice, operatiile legate de intreruperi trebuie
> sa fie
> realizate tot timpul ultimele.
>
> Razvan
>
> [1] http://dexonline.ro/definitie/registru
>
> _______________________________________________
> pso mailing list
> pso at cursuri.cs.pub.ro
> http://cursuri.cs.pub.ro/cgi-bin/mailman/listinfo/pso
>
More information about the pso
mailing list