<div dir="auto"><div>Funcția aia de acces la hardware o apelez și din context proces, nu doar din context întrerupere -- problema pe care încerc să o rezolv astfel este cea în care nu s-ar declanșa pentru prima dată întreruperea corespunzătoare.<br><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Sun, Apr 12, 2020, 08:56 Diana Grecu <<a href="mailto:dianagrecu07@gmail.com">dianagrecu07@gmail.com</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="auto">Esti sigur ca ai nevoie de spinlock-ul acela? Si fiind deja in context intrerupere, nu ar trebui sa folosesti unul normal, fara sa mai dai disable la intreruperi?</div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Sun, Apr 12, 2020, 4:55 AM Paul Olaru via so2 <<a href="mailto:so2@cursuri.cs.pub.ro" target="_blank" rel="noreferrer">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 lang="EN-US" link="blue" vlink="#954F72"><div><p class="MsoNormal"><span lang="RO">Pentru read, flow-ul meu este ceva similar cu:<u></u><u></u></span></p><p class="MsoNormal"><span lang="RO"><u></u> <u></u></span></p><p class="MsoNormal"><span lang="RO">[cdev]<u></u><u></u></span></p><p class="MsoNormal"><span lang="RO">wait_event(&dev->wq_read, !kfifo_is_empty(&dev->fifo_read));<u></u><u></u></span></p><p class="MsoNormal"><span lang="RO">kfifo_to_user(...);<u></u><u></u></span></p><p class="MsoNormal"><span lang="RO"><u></u> <u></u></span></p><p class="MsoNormal"><span lang="RO">[interrupt]<u></u><u></u></span></p><p class="MsoNormal"><span lang="RO">spin_lock_irqsave (this part can be called from cdev as well)<u></u><u></u></span></p><p class="MsoNormal"><span lang="RO">read_reg, kfifo_in, ...<u></u><u></u></span></p><p class="MsoNormal"><span lang="RO">spin_unlock_irqrestore()<u></u><u></u></span></p><p class="MsoNormal"><span lang="RO">wake_up(&dev->wq_read)<u></u><u></u></span></p><p class="MsoNormal"><span lang="RO"><u></u> <u></u></span></p><p class="MsoNormal"><span lang="RO">Dintr-un motiv sau altul wake_up se întâmplă înainte de wait_event și ajung în situația în care wait_event se blochează ad infinitum.<u></u><u></u></span></p><p class="MsoNormal"><span lang="RO">E nevoie de o sincronizare specială? (eventual pe kfifo, who knows)<u></u><u></u></span></p><p class="MsoNormal"><span lang="RO"><u></u> <u></u></span></p><p class="MsoNormal"><span lang="RO">Unele încercări de a rezolva asta mi-au cauzat qemu să dea crash (EIP a ajuns complet random în kernel)<u></u><u></u></span></p><p class="MsoNormal"><span lang="RO"><u></u> <u></u></span></p><p class="MsoNormal"><span lang="RO">On a related note, alte variante ale codului care mai returnează -ERESTARTSYS duc la probleme, anume codul de eroare -512 ajunge<u></u><u></u></span></p><p class="MsoNormal"><span lang="RO">în userspace în loc să facă ce m-aș aștepta. Any way to handle that?<u></u><u></u></span></p><p class="MsoNormal"><u></u> <u></u></p><p class="MsoNormal">Sent from <a href="https://go.microsoft.com/fwlink/?LinkId=550986" rel="noreferrer noreferrer" target="_blank">Mail</a> for Windows 10</p><p class="MsoNormal"><u></u> <u></u></p></div></div>
_______________________________________________<br>
<a href="http://ocw.cs.pub.ro/courses/so2/resurse/lista-discutii" rel="noreferrer noreferrer noreferrer" target="_blank">http://ocw.cs.pub.ro/courses/so2/resurse/lista-discutii</a></blockquote></div>
</blockquote></div></div></div>