Patchwork [3.5.y.z,extended,stable] Patch "sched/rt: Use root_domain of rt_rq not current processor" has been added to staging queue

mail settings
Submitter Herton Ronaldo Krzesinski
Date Feb. 12, 2013, 9:17 p.m.
Message ID <>
Download mbox | patch
Permalink /patch/219958/
State New
Headers show


Herton Ronaldo Krzesinski - Feb. 12, 2013, 9:17 p.m.
This is a note to let you know that I have just added a patch titled

    sched/rt: Use root_domain of rt_rq not current processor

to the linux-3.5.y-queue branch of the 3.5.y.z extended stable tree 
which can be found at:;a=shortlog;h=refs/heads/linux-3.5.y-queue

If you, or anyone else, feels it should not be added to this tree, please 
reply to this email.

For more information about the 3.5.y.z tree, see



From 19be79ad04de970ea0ec2f1cb2693dac0e607b2d Mon Sep 17 00:00:00 2001
From: Shawn Bohrer <>
Date: Mon, 14 Jan 2013 11:55:31 -0600
Subject: [PATCH] sched/rt: Use root_domain of rt_rq not current processor

commit aa7f67304d1a03180f463258aa6f15a8b434e77d upstream.

When the system has multiple domains do_sched_rt_period_timer()
can run on any CPU and may iterate over all rt_rq in
cpu_online_mask.  This means when balance_runtime() is run for a
given rt_rq that rt_rq may be in a different rd than the current
processor.  Thus if we use smp_processor_id() to get rd in
do_balance_runtime() we may borrow runtime from a rt_rq that is
not part of our rd.

This changes do_balance_runtime to get the rd from the passed in
rt_rq ensuring that we borrow runtime only from the correct rd
for the given rt_rq.

This fixes a BUG at kernel/sched/rt.c:687! in __disable_runtime
when we try reclaim runtime lent to other rt_rq but runtime has
been lent to a rt_rq in another rd.

Signed-off-by: Shawn Bohrer <>
Acked-by: Steven Rostedt <>
Acked-by: Mike Galbraith <>
Signed-off-by: Ingo Molnar <>
Signed-off-by: Herton Ronaldo Krzesinski <>
 kernel/sched/rt.c |    2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)



diff --git a/kernel/sched/rt.c b/kernel/sched/rt.c
index 573e1ca..2a05e56 100644
--- a/kernel/sched/rt.c
+++ b/kernel/sched/rt.c
@@ -566,7 +566,7 @@  static inline struct rt_bandwidth *sched_rt_bandwidth(struct rt_rq *rt_rq)
 static int do_balance_runtime(struct rt_rq *rt_rq)
 	struct rt_bandwidth *rt_b = sched_rt_bandwidth(rt_rq);
-	struct root_domain *rd = cpu_rq(smp_processor_id())->rd;
+	struct root_domain *rd = rq_of_rt_rq(rt_rq)->rd;
 	int i, weight, more = 0;
 	u64 rt_period;