Softirqs | |
This is from include/linux/interrupt.h Softirqs are multithreaded, not serialized BH-like activities. Several softirqs may run on several CPUs simultaneously - no matter if they are of the same type. Properties:
Linux (2.4.20) has only 4 softirqs:
Relevant for Linux DDE are for now only the first and the latter -
| |
void | raise_softirq (int nr) |
Raise Softirq. | |
Tasklets | |
This is from kernel/%softirq.c and include/linux/interrupt.h) Tasklets are the multithreaded analogue of BHs. Main feature differing them of generic softirqs: one tasklet is running only on one CPU simultaneously. Main feature differing them of BHs: different tasklets may be run simultaneously on different CPUs. Properties:
Tasklet lists are CPU local in Linux and so tasklet related synchonization is. This is not in Linux DDE - local_irq_disable()/enable() is not sufficient. We use our cli()/sti() implementation.
| |
void | tasklet_init (struct tasklet_struct *t, void(*func)(unsigned long), unsigned long data) |
Tasklet Initialization. | |
void | tasklet_kill (struct tasklet_struct *t) |
Tasklet Termination. | |
void | tasklet_schedule (struct tasklet_struct *t) |
Schedule dedicated tasklet. | |
void | tasklet_hi_schedule (struct tasklet_struct *t) |
Schedule dedicated high-priority tasklet. | |
Old-style Bottom Halves and Task Queues | |
This is from kernel/%softirq.c All bottom halves run as one tasklet so no two bottom halves can run simultaneously.
| |
void | __run_task_queue (task_queue *list) |
Task Queue Execution. | |
spinlock_t | tqueue_lock = SPIN_LOCK_UNLOCKED |
protects tqueue list operation (from kernel/timer.c) | |
Functions | |
int | l4dde_softirq_init () |
Initalize Softirq Thread(s). |
Deferred activities in Linux can be old-style bottom halves, new-style tasklets and softirqs.
Requirements: (additionally to Global Requirements)
Configuration:
|
Task Queue Execution. Runs _all_ tasks currently in task queue list. Definition at line 390 of file softirq.c. References tqueue_lock. |
|
Initalize Softirq Thread(s).
Definition at line 465 of file softirq.c. References _initialized, and dde_softirq_thread(). |
|
Raise Softirq.
Definition at line 125 of file softirq.c. References __cpu_raise_softirq(). |
|
Schedule dedicated high-priority tasklet.
Definition at line 352 of file softirq.c. References __cpu_raise_softirq(), and tasklet_hi_vec. |
|
Tasklet Initialization.
|
|
Tasklet Termination.
Definition at line 287 of file softirq.c. References SCHED_YIELD_TO, and schedule(). |
|
Schedule dedicated tasklet.
Definition at line 327 of file softirq.c. References __cpu_raise_softirq(), and tasklet_vec. |