login
Login
/
Register
Search
Search this site:
Forums
News
Blogs
Features
Site
Home
»
Mailing list archives
»
linux-kernel
»
2011
»
January
»
3
Re: [RFC][PATCH 12/17] sched: Also serialize ttwu_local() with p->pi_lock
view
thread
Previous message: [
thread
] [
date
] [
author
]
Next message: [
thread
] [
date
] [
author
]
[view in full thread]
From: Oleg Nesterov
Subject:
Re: [RFC][PATCH 12/17] sched: Also serialize ttwu_local() with p->pi_lock
Date: Monday, January 3, 2011 - 10:32 am
(add Tejun) On 12/24, Peter Zijlstra wrote:
quoted text
> > Since we now serialize ttwu() using p->pi_lock, we also need to > serialize ttwu_local() using that, otherwise, once we drop the > rq->lock from ttwu() it can race with ttwu_local(). > > Signed-off-by: Peter Zijlstra <a.p.zijlstra@chello.nl> > --- > kernel/sched.c | 28 +++++++++++++++++----------- > 1 file changed, 17 insertions(+), 11 deletions(-) > > Index: linux-2.6/kernel/sched.c > =================================================================== > --- linux-2.6.orig/kernel/sched.c > +++ linux-2.6/kernel/sched.c > @@ -2513,9 +2513,9 @@ static int try_to_wake_up(struct task_st > * try_to_wake_up_local - try to wake up a local task with rq lock held > * @p: the thread to be awakened > * > - * Put @p on the run-queue if it's not alredy there. The caller must > + * Put @p on the run-queue if it's not alredy there. The caller must > * ensure that this_rq() is locked, @p is bound to this_rq() and not > - * the current task. this_rq() stays locked over invocation. > + * the current task. > */ > static void try_to_wake_up_local(struct task_struct *p) > { > @@ -2523,16 +2523,21 @@ static void try_to_wake_up_local(struct > > BUG_ON(rq != this_rq()); > BUG_ON(p == current); > - lockdep_assert_held(&rq->lock); > + > + raw_spin_unlock(&rq->lock); > + raw_spin_lock(&p->pi_lock); > + raw_spin_lock(&rq->lock);
I _think_ this is safe, this worker can't change cpu afaics. But probably Tejun can take a look, just in case.
quoted text
> > if (!(p->state & TASK_NORMAL)) > - return; > + goto out; > > if (!p->on_rq) > activate_task(rq, p, ENQUEUE_WAKEUP); > > ttwu_post_activation(p, rq, 0); > ttwu_stat(rq, p, smp_processor_id(), 0); > +out: > + raw_spin_unlock(&p->pi_lock); > } > > /** > @@ -3925,6 +3930,7 @@ pick_next_task(struct rq *rq) > */ > asmlinkage void __sched schedule(void) > { > + struct task_struct *to_wakeup = NULL; > struct task_struct *prev, *next; > unsigned long *switch_count; > struct rq *rq; > @@ -3958,21 +3964,21 @@ asmlinkage void __sched schedule(void) > * task to maintain concurrency. If so, wake > * up the task. > */ > - if (prev->flags & PF_WQ_WORKER) { > - struct task_struct *to_wakeup; > - > + if (prev->flags & PF_WQ_WORKER) > to_wakeup = wq_worker_sleeping(prev, cpu); > - if (to_wakeup) > - try_to_wake_up_local(to_wakeup); > - } > deactivate_task(rq, prev, DEQUEUE_SLEEP); > prev->on_rq = 0; > } > switch_count = &prev->nvcsw; > } > > + /* > + * All three: try_to_wake_up_local(), pre_schedule() and idle_balance() > + * can drop rq->lock. > + */ > + if (to_wakeup) > + try_to_wake_up_local(to_wakeup); > pre_schedule(rq, prev); > - > if (unlikely(!rq->nr_running)) > idle_balance(cpu, rq); > > >
--
unsubscribe notice
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to
majordomo@vger.kernel.org
More majordomo info at
http://vger.kernel.org/majordomo-info.html
Please read the FAQ at
http://www.tux.org/lkml/
Previous message: [
thread
] [
date
] [
author
]
Next message: [
thread
] [
date
] [
author
]
Messages in current thread:
[RFC][PATCH 00/17] sched: Reduce runqueue lock contention -v3
, Peter Zijlstra
, (Fri Dec 24, 5:23 am)
[RFC][PATCH 02/17] mutex: Use p->on_cpu for the adaptive spin
, Peter Zijlstra
, (Fri Dec 24, 5:23 am)
[RFC][PATCH 03/17] sched: Change the ttwu success details
, Peter Zijlstra
, (Fri Dec 24, 5:23 am)
[RFC][PATCH 04/17] sched: Clean up ttwu stats
, Peter Zijlstra
, (Fri Dec 24, 5:23 am)
[RFC][PATCH 05/17] x86: Optimize arch_spin_unlock_wait()
, Peter Zijlstra
, (Fri Dec 24, 5:23 am)
[RFC][PATCH 06/17] sched: Provide p->on_rq
, Peter Zijlstra
, (Fri Dec 24, 5:23 am)
[RFC][PATCH 07/17] sched: Serialize p->cpus_allowed and tt ...
, Peter Zijlstra
, (Fri Dec 24, 5:23 am)
[RFC][PATCH 08/17] sched: Drop the rq argument to sched_cl ...
, Peter Zijlstra
, (Fri Dec 24, 5:23 am)
[RFC][PATCH 11/17] sched: Delay task_contributes_to_load()
, Peter Zijlstra
, (Fri Dec 24, 5:23 am)
[RFC][PATCH 12/17] sched: Also serialize ttwu_local() with ...
, Peter Zijlstra
, (Fri Dec 24, 5:23 am)
[RFC][PATCH 13/17] sched: Remove rq->lock from the first h ...
, Peter Zijlstra
, (Fri Dec 24, 5:23 am)
[RFC][PATCH 14/17] sched: Remove rq argument to ttwu_stat()
, Peter Zijlstra
, (Fri Dec 24, 5:23 am)
[RFC][PATCH 15/17] sched: Rename ttwu_post_activation
, Peter Zijlstra
, (Fri Dec 24, 5:23 am)
[RFC][PATCH 16/17] sched: Move the second half of ttwu() t ...
, Peter Zijlstra
, (Fri Dec 24, 5:23 am)
[RFC][PATCH 17/17] sched: Sort hotplug vs ttwu queueing
, Peter Zijlstra
, (Fri Dec 24, 5:23 am)
Re: [RFC][PATCH 00/17] sched: Reduce runqueue lock content ...
, Peter Zijlstra
, (Fri Dec 24, 6:15 am)
Re: [RFC][PATCH 05/17] x86: Optimize arch_spin_unlock_wait()
, Linus Torvalds
, (Fri Dec 24, 11:26 am)
Re: [RFC][PATCH 06/17] sched: Provide p->on_rq
, Yong Zhang
, (Wed Dec 29, 7:14 am)
Re: [RFC][PATCH 07/17] sched: Serialize p->cpus_allowed an ...
, Yong Zhang
, (Wed Dec 29, 7:20 am)
Re: [RFC][PATCH 08/17] sched: Drop the rq argument to sche ...
, Yong Zhang
, (Wed Dec 29, 7:31 am)
Re: [RFC][PATCH 14/17] sched: Remove rq argument to ttwu_s ...
, Yong Zhang
, (Wed Dec 29, 7:40 am)
Re: [RFC][PATCH 17/17] sched: Sort hotplug vs ttwu queueing
, Yong Zhang
, (Wed Dec 29, 7:51 am)
Re: [RFC][PATCH 07/17] sched: Serialize p->cpus_allowed an ...
, Peter Zijlstra
, (Mon Jan 3, 4:12 am)
Re: [RFC][PATCH 08/17] sched: Drop the rq argument to sche ...
, Peter Zijlstra
, (Mon Jan 3, 4:16 am)
Re: [RFC][PATCH 14/17] sched: Remove rq argument to ttwu_s ...
, Peter Zijlstra
, (Mon Jan 3, 4:20 am)
Re: [RFC][PATCH 17/17] sched: Sort hotplug vs ttwu queueing
, Peter Zijlstra
, (Mon Jan 3, 4:21 am)
Re: [RFC][PATCH 05/17] x86: Optimize arch_spin_unlock_wait()
, Peter Zijlstra
, (Mon Jan 3, 4:32 am)
[RFC][PATCH] sembench: add stddev to the burn stats
, Peter Zijlstra
, (Mon Jan 3, 7:36 am)
Re: [RFC][PATCH 08/17] sched: Drop the rq argument to sche ...
, Oleg Nesterov
, (Mon Jan 3, 7:59 am)
Re: [RFC][PATCH 08/17] sched: Drop the rq argument to sche ...
, Peter Zijlstra
, (Mon Jan 3, 8:21 am)
Re: [RFC][PATCH 08/17] sched: Drop the rq argument to sche ...
, Oleg Nesterov
, (Mon Jan 3, 8:49 am)
Re: [RFC][PATCH 08/17] sched: Drop the rq argument to sche ...
, Peter Zijlstra
, (Mon Jan 3, 9:35 am)
Re: [RFC][PATCH 08/17] sched: Drop the rq argument to sche ...
, Peter Zijlstra
, (Mon Jan 3, 9:41 am)
Re: [RFC][PATCH 12/17] sched: Also serialize ttwu_local() ...
, Oleg Nesterov
, (Mon Jan 3, 10:32 am)
Re: [RFC][PATCH 08/17] sched: Drop the rq argument to sche ...
, Oleg Nesterov
, (Mon Jan 3, 11:05 am)
Re: [RFC][PATCH 08/17] sched: Drop the rq argument to sche ...
, Yong Zhang
, (Mon Jan 3, 10:59 pm)
Re: [RFC][PATCH 05/17] x86: Optimize arch_spin_unlock_wait()
, Nick Piggin
, (Mon Jan 3, 11:45 pm)
Re: [RFC][PATCH 08/17] sched: Drop the rq argument to sche ...
, Yong Zhang
, (Tue Jan 4, 12:27 am)
Re: [RFC][PATCH 08/17] sched: Drop the rq argument to sche ...
, Peter Zijlstra
, (Tue Jan 4, 5:34 am)
Re: [RFC][PATCH 08/17] sched: Drop the rq argument to sche ...
, Peter Zijlstra
, (Tue Jan 4, 6:00 am)
Re: [RFC][PATCH 08/17] sched: Drop the rq argument to sche ...
, Peter Zijlstra
, (Tue Jan 4, 6:01 am)
Re: [RFC][PATCH 16/17] sched: Move the second half of ttwu ...
, Oleg Nesterov
, (Tue Jan 4, 7:28 am)
Re: [RFC][PATCH 16/17] sched: Move the second half of ttwu ...
, Peter Zijlstra
, (Tue Jan 4, 7:47 am)
Re: [RFC][PATCH 16/17] sched: Move the second half of ttwu ...
, Oleg Nesterov
, (Tue Jan 4, 8:18 am)
Re: [RFC][PATCH 16/17] sched: Move the second half of ttwu ...
, Peter Zijlstra
, (Tue Jan 4, 8:43 am)
Re: [RFC][PATCH 16/17] sched: Move the second half of ttwu ...
, Oleg Nesterov
, (Tue Jan 4, 9:06 am)
Navigation
Mailing list archives
Recent posts
Popular discussions
linux-kernel
:
Greg Kroah-Hartman
[PATCH 041/196] kobject: add kobject_init_and_add function
Lukas Hejtmanek
Re: Another libata error related to OCZ SSD
Greg Kroah-Hartman
[PATCH 023/196] MCP_UCB1200: Convert from class_device to device
Florian Fainelli
Re: System clock runs too fast after 2.6.27 -> 2.6.28.1 upgrade
Christoph Lameter
[patch 1/4] mmu_notifier: Core code
git
:
Johannes Schindelin
Re: [PATCH 1/2] Add strbuf_initf()
John Bito
[EGIT] Push to GitHub caused corruption
Jakub Narebski
Re: [PATCH 0/2] gitweb: patch view
Junio C Hamano
Re: [PATCH] When a remote is added but not fetched, tell the user.
Andy Parkins
Re: [RFC] Submodules in GIT
git-commits-head
:
Linux Kernel Mailing List
ahci: Workaround HW bug for SB600/700 SATA controller PMP support
Linux Kernel Mailing List
V4L/DVB (11086): au0828: rename macro for currently non-function VBI support
Linux Kernel Mailing List
ceph: client types
Linux Kernel Mailing List
ceph: on-wire types
Linux Kernel Mailing List
crypto: chainiv - Use kcrypto_wq instead of keventd_wq
linux-netdev
:
Andrew Morton
Re: [Bugme-new] [Bug 14969] New: b44: WOL does not work in suspended state
Giuseppe CAVALLARO
Re: [PATCH 03/13] stmmac: add the new Header file for stmmac platform data
Taku Izumi
[PATCH 3/3] ixgbe: add registers etc. printout code just before resetting adapters
Eric Dumazet
rps: some comments
Thomas Gleixner
Re: [RFC PATCH 02/12] On Tue, 23 Sep 2008, David Miller wrote:
openbsd-misc
:
Stephan Andreas
problems with login after xlock in OpenBSD release 4.7
pmc
Make A Change. Alcoholism and Drug Addiction Treatment
ropers
Re: what exactly is enc0?
Fuad NAHDI
Re: What does your environment look like?
Matthew Szudzik
Typo on OpenBSD 4.4 CD Set
Colocation donated by:
Syndicate