Differences

This shows you the differences between two versions of the page.

Link to this comparison view

so2:laboratoare:lab06 [2018/03/25 12:00]
ionel.ghita
so2:laboratoare:lab06 [2018/04/29 21:37] (current)
silvia.pripoae [Workqueues]
Line 162: Line 162:
  
 void timer_setup(struct timer_list *timer, void timer_setup(struct timer_list *timer,
-                 void (*function)(unsigned long),+                 void (*function)(struct timer_list *),
                  ​unsigned int flags);                  ​unsigned int flags);
 </​code>​ </​code>​
  
-Funcția de mai sus inițializează câmpurile interne ale structurii și asociază ''​function''​ ca rutina de tratare a timerului; folosind parametrul ''​flags''​ se poate specifica comportamentul timer-ului ([[https://​elixir.bootlin.com/​linux/​v4.15/​source/​include/​linux/​timer.h#​L41 +Funcția de mai sus inițializează câmpurile interne ale structurii și asociază ''​function''​ ca rutina de tratare a timerului; folosind parametrul ''​flags''​ se poate specifica comportamentul timer-ului ([[https://​elixir.bootlin.com/​linux/​v4.15/​source/​include/​linux/​timer.h#​L41|lista flag-uri]]). Intrucât timer-ele sunt planificate peste softirq-uri,​ în codul asociat funcției de tratare nu pot fi folosite apeluri blocante.
-lista flag-uri]]). Intrucât timer-ele sunt planificate peste softirq-uri,​ în codul asociat funcției de tratare nu pot fi folosite apeluri blocante.+
  
 Planificarea unui timer se face cu [[https://​elixir.bootlin.com/​linux/​v4.15/​source/​kernel/​time/​timer.c#​L1072|mod_timer]]:​ Planificarea unui timer se face cu [[https://​elixir.bootlin.com/​linux/​v4.15/​source/​kernel/​time/​timer.c#​L1072|mod_timer]]:​
Line 212: Line 211:
 #include <​linux/​sched.h>​ #include <​linux/​sched.h>​
  
-void timer_function(unsigned long arg);+void timer_function(struct timer_list *timer);
  
 struct timer_list timer; struct timer_list timer;
 unsigned long seconds = 1; unsigned long seconds = 1;
  
-setup_timer(&​timer,​ timer_function,​ 0);+timer_setup(&​timer,​ timer_function,​ 0);
 mod_timer(&​timer,​ jiffies + seconds * HZ); mod_timer(&​timer,​ jiffies + seconds * HZ);
 </​code>​ </​code>​
Line 349: Line 348:
 </​code>​ </​code>​
  
-După cum se poate observa, funcția ''​my_work_handler''​ primește drept parametru sarcina care se execută. Pentru a putea accesa date private ale modulului, se poate folosi macrodefiniția [https://​elixir.bootlin.com/​linux/​v4.15/​source/​include/​linux/​kernel.h#​L921|container_of]] ((container_of -- un exemplu de utilizare pentru macrodefiniția ''​container_of''​ este la parcurgerea [[so2:​laboratoare:​lab03#​Liste|listelor]] din kernel)):+După cum se poate observa, funcția ''​my_work_handler''​ primește drept parametru sarcina care se execută. Pentru a putea accesa date private ale modulului, se poate folosi macrodefiniția ​[[https://​elixir.bootlin.com/​linux/​v4.15/​source/​include/​linux/​kernel.h#​L921|container_of]] ((container_of -- un exemplu de utilizare pentru macrodefiniția ''​container_of''​ este la parcurgerea [[so2:​laboratoare:​lab03#​Liste|listelor]] din kernel)):
  
 <code c> <code c>
so2/laboratoare/lab06.1521968448.txt.gz · Last modified: 2018/03/25 12:00 by ionel.ghita
CC Attribution-Share Alike 3.0 Unported
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0