diff options
Diffstat (limited to 'litmus/litmus_pai_softirq.c')
-rw-r--r-- | litmus/litmus_pai_softirq.c | 25 |
1 files changed, 24 insertions, 1 deletions
diff --git a/litmus/litmus_pai_softirq.c b/litmus/litmus_pai_softirq.c index 300571a81bbd..1ee5f73a2991 100644 --- a/litmus/litmus_pai_softirq.c +++ b/litmus/litmus_pai_softirq.c | |||
@@ -17,9 +17,29 @@ | |||
17 | #include <litmus/litmus_softirq.h> | 17 | #include <litmus/litmus_softirq.h> |
18 | 18 | ||
19 | 19 | ||
20 | static void __do_lit_tasklet(struct tasklet_struct* tasklet) | ||
21 | { | ||
22 | if (!atomic_read(&tasklet->count)) { | ||
23 | if (!test_and_clear_bit(TASKLET_STATE_SCHED, &tasklet->state)) | ||
24 | { | ||
25 | BUG(); | ||
26 | } | ||
27 | TRACE("%s: Invoking tasklet with owner pid = %d (flushed = %d).\n", | ||
28 | __FUNCTION__, | ||
29 | (tasklet->owner) ? tasklet->owner->pid : -1, | ||
30 | (tasklet->owner) ? 0 : 1); | ||
31 | tasklet->func(tasklet->data); | ||
32 | tasklet_unlock(tasklet); | ||
33 | } | ||
34 | else { | ||
35 | BUG(); | ||
36 | } | ||
37 | } | ||
38 | |||
20 | 39 | ||
21 | int __litmus_tasklet_schedule(struct tasklet_struct *t, unsigned int k_id) | 40 | int __litmus_tasklet_schedule(struct tasklet_struct *t, unsigned int k_id) |
22 | { | 41 | { |
42 | #if 0 | ||
23 | int ret = 0; /* assume failure */ | 43 | int ret = 0; /* assume failure */ |
24 | if(unlikely((t->owner == NULL) || !is_realtime(t->owner))) | 44 | if(unlikely((t->owner == NULL) || !is_realtime(t->owner))) |
25 | { | 45 | { |
@@ -28,8 +48,11 @@ int __litmus_tasklet_schedule(struct tasklet_struct *t, unsigned int k_id) | |||
28 | } | 48 | } |
29 | 49 | ||
30 | ret = litmus->enqueue_pai_tasklet(t); | 50 | ret = litmus->enqueue_pai_tasklet(t); |
31 | |||
32 | return(ret); | 51 | return(ret); |
52 | #else | ||
53 | __do_lit_tasklet(t); | ||
54 | return(1); | ||
55 | #endif | ||
33 | } | 56 | } |
34 | 57 | ||
35 | EXPORT_SYMBOL(__litmus_tasklet_schedule); | 58 | EXPORT_SYMBOL(__litmus_tasklet_schedule); |