aboutsummaryrefslogtreecommitdiffstats
path: root/kernel/hrtimer.c
diff options
context:
space:
mode:
Diffstat (limited to 'kernel/hrtimer.c')
-rw-r--r--kernel/hrtimer.c15
1 files changed, 7 insertions, 8 deletions
diff --git a/kernel/hrtimer.c b/kernel/hrtimer.c
index 4fc41414fc06..2b465dfde426 100644
--- a/kernel/hrtimer.c
+++ b/kernel/hrtimer.c
@@ -1461,9 +1461,7 @@ void hrtimer_run_queues(void)
1461 if (!base->first) 1461 if (!base->first)
1462 continue; 1462 continue;
1463 1463
1464 if (base->get_softirq_time) 1464 if (gettime) {
1465 base->softirq_time = base->get_softirq_time();
1466 else if (gettime) {
1467 hrtimer_get_softirq_time(cpu_base); 1465 hrtimer_get_softirq_time(cpu_base);
1468 gettime = 0; 1466 gettime = 0;
1469 } 1467 }
@@ -1752,9 +1750,11 @@ static void migrate_hrtimers(int cpu)
1752 new_base = &get_cpu_var(hrtimer_bases); 1750 new_base = &get_cpu_var(hrtimer_bases);
1753 1751
1754 tick_cancel_sched_timer(cpu); 1752 tick_cancel_sched_timer(cpu);
1755 1753 /*
1756 local_irq_disable(); 1754 * The caller is globally serialized and nobody else
1757 spin_lock(&new_base->lock); 1755 * takes two locks at once, deadlock is not possible.
1756 */
1757 spin_lock_irq(&new_base->lock);
1758 spin_lock_nested(&old_base->lock, SINGLE_DEPTH_NESTING); 1758 spin_lock_nested(&old_base->lock, SINGLE_DEPTH_NESTING);
1759 1759
1760 for (i = 0; i < HRTIMER_MAX_CLOCK_BASES; i++) { 1760 for (i = 0; i < HRTIMER_MAX_CLOCK_BASES; i++) {
@@ -1767,8 +1767,7 @@ static void migrate_hrtimers(int cpu)
1767 raise = 1; 1767 raise = 1;
1768 1768
1769 spin_unlock(&old_base->lock); 1769 spin_unlock(&old_base->lock);
1770 spin_unlock(&new_base->lock); 1770 spin_unlock_irq(&new_base->lock);
1771 local_irq_enable();
1772 put_cpu_var(hrtimer_bases); 1771 put_cpu_var(hrtimer_bases);
1773 1772
1774 if (raise) 1773 if (raise)