diff options
| author | Samuel Thibault <samuel.thibault@ens-lyon.org> | 2012-07-10 01:36:36 +0000 |
|---|---|---|
| committer | Samuel Thibault <samuel.thibault@ens-lyon.org> | 2012-07-10 01:36:36 +0000 |
| commit | 2337c6841d00aac71f100549a08713786cd696d9 (patch) | |
| tree | 05b799a90dc1c5537bac6478fd2cdea0cfe68728 /libdde_linux26/lib/src/arch/l4/softirq.c | |
| parent | 420ec9a9aa2fd36e4bbb67b3ee6c8471c37efa24 (diff) | |
| parent | 7e3b6178f20258f60cc9e9a7671287e4e02ffb76 (diff) | |
Merge branch 'upstream-merged'
Diffstat (limited to 'libdde_linux26/lib/src/arch/l4/softirq.c')
| -rw-r--r-- | libdde_linux26/lib/src/arch/l4/softirq.c | 14 |
1 files changed, 14 insertions, 0 deletions
diff --git a/libdde_linux26/lib/src/arch/l4/softirq.c b/libdde_linux26/lib/src/arch/l4/softirq.c index 247a414f..d93bfaff 100644 --- a/libdde_linux26/lib/src/arch/l4/softirq.c +++ b/libdde_linux26/lib/src/arch/l4/softirq.c @@ -67,6 +67,20 @@ void tasklet_init(struct tasklet_struct *t, t->data = data; } +void tasklet_kill(struct tasklet_struct *t) +{ + if (in_interrupt()) + printk("Attempt to kill tasklet from interrupt\n"); + + while (test_and_set_bit(TASKLET_STATE_SCHED, &t->state)) { + do + yield(); + while (test_bit(TASKLET_STATE_SCHED, &t->state)); + } + tasklet_unlock_wait(t); + clear_bit(TASKLET_STATE_SCHED, &t->state); +} + /* enqueue tasklet */ static void __tasklet_enqueue(struct tasklet_struct *t, struct tasklet_head *listhead) |
