[so2] [Linux][Tema1] Eliminare modul - sincronizare / kfree

Vlad Dogaru ddvlad at herebedragons.ro
Wed Mar 13 09:43:51 EET 2013


On Tue, Mar 12, 2013 at 09:12:47PM +0200, Mihail Costea wrote:
> 2013/3/12 Alexandru Juncu <alexj at rosedu.org>:
> > 2013/3/12 Mihail Costea <mihail.costea90 at gmail.com>:
> >> Salut,
> >>
> >> La eliminare modul mai este nevoie de sincronizare pentru zona de date
> >> globala, gen liste / vector?
> >
> > La ce sincronizare te referi?
> >
> 
> Fie urmatorul caz de utilizare:
> Se apeleaza propriul syscall (cu MY_SYSCALL_NO) de catre un program
> aleatoriu (test de exemplu), dar inainte de incheiere apel se ruleaza
> rmmod sci. In acest caz mai e nevoie de sincronizare? Sau mai exact ce
> se intampla cu tot ce tine de modul.

Indiferent de cine altcineva mai rulează, la rmmod trebuie să faci
următoarele lucruri (cel puțin):

* restaurezi toate syscall-urile la valoarea lor originală;

* ștergi (și eliberezi) toate elementele listei de procese monitorizate;

Cele două operații trebuie făcute respectând regulile de locking pe care
le impui pentru restul modulului.  Dacă altcineva apelează syscall-ul
'nostru' cu puțin timp înainte, acest syscall probabil va lua unul sau
mai multe lock-uri.  Procesul rmmod nu are de ales decât să aștepte până
când sunt eliberate (via spin_lock or friends).

Hope this helps,
Vlad


More information about the so2 mailing list