diff options
Diffstat (limited to 'include')
-rw-r--r-- | include/litmus/edf_common.h | 4 | ||||
-rw-r--r-- | include/litmus/rt_domain.h | 33 |
2 files changed, 19 insertions, 18 deletions
diff --git a/include/litmus/edf_common.h b/include/litmus/edf_common.h index f79bd76e17..37630e5c26 100644 --- a/include/litmus/edf_common.h +++ b/include/litmus/edf_common.h | |||
@@ -12,8 +12,8 @@ | |||
12 | #include <litmus/rt_domain.h> | 12 | #include <litmus/rt_domain.h> |
13 | 13 | ||
14 | 14 | ||
15 | void edf_domain_init(rt_domain_t* rt, check_resched_needed_t resched, | 15 | void edf_domain_init(rt_domain_t* rt, check_resched_needed_t resched, |
16 | release_at_t release); | 16 | release_job_t release); |
17 | 17 | ||
18 | int edf_higher_prio(struct task_struct* first, | 18 | int edf_higher_prio(struct task_struct* first, |
19 | struct task_struct* second); | 19 | struct task_struct* second); |
diff --git a/include/litmus/rt_domain.h b/include/litmus/rt_domain.h index fd3c205bcc..7b2a11c0f2 100644 --- a/include/litmus/rt_domain.h +++ b/include/litmus/rt_domain.h | |||
@@ -5,14 +5,18 @@ | |||
5 | #ifndef __UNC_RT_DOMAIN_H__ | 5 | #ifndef __UNC_RT_DOMAIN_H__ |
6 | #define __UNC_RT_DOMAIN_H__ | 6 | #define __UNC_RT_DOMAIN_H__ |
7 | 7 | ||
8 | #include <linux/interrupt.h> | ||
9 | |||
8 | struct _rt_domain; | 10 | struct _rt_domain; |
9 | 11 | ||
10 | typedef int (*check_resched_needed_t)(struct _rt_domain *rt); | 12 | typedef int (*check_resched_needed_t)(struct _rt_domain *rt); |
11 | typedef void (*release_at_t)(struct task_struct *t); | 13 | typedef void (*release_job_t)(struct task_struct *t, struct _rt_domain *rt); |
12 | 14 | ||
13 | typedef struct _rt_domain { | 15 | typedef struct _rt_domain { |
16 | struct tasklet_struct release_tasklet; | ||
17 | |||
14 | /* runnable rt tasks are in here */ | 18 | /* runnable rt tasks are in here */ |
15 | rwlock_t ready_lock; | 19 | spinlock_t ready_lock; |
16 | struct list_head ready_queue; | 20 | struct list_head ready_queue; |
17 | 21 | ||
18 | /* real-time tasks waiting for release are in here */ | 22 | /* real-time tasks waiting for release are in here */ |
@@ -22,8 +26,8 @@ typedef struct _rt_domain { | |||
22 | /* how do we check if we need to kick another CPU? */ | 26 | /* how do we check if we need to kick another CPU? */ |
23 | check_resched_needed_t check_resched; | 27 | check_resched_needed_t check_resched; |
24 | 28 | ||
25 | /* how do we setup a job release? */ | 29 | /* how do we release a job? */ |
26 | release_at_t setup_release; | 30 | release_job_t release_job; |
27 | 31 | ||
28 | /* how are tasks ordered in the ready queue? */ | 32 | /* how are tasks ordered in the ready queue? */ |
29 | list_cmp_t order; | 33 | list_cmp_t order; |
@@ -35,8 +39,9 @@ typedef struct _rt_domain { | |||
35 | #define ready_jobs_pending(rt) \ | 39 | #define ready_jobs_pending(rt) \ |
36 | (!list_empty(&(rt)->ready_queue)) | 40 | (!list_empty(&(rt)->ready_queue)) |
37 | 41 | ||
38 | void rt_domain_init(rt_domain_t *rt, check_resched_needed_t f, | 42 | void rt_domain_init(rt_domain_t *rt, list_cmp_t order, |
39 | release_at_t g, list_cmp_t order); | 43 | check_resched_needed_t check, |
44 | release_job_t relase); | ||
40 | 45 | ||
41 | void __add_ready(rt_domain_t* rt, struct task_struct *new); | 46 | void __add_ready(rt_domain_t* rt, struct task_struct *new); |
42 | void __add_release(rt_domain_t* rt, struct task_struct *task); | 47 | void __add_release(rt_domain_t* rt, struct task_struct *task); |
@@ -44,16 +49,13 @@ void __add_release(rt_domain_t* rt, struct task_struct *task); | |||
44 | struct task_struct* __take_ready(rt_domain_t* rt); | 49 | struct task_struct* __take_ready(rt_domain_t* rt); |
45 | struct task_struct* __peek_ready(rt_domain_t* rt); | 50 | struct task_struct* __peek_ready(rt_domain_t* rt); |
46 | 51 | ||
47 | void try_release_pending(rt_domain_t* rt); | ||
48 | void __release_pending(rt_domain_t* rt); | ||
49 | |||
50 | static inline void add_ready(rt_domain_t* rt, struct task_struct *new) | 52 | static inline void add_ready(rt_domain_t* rt, struct task_struct *new) |
51 | { | 53 | { |
52 | unsigned long flags; | 54 | unsigned long flags; |
53 | /* first we need the write lock for rt_ready_queue */ | 55 | /* first we need the write lock for rt_ready_queue */ |
54 | write_lock_irqsave(&rt->ready_lock, flags); | 56 | spin_lock_irqsave(&rt->ready_lock, flags); |
55 | __add_ready(rt, new); | 57 | __add_ready(rt, new); |
56 | write_unlock_irqrestore(&rt->ready_lock, flags); | 58 | spin_unlock_irqrestore(&rt->ready_lock, flags); |
57 | } | 59 | } |
58 | 60 | ||
59 | static inline struct task_struct* take_ready(rt_domain_t* rt) | 61 | static inline struct task_struct* take_ready(rt_domain_t* rt) |
@@ -61,9 +63,9 @@ static inline struct task_struct* take_ready(rt_domain_t* rt) | |||
61 | unsigned long flags; | 63 | unsigned long flags; |
62 | struct task_struct* ret; | 64 | struct task_struct* ret; |
63 | /* first we need the write lock for rt_ready_queue */ | 65 | /* first we need the write lock for rt_ready_queue */ |
64 | write_lock_irqsave(&rt->ready_lock, flags); | 66 | spin_lock_irqsave(&rt->ready_lock, flags); |
65 | ret = __take_ready(rt); | 67 | ret = __take_ready(rt); |
66 | write_unlock_irqrestore(&rt->ready_lock, flags); | 68 | spin_unlock_irqrestore(&rt->ready_lock, flags); |
67 | return ret; | 69 | return ret; |
68 | } | 70 | } |
69 | 71 | ||
@@ -87,11 +89,10 @@ static inline int jobs_pending(rt_domain_t* rt) | |||
87 | unsigned long flags; | 89 | unsigned long flags; |
88 | int ret; | 90 | int ret; |
89 | /* first we need the write lock for rt_ready_queue */ | 91 | /* first we need the write lock for rt_ready_queue */ |
90 | read_lock_irqsave(&rt->ready_lock, flags); | 92 | spin_lock_irqsave(&rt->ready_lock, flags); |
91 | ret = __jobs_pending(rt); | 93 | ret = __jobs_pending(rt); |
92 | read_unlock_irqrestore(&rt->ready_lock, flags); | 94 | spin_unlock_irqrestore(&rt->ready_lock, flags); |
93 | return ret; | 95 | return ret; |
94 | } | 96 | } |
95 | 97 | ||
96 | |||
97 | #endif | 98 | #endif |