<div dir="auto">Ai încercat ordinea:<div dir="auto"><br></div><div dir="auto">* Înregistrezi handler, dacă n-ai făcut-o în module_init</div><div dir="auto">* Activezi întrerupere, dacă n-ai făcut-o în module_init</div><div dir="auto">* Atomic, verifici: dacă nu e busy primul octet îl scrii în hardware pe TX direct. Folosești același spinlock ca în întrerupere și faci cu irq sau irqsave ca să eviți deadlock</div><div dir="auto">* Pe urmă lași întreruperile să muncească.</div></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Sun, Apr 5, 2020, 17:54 Andreea Mitran via so2 <<a href="mailto:so2@cursuri.cs.pub.ro">so2@cursuri.cs.pub.ro</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr">Din ce am citit pe listele de discuții din anii anteriori, întreruperea TX trebuie activată din nou, atunci când se efectuează write din user space. <br><br>Deși fac acest lucru și handler-ul întreruperii este chemat, bitul corespunzător din IIR care să îmi spună că hardware-ul are de citit date scrise din user space este 0. Am afișat valoarea registrului IIR în întrerupere și aceasta este destul de bizară față de valoarea pe care o are la testele corespunzătoare pentru read.<br><br>La testul 3, am passed pentru operația de read, însă la testul 4, programul se blochează, întrucât eu în handler-ul de întrerupere verific valoarea bitului corespunzător întreruperii pentru a stabili că trebuie să trimit date la hardware, care este 0.<div><br></div><div>Știți cumva care ar putea fi problema?</div><div><br></div><div>Mulțumesc,</div><div>Andreea</div></div>
_______________________________________________<br>
<a href="http://ocw.cs.pub.ro/courses/so2/resurse/lista-discutii" rel="noreferrer noreferrer" target="_blank">http://ocw.cs.pub.ro/courses/so2/resurse/lista-discutii</a></blockquote></div>