Update to upstream HEAD (v3.1-rc10-42-g2efd7c0).
This commit is contained in:
parent
62a1a480d4
commit
65b0d9b17d
@ -1,73 +0,0 @@
|
||||
Subject: cputimer: Cure lock inversion
|
||||
From: Peter Zijlstra <a.p.zijlstra@chello.nl>
|
||||
Date: Mon Oct 17 11:50:30 CEST 2011
|
||||
|
||||
There's a lock inversion between the cputimer->lock and rq->lock; notably
|
||||
the two callchains involved are:
|
||||
|
||||
update_rlimit_cpu()
|
||||
sighand->siglock
|
||||
set_process_cpu_timer()
|
||||
cpu_timer_sample_group()
|
||||
thread_group_cputimer()
|
||||
cputimer->lock
|
||||
thread_group_cputime()
|
||||
task_sched_runtime()
|
||||
->pi_lock
|
||||
rq->lock
|
||||
|
||||
scheduler_tick()
|
||||
rq->lock
|
||||
task_tick_fair()
|
||||
update_curr()
|
||||
account_group_exec()
|
||||
cputimer->lock
|
||||
|
||||
Where the first one is enabling a CLOCK_PROCESS_CPUTIME_ID timer, and
|
||||
the second one is keeping up-to-date.
|
||||
|
||||
This problem was introduced by e8abccb7193 ("posix-cpu-timers: Cure
|
||||
SMP accounting oddities").
|
||||
|
||||
Cure the problem by removing the cputimer->lock and rq->lock nesting,
|
||||
this leaves concurrent enablers doing duplicate work, but the time
|
||||
wasted should be on the same order otherwise wasted spinning on the
|
||||
lock and the greater-than assignment filter should ensure we preserve
|
||||
monotonicity.
|
||||
|
||||
Reported-by: Dave Jones <davej@redhat.com>
|
||||
Reported-by: Simon Kirby <sim@hostway.ca>
|
||||
Cc: stable@kernel.org
|
||||
Cc: Thomas Gleixner <tglx@linutronix.de>
|
||||
Signed-off-by: Peter Zijlstra <a.p.zijlstra@chello.nl>
|
||||
---
|
||||
kernel/posix-cpu-timers.c | 7 ++++---
|
||||
1 file changed, 4 insertions(+), 3 deletions(-)
|
||||
Index: linux-2.6/kernel/posix-cpu-timers.c
|
||||
===================================================================
|
||||
--- linux-2.6.orig/kernel/posix-cpu-timers.c
|
||||
+++ linux-2.6/kernel/posix-cpu-timers.c
|
||||
@@ -274,9 +274,7 @@ void thread_group_cputimer(struct task_s
|
||||
struct task_cputime sum;
|
||||
unsigned long flags;
|
||||
|
||||
- spin_lock_irqsave(&cputimer->lock, flags);
|
||||
if (!cputimer->running) {
|
||||
- cputimer->running = 1;
|
||||
/*
|
||||
* The POSIX timer interface allows for absolute time expiry
|
||||
* values through the TIMER_ABSTIME flag, therefore we have
|
||||
@@ -284,8 +282,11 @@ void thread_group_cputimer(struct task_s
|
||||
* it.
|
||||
*/
|
||||
thread_group_cputime(tsk, &sum);
|
||||
+ spin_lock_irqsave(&cputimer->lock, flags);
|
||||
+ cputimer->running = 1;
|
||||
update_gt_cputime(&cputimer->cputime, &sum);
|
||||
- }
|
||||
+ } else
|
||||
+ spin_lock_irqsave(&cputimer->lock, flags);
|
||||
*times = cputimer->cputime;
|
||||
spin_unlock_irqrestore(&cputimer->lock, flags);
|
||||
}
|
||||
|
11
kernel.spec
11
kernel.spec
@ -84,7 +84,7 @@ Summary: The Linux kernel
|
||||
# The rc snapshot level
|
||||
%define rcrev 10
|
||||
# The git snapshot level
|
||||
%define gitrev 0
|
||||
%define gitrev 1
|
||||
# Set rpm version accordingly
|
||||
%define rpmversion 3.%{upstream_sublevel}.0
|
||||
%endif
|
||||
@ -749,9 +749,6 @@ Patch21002: mmc-Always-check-for-lower-base-frequency-quirk-for-.patch
|
||||
Patch21020: 0001-mm-vmscan-Limit-direct-reclaim-for-higher-order-allo.patch
|
||||
Patch21021: 0002-mm-Abort-reclaim-compaction-if-compaction-can-procee.patch
|
||||
|
||||
# rhbz #746485
|
||||
Patch21030: cputimer-cure-lock-inversion.patch
|
||||
|
||||
%endif
|
||||
|
||||
BuildRoot: %{_tmppath}/kernel-%{KVERREL}-root
|
||||
@ -1379,9 +1376,6 @@ ApplyPatch utrace.patch
|
||||
ApplyPatch 0001-mm-vmscan-Limit-direct-reclaim-for-higher-order-allo.patch
|
||||
ApplyPatch 0002-mm-Abort-reclaim-compaction-if-compaction-can-procee.patch
|
||||
|
||||
# rhbz #746485
|
||||
ApplyPatch cputimer-cure-lock-inversion.patch
|
||||
|
||||
# END OF PATCH APPLICATIONS
|
||||
|
||||
%endif
|
||||
@ -2090,8 +2084,9 @@ fi
|
||||
# ||----w |
|
||||
# || ||
|
||||
%changelog
|
||||
* Fri Oct 21 2011 Chuck Ebbert <cebbert@redhat.com>
|
||||
* Fri Oct 21 2011 Chuck Ebbert <cebbert@redhat.com> 3.1.0-0.rc10.git1.1
|
||||
- Require grubby >= 8.3-1 like F16 does.
|
||||
- Update to upstream HEAD (v3.1-rc10-42-g2efd7c0).
|
||||
|
||||
* Fri Oct 21 2011 Dave Jones <davej@redhat.com>
|
||||
- Lower severity of Radeon lockup messages.
|
||||
|
Loading…
Reference in New Issue
Block a user