diff --git a/[refs] b/[refs] index 3aa9f4f8661b..1c23a347ea9d 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 6beef7eb0c16b5216814148b04838cfa963d2cb4 +refs/heads/master: ee3ece830f6db9837f7ac67008f532a8c1e755f4 diff --git a/trunk/kernel/hrtimer.c b/trunk/kernel/hrtimer.c index 421be5fe5cc7..ab80515008f4 100644 --- a/trunk/kernel/hrtimer.c +++ b/trunk/kernel/hrtimer.c @@ -1003,10 +1003,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; }