diff options
author | Deepak Saxena <dsaxena@laptop.org> | 2008-07-30 10:30:53 -0700 |
---|---|---|
committer | Deepak Saxena <dsaxena@laptop.org> | 2008-07-30 10:30:53 -0700 |
commit | 85e8ce3752b87a20b329356e624c37a253586622 (patch) | |
tree | da41eefe2871776be0586b33e013f30251a76765 /kernel | |
parent | a3851e734bcee1b2342652057d084f0653e9d586 (diff) | |
parent | a37912658a4844fa6a1bbf13873e394e15af47a9 (diff) | |
download | lwn-85e8ce3752b87a20b329356e624c37a253586622.tar.gz lwn-85e8ce3752b87a20b329356e624c37a253586622.zip |
Merge commit 'v2.6.25.13' into olpc-testing
Diffstat (limited to 'kernel')
-rw-r--r-- | kernel/hrtimer.c | 8 |
1 files changed, 8 insertions, 0 deletions
diff --git a/kernel/hrtimer.c b/kernel/hrtimer.c index c15a359ea611..3d31d6529933 100644 --- a/kernel/hrtimer.c +++ b/kernel/hrtimer.c @@ -896,10 +896,18 @@ hrtimer_start(struct hrtimer *timer, ktime_t tim, const enum hrtimer_mode mode) */ raise = timer->state == HRTIMER_STATE_PENDING; + /* + * We use preempt_disable to prevent this task from migrating after + * setting up the softirq and raising it. Otherwise, if me migrate + * we will raise the softirq on the wrong CPU. + */ + preempt_disable(); + unlock_hrtimer_base(timer, &flags); if (raise) hrtimer_raise_softirq(); + preempt_enable(); return ret; } |