diff options
author | Thomas Gleixner <tglx@linutronix.de> | 2009-11-17 09:32:06 -0500 |
---|---|---|
committer | Thomas Gleixner <tglx@linutronix.de> | 2009-12-14 17:55:33 -0500 |
commit | 0986b11b12ad2baed338385f79fd0dec58a23fc6 (patch) | |
tree | 36bdf3985704f87f0c278a35e53470f6248419e2 /kernel/sched.c | |
parent | 05fa785cf80c9b7c0254c3056037147aed3ea16b (diff) |
sched: Convert rt_runtime_lock to raw_spinlock
Convert locks which cannot be sleeping locks in preempt-rt to
raw_spinlocks.
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
Acked-by: Peter Zijlstra <peterz@infradead.org>
Acked-by: Ingo Molnar <mingo@elte.hu>
Diffstat (limited to 'kernel/sched.c')
-rw-r--r-- | kernel/sched.c | 28 |
1 files changed, 14 insertions, 14 deletions
diff --git a/kernel/sched.c b/kernel/sched.c index 3dbe6178ebfd..01c5016e57f1 100644 --- a/kernel/sched.c +++ b/kernel/sched.c | |||
@@ -141,7 +141,7 @@ struct rt_prio_array { | |||
141 | 141 | ||
142 | struct rt_bandwidth { | 142 | struct rt_bandwidth { |
143 | /* nests inside the rq lock: */ | 143 | /* nests inside the rq lock: */ |
144 | spinlock_t rt_runtime_lock; | 144 | raw_spinlock_t rt_runtime_lock; |
145 | ktime_t rt_period; | 145 | ktime_t rt_period; |
146 | u64 rt_runtime; | 146 | u64 rt_runtime; |
147 | struct hrtimer rt_period_timer; | 147 | struct hrtimer rt_period_timer; |
@@ -178,7 +178,7 @@ void init_rt_bandwidth(struct rt_bandwidth *rt_b, u64 period, u64 runtime) | |||
178 | rt_b->rt_period = ns_to_ktime(period); | 178 | rt_b->rt_period = ns_to_ktime(period); |
179 | rt_b->rt_runtime = runtime; | 179 | rt_b->rt_runtime = runtime; |
180 | 180 | ||
181 | spin_lock_init(&rt_b->rt_runtime_lock); | 181 | raw_spin_lock_init(&rt_b->rt_runtime_lock); |
182 | 182 | ||
183 | hrtimer_init(&rt_b->rt_period_timer, | 183 | hrtimer_init(&rt_b->rt_period_timer, |
184 | CLOCK_MONOTONIC, HRTIMER_MODE_REL); | 184 | CLOCK_MONOTONIC, HRTIMER_MODE_REL); |
@@ -200,7 +200,7 @@ static void start_rt_bandwidth(struct rt_bandwidth *rt_b) | |||
200 | if (hrtimer_active(&rt_b->rt_period_timer)) | 200 | if (hrtimer_active(&rt_b->rt_period_timer)) |
201 | return; | 201 | return; |
202 | 202 | ||
203 | spin_lock(&rt_b->rt_runtime_lock); | 203 | raw_spin_lock(&rt_b->rt_runtime_lock); |
204 | for (;;) { | 204 | for (;;) { |
205 | unsigned long delta; | 205 | unsigned long delta; |
206 | ktime_t soft, hard; | 206 | ktime_t soft, hard; |
@@ -217,7 +217,7 @@ static void start_rt_bandwidth(struct rt_bandwidth *rt_b) | |||
217 | __hrtimer_start_range_ns(&rt_b->rt_period_timer, soft, delta, | 217 | __hrtimer_start_range_ns(&rt_b->rt_period_timer, soft, delta, |
218 | HRTIMER_MODE_ABS_PINNED, 0); | 218 | HRTIMER_MODE_ABS_PINNED, 0); |
219 | } | 219 | } |
220 | spin_unlock(&rt_b->rt_runtime_lock); | 220 | raw_spin_unlock(&rt_b->rt_runtime_lock); |
221 | } | 221 | } |
222 | 222 | ||
223 | #ifdef CONFIG_RT_GROUP_SCHED | 223 | #ifdef CONFIG_RT_GROUP_SCHED |
@@ -470,7 +470,7 @@ struct rt_rq { | |||
470 | u64 rt_time; | 470 | u64 rt_time; |
471 | u64 rt_runtime; | 471 | u64 rt_runtime; |
472 | /* Nests inside the rq lock: */ | 472 | /* Nests inside the rq lock: */ |
473 | spinlock_t rt_runtime_lock; | 473 | raw_spinlock_t rt_runtime_lock; |
474 | 474 | ||
475 | #ifdef CONFIG_RT_GROUP_SCHED | 475 | #ifdef CONFIG_RT_GROUP_SCHED |
476 | unsigned long rt_nr_boosted; | 476 | unsigned long rt_nr_boosted; |
@@ -9366,7 +9366,7 @@ static void init_rt_rq(struct rt_rq *rt_rq, struct rq *rq) | |||
9366 | rt_rq->rt_time = 0; | 9366 | rt_rq->rt_time = 0; |
9367 | rt_rq->rt_throttled = 0; | 9367 | rt_rq->rt_throttled = 0; |
9368 | rt_rq->rt_runtime = 0; | 9368 | rt_rq->rt_runtime = 0; |
9369 | spin_lock_init(&rt_rq->rt_runtime_lock); | 9369 | raw_spin_lock_init(&rt_rq->rt_runtime_lock); |
9370 | 9370 | ||
9371 | #ifdef CONFIG_RT_GROUP_SCHED | 9371 | #ifdef CONFIG_RT_GROUP_SCHED |
9372 | rt_rq->rt_nr_boosted = 0; | 9372 | rt_rq->rt_nr_boosted = 0; |
@@ -10305,18 +10305,18 @@ static int tg_set_bandwidth(struct task_group *tg, | |||
10305 | if (err) | 10305 | if (err) |
10306 | goto unlock; | 10306 | goto unlock; |
10307 | 10307 | ||
10308 | spin_lock_irq(&tg->rt_bandwidth.rt_runtime_lock); | 10308 | raw_spin_lock_irq(&tg->rt_bandwidth.rt_runtime_lock); |
10309 | tg->rt_bandwidth.rt_period = ns_to_ktime(rt_period); | 10309 | tg->rt_bandwidth.rt_period = ns_to_ktime(rt_period); |
10310 | tg->rt_bandwidth.rt_runtime = rt_runtime; | 10310 | tg->rt_bandwidth.rt_runtime = rt_runtime; |
10311 | 10311 | ||
10312 | for_each_possible_cpu(i) { | 10312 | for_each_possible_cpu(i) { |
10313 | struct rt_rq *rt_rq = tg->rt_rq[i]; | 10313 | struct rt_rq *rt_rq = tg->rt_rq[i]; |
10314 | 10314 | ||
10315 | spin_lock(&rt_rq->rt_runtime_lock); | 10315 | raw_spin_lock(&rt_rq->rt_runtime_lock); |
10316 | rt_rq->rt_runtime = rt_runtime; | 10316 | rt_rq->rt_runtime = rt_runtime; |
10317 | spin_unlock(&rt_rq->rt_runtime_lock); | 10317 | raw_spin_unlock(&rt_rq->rt_runtime_lock); |
10318 | } | 10318 | } |
10319 | spin_unlock_irq(&tg->rt_bandwidth.rt_runtime_lock); | 10319 | raw_spin_unlock_irq(&tg->rt_bandwidth.rt_runtime_lock); |
10320 | unlock: | 10320 | unlock: |
10321 | read_unlock(&tasklist_lock); | 10321 | read_unlock(&tasklist_lock); |
10322 | mutex_unlock(&rt_constraints_mutex); | 10322 | mutex_unlock(&rt_constraints_mutex); |
@@ -10421,15 +10421,15 @@ static int sched_rt_global_constraints(void) | |||
10421 | if (sysctl_sched_rt_runtime == 0) | 10421 | if (sysctl_sched_rt_runtime == 0) |
10422 | return -EBUSY; | 10422 | return -EBUSY; |
10423 | 10423 | ||
10424 | spin_lock_irqsave(&def_rt_bandwidth.rt_runtime_lock, flags); | 10424 | raw_spin_lock_irqsave(&def_rt_bandwidth.rt_runtime_lock, flags); |
10425 | for_each_possible_cpu(i) { | 10425 | for_each_possible_cpu(i) { |
10426 | struct rt_rq *rt_rq = &cpu_rq(i)->rt; | 10426 | struct rt_rq *rt_rq = &cpu_rq(i)->rt; |
10427 | 10427 | ||
10428 | spin_lock(&rt_rq->rt_runtime_lock); | 10428 | raw_spin_lock(&rt_rq->rt_runtime_lock); |
10429 | rt_rq->rt_runtime = global_rt_runtime(); | 10429 | rt_rq->rt_runtime = global_rt_runtime(); |
10430 | spin_unlock(&rt_rq->rt_runtime_lock); | 10430 | raw_spin_unlock(&rt_rq->rt_runtime_lock); |
10431 | } | 10431 | } |
10432 | spin_unlock_irqrestore(&def_rt_bandwidth.rt_runtime_lock, flags); | 10432 | raw_spin_unlock_irqrestore(&def_rt_bandwidth.rt_runtime_lock, flags); |
10433 | 10433 | ||
10434 | return 0; | 10434 | return 0; |
10435 | } | 10435 | } |