[pso] spinlock

Adrian - Razvan Deaconescu razvand at gmail.com
Mon Mar 20 04:56:46 EET 2006


On 3/20/06, Andrei Stanescu <reydan_ro at yahoo.com> wrote:
>
> Este vreun trick pe care l-am ratat cu vederea?
> Eu fac spin_lock_init() in init_ module  si spin_lock si spin_unlock pe
> unde am resurse comune.
>
> Problema e ca un al doilea proces care vine si incearca sa obtina lock-ul,
> imi genereaza la consola un mesaj "....already locked by...." si trece mai
> departe.
>

Singurul impact pe care il au spinlock-urile pe un sistem uniprocesor este
sa dezactiveze preeptivitatea kernel-ului. Astfel codul tau din modulul
kernel plasat intre spin_lock si spin_unlock nu ar trebui sa fie intrerupt
niciodata (si sa se faca replanificare in kernelspace). Singurele situatii
de care imi dau seama in care ai putea gasi un spinlock deja acaparat este
atunci cand
 - ai uitat sa dai spin_unlock si procesul tau a fost replanificat pentru
userspace, si vine un alt proces sau
 - faci un lock recursiv si incerci sa acaparezi cu un proces acelasi
spinlock de doua ori

Sunt supozitii totusi pentru ca nu am o vedere clara a situatie tale (poate
o mica bucata de cod ar fi fost utila).

In capitolul 8 din Linux Kernel Development se prezinta amanuntit modul de
functionare a spinlock-urilor si exemple de utilizare. Poate daca te uiti
mai atent o sa descoperi problema.

Am cautat mesajul si am gasit prin spinlock.h ca este un mesaj de debug
> (tine de CONFIG_DEBUG_SPINLOCK.
> Am #undef-uit define-ul si mesajul tot apare.
>

Degeaba faci undef la chestia aia. Cand a fost compilat kernel-ul toate
acele macro-uri au fost incluse. Ce faci tu acolo cand faci undef este doar
sa impiedici utilizarea macro-urilor in codul modulului tau.

Razvan
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://cursuri.cs.pub.ro/pipermail/pso/attachments/20060320/ee15ae17/attachment.html


More information about the pso mailing list