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 ==== | ||