diff options
| author | Bjoern B. Brandenburg <bbb@cs.unc.edu> | 2009-05-04 01:17:08 -0400 |
|---|---|---|
| committer | Bjoern B. Brandenburg <bbb@cs.unc.edu> | 2009-05-04 01:17:08 -0400 |
| commit | 5b0c2aac1d78f1db36c85bd5cd1e215c7cbd2dd6 (patch) | |
| tree | c5183d5dc2a84fcc36cc30aa38d00bb4b0e1d892 /kernel | |
| parent | e20dd584519687867aedc46535c447102e52c70e (diff) | |
rt domain: evil hack to avoid recursive hrtimer lock acquisition
This is a really dirty hack, but works for now since our real-time
tasks do not use hrtimer_wakeup().
The need for this will go away when we port since newer versions of the
Linux kernel allow timers to be activated directly in the scheduler.
Diffstat (limited to 'kernel')
| -rw-r--r-- | kernel/hrtimer.c | 8 |
1 files changed, 7 insertions, 1 deletions
diff --git a/kernel/hrtimer.c b/kernel/hrtimer.c index 2bd9fc2a59..7b8576b6bd 100644 --- a/kernel/hrtimer.c +++ b/kernel/hrtimer.c | |||
| @@ -1314,6 +1314,9 @@ void hrtimer_run_queues(void) | |||
| 1314 | run_hrtimer_queue(cpu_base, i); | 1314 | run_hrtimer_queue(cpu_base, i); |
| 1315 | } | 1315 | } |
| 1316 | 1316 | ||
| 1317 | /* FIXME: this won't be needed anymore once we port to Linux > 2.6.24 */ | ||
| 1318 | void hrtimer_wakeup_hack(int onoff); | ||
| 1319 | |||
| 1317 | /* | 1320 | /* |
| 1318 | * Sleep related functions: | 1321 | * Sleep related functions: |
| 1319 | */ | 1322 | */ |
| @@ -1324,8 +1327,11 @@ static enum hrtimer_restart hrtimer_wakeup(struct hrtimer *timer) | |||
| 1324 | struct task_struct *task = t->task; | 1327 | struct task_struct *task = t->task; |
| 1325 | 1328 | ||
| 1326 | t->task = NULL; | 1329 | t->task = NULL; |
| 1327 | if (task) | 1330 | if (task) { |
| 1331 | hrtimer_wakeup_hack(1); | ||
| 1328 | wake_up_process(task); | 1332 | wake_up_process(task); |
| 1333 | hrtimer_wakeup_hack(0); | ||
| 1334 | } | ||
| 1329 | 1335 | ||
| 1330 | return HRTIMER_NORESTART; | 1336 | return HRTIMER_NORESTART; |
| 1331 | } | 1337 | } |
