From: Christoph Lameter <clameter@sgi.com>
To: akpm@osdl.org
Cc: Peter Williams <pwil3058@bigpond.net.au>,
linux-kernel@vger.kernel.org,
Nick Piggin <nickpiggin@yahoo.com.au>,
Christoph Lameter <clameter@sgi.com>,
KAMEZAWA Hiroyuki <kamezawa.hiroyu@jp.fujitsu.com>,
Dave Chinner <dgc@sgi.com>, Ingo Molnar <mingo@elte.hu>,
"Siddha, Suresh B" <suresh.b.siddha@intel.com>
Subject: [PATCH 1/5] Disable interrupts for locking in load_balance()
Date: Tue, 24 Oct 2006 11:31:09 -0700 (PDT) [thread overview]
Message-ID: <20061024183109.4530.3647.sendpatchset@schroedinger.engr.sgi.com> (raw)
In-Reply-To: <20061024183104.4530.29183.sendpatchset@schroedinger.engr.sgi.com>
scheduler: Disable interrupts for locking in load_balance()
Interrupts must be disabled for request queue locks if we want
to run load_balance() with interrupts enabled.
Signed-off-by: Christoph Lameter <clameter@sgi.com>
Index: linux-2.6.19-rc2-mm2/kernel/sched.c
===================================================================
--- linux-2.6.19-rc2-mm2.orig/kernel/sched.c 2006-10-23 19:35:19.615025838 -0500
+++ linux-2.6.19-rc2-mm2/kernel/sched.c 2006-10-23 19:36:26.208865512 -0500
@@ -2530,8 +2530,6 @@ static inline unsigned long minus_1_or_z
/*
* Check this_cpu to ensure it is balanced within domain. Attempt to move
* tasks if there is an imbalance.
- *
- * Called with this_rq unlocked.
*/
static int load_balance(int this_cpu, struct rq *this_rq,
struct sched_domain *sd, enum idle_type idle)
@@ -2541,6 +2539,7 @@ static int load_balance(int this_cpu, st
unsigned long imbalance;
struct rq *busiest;
cpumask_t cpus = CPU_MASK_ALL;
+ unsigned long flags;
/*
* When power savings policy is enabled for the parent domain, idle
@@ -2580,11 +2579,13 @@ redo:
* still unbalanced. nr_moved simply stays zero, so it is
* correctly treated as an imbalance.
*/
+ local_irq_save(flags);
double_rq_lock(this_rq, busiest);
nr_moved = move_tasks(this_rq, this_cpu, busiest,
minus_1_or_zero(busiest->nr_running),
imbalance, sd, idle, &all_pinned);
double_rq_unlock(this_rq, busiest);
+ local_irq_restore(flags);
/* All tasks on this runqueue were pinned by CPU affinity */
if (unlikely(all_pinned)) {
@@ -2601,13 +2602,13 @@ redo:
if (unlikely(sd->nr_balance_failed > sd->cache_nice_tries+2)) {
- spin_lock(&busiest->lock);
+ spin_lock_irqsave(&busiest->lock, flags);
/* don't kick the migration_thread, if the curr
* task on busiest cpu can't be moved to this_cpu
*/
if (!cpu_isset(this_cpu, busiest->curr->cpus_allowed)) {
- spin_unlock(&busiest->lock);
+ spin_unlock_irqrestore(&busiest->lock, flags);
all_pinned = 1;
goto out_one_pinned;
}
@@ -2617,7 +2618,7 @@ redo:
busiest->push_cpu = this_cpu;
active_balance = 1;
}
- spin_unlock(&busiest->lock);
+ spin_unlock_irqrestore(&busiest->lock, flags);
if (active_balance)
wake_up_process(busiest->migration_thread);
next prev parent reply other threads:[~2006-10-24 18:31 UTC|newest]
Thread overview: 19+ messages / expand[flat|nested] mbox.gz Atom feed top
2006-10-24 18:31 [PATCH 0/5] On demand sched_domain balancing in tasklet Christoph Lameter
2006-10-24 18:31 ` Christoph Lameter [this message]
2006-10-24 18:31 ` [PATCH 2/5] Extract load calculation from rebalance_tick Christoph Lameter
2006-10-26 12:03 ` Nick Piggin
2006-10-26 16:12 ` Christoph Lameter
2006-10-24 18:31 ` [PATCH 3/5] Use next_balance instead of last_balance Christoph Lameter
2006-10-26 12:13 ` Nick Piggin
2006-10-26 12:32 ` Nick Piggin
2006-10-26 16:44 ` Christoph Lameter
2006-10-26 17:13 ` Nick Piggin
2006-10-26 18:17 ` Christoph Lameter
2006-10-24 18:31 ` [PATCH 4/5] Create rebalance_domains from rebalance_tick Christoph Lameter
2006-10-26 12:19 ` Nick Piggin
2006-10-26 16:19 ` Christoph Lameter
2006-10-24 18:31 ` [PATCH 5/5] Only call rebalance_domains when needed from scheduler_tick Christoph Lameter
2006-10-26 12:26 ` Nick Piggin
2006-10-26 16:24 ` Christoph Lameter
2006-10-26 17:12 ` Nick Piggin
2006-10-26 18:13 ` Christoph Lameter
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20061024183109.4530.3647.sendpatchset@schroedinger.engr.sgi.com \
--to=clameter@sgi.com \
--cc=akpm@osdl.org \
--cc=dgc@sgi.com \
--cc=kamezawa.hiroyu@jp.fujitsu.com \
--cc=linux-kernel@vger.kernel.org \
--cc=mingo@elte.hu \
--cc=nickpiggin@yahoo.com.au \
--cc=pwil3058@bigpond.net.au \
--cc=suresh.b.siddha@intel.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.