[pso] work_struct::data

Razvan Deaconescu razvand at cs.pub.ro
Thu May 15 01:25:57 EEST 2008


On Thu, 2008-05-15 at 01:11 +0300, Alexandru Mosoi wrote:
> grhhh. de unde invechit? l-am luat din LDD3.

LDD e invechit. LDD prezinta API din kernel-ul 2.6.11. Ar fi putut fi si
2.6.18. In ceea ce priveste I/O block layer si alte aspecte (de exemplu
workqueues), versiunile sub 2.6.18 (poate chiar mai mult) sunt invechit.

> asa... plus ca mi se pare ceva gresit in laborator. work_struct este
> defapt o lista inlantuita si mereu (in laborator) se pune in coada
> exact acelasi element (acelasi pointer).

Nu conteaza ce este work_struct. Tu trebuie sa creezi o structura de
forma

struct my_data {
   /* bla */
   struct work_struct;
   /* bla */
};

In structura vei plasa bio si alte elemente utile. Vei planifica work-ul
(schedule_work) si in functia de tratare vei folosi container_of pentru
a obtine pointer-ul la structura my_data ce "imbraca" work_struct.

Daca exemplele din laborator nu te satisfac poti parcurge sursele[1]
(functiile delayed_delete si unbind_rdev_from_array sunt importante)

>  eu am alocat workqueue-ul si l-am eliberat in handler (m-am uitat in
> doc... err... surse si e corect ce fac). problema mea e cum folosesc
> data ala? ca mi-am pierdut deja 2 ore de somn incercand sa-mi dau
> seama treaba cu el (atribuirea lui dupa INIT/PREPARE_WORK face ca
> handlerul sa nu fie chemat).

Am incercat si eu la inceput sa folosesc acel camp data, dar nu am
reusit sa vad care este utilitatea lui. Cred ca este suprascris in
momentul planificarii work-ului. Faptul ca este atomic iti da un indiciu
ca nu este chiar orice tip de data.

Oricum, solutia corecta de utilizare este cea din laborator sau
surse[1].

Razvan "What? 1:30AM and still not sleeping? You crazy!" Deaconescu

[1] http://cs.pub.ro/~pso/lxr/source/drivers/md/md.c?v=linux-2.6.24.2#1416


-- 
This message has been scanned for viruses and
dangerous content by MailScanner, and is
believed to be clean.



More information about the pso mailing list