This shows you the differences between two versions of the page.
so2:laboratoare:lab06:exercitii [2018/03/27 22:51] ionel.ghita [[10.5p] Exerciții] |
so2:laboratoare:lab06:exercitii [2018/03/28 09:17] (current) ionel.ghita [4. [1.5p] Operații blocante] |
||
---|---|---|---|
Line 193: | Line 193: | ||
Observați că programul cauzează eroare pentru că se apelează o funcție blocantă în context atomic (handler-ul de timer rulează în context amânabil/întrerupere). | Observați că programul cauzează eroare pentru că se apelează o funcție blocantă în context atomic (handler-ul de timer rulează în context amânabil/întrerupere). | ||
+ | <note tip> | ||
+ | Pentru a obține un pointer la datele private ale modulului (structura ''my_device_data''), puteți folosi macro-ul [[https://elixir.bootlin.com/linux/v4.15/source/include/linux/timer.h#L143|from_timer]], | ||
+ | care este similar cu [[https://elixir.bootlin.com/linux/v4.15/source/tools/include/linux/kernel.h#L26|container_of]]. | ||
+ | <code c> | ||
+ | static void timer_handler(struct timer_list *tl) | ||
+ | { | ||
+ | struct my_device_data *data = from_timer(data, tl, timer); | ||
+ | ... | ||
+ | } | ||
+ | </code> | ||
+ | </note> | ||
==== 5. [1.5p] Workqueues ==== | ==== 5. [1.5p] Workqueues ==== | ||