Add stable 3.0.8
svn path=/dists/sid/linux-2.6/; revision=18177
This commit is contained in:
parent
a58a90dfd3
commit
ef3e66f739
|
@ -12,9 +12,20 @@ linux-2.6 (3.0.0-6) UNRELEASED; urgency=low
|
|||
http://www.kernel.org/pub/linux/kernel/v3.0/ChangeLog-3.0.7
|
||||
|
||||
[ Ben Hutchings ]
|
||||
* cputimer: Cure lock inversion
|
||||
* [powerpc] Change ATA, PATA_MACIO from module to built-in (Closes: #641210)
|
||||
* [powerpc] Change IDE, IDE_GD from built-in to module
|
||||
* Add stable 3.0.8, including:
|
||||
- cputimer: Cure lock inversion
|
||||
- drm/ttm: ensure ttm for new node is bound before calling move_notify()
|
||||
- drm/ttm: unbind ttm before destroying node in accel move cleanup
|
||||
- CIFS: Fix ERR_PTR dereference in cifs_get_root
|
||||
- xfs: start periodic workers later
|
||||
- mm: fix race between mremap and removing migration entry
|
||||
- x25: Prevent skb overreads when checking call user data
|
||||
- crypto: ghash - Avoid null pointer dereference if no key is set
|
||||
- hfsplus: Fix kfree of wrong pointers in hfsplus_fill_super() error path
|
||||
For the complete list of changes, see:
|
||||
http://www.kernel.org/pub/linux/kernel/v3.0/ChangeLog-3.0.8
|
||||
|
||||
-- Uwe Kleine-König <u.kleine-koenig@pengutronix.de> Fri, 07 Oct 2011 15:48:22 +0200
|
||||
|
||||
|
|
|
@ -1,81 +0,0 @@
|
|||
From: Peter Zijlstra <a.p.zijlstra@chello.nl>
|
||||
Date: Mon, 17 Oct 2011 11:50:30 +0200
|
||||
Subject: [PATCH] cputimer: Cure lock inversion
|
||||
|
||||
commit bcd5cff7216f9b2de0a148cc355eac199dc6f1cf upstream.
|
||||
|
||||
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>
|
||||
Signed-off-by: Peter Zijlstra <a.p.zijlstra@chello.nl>
|
||||
Cc: stable@kernel.org
|
||||
Cc: Linus Torvalds <torvalds@linux-foundation.org>
|
||||
Cc: Martin Schwidefsky <schwidefsky@de.ibm.com>
|
||||
Link: http://lkml.kernel.org/r/1318928713.21167.4.camel@twins
|
||||
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
|
||||
---
|
||||
kernel/posix-cpu-timers.c | 7 ++++---
|
||||
1 files changed, 4 insertions(+), 3 deletions(-)
|
||||
|
||||
diff --git a/kernel/posix-cpu-timers.c b/kernel/posix-cpu-timers.c
|
||||
index c8008dd..640ded8 100644
|
||||
--- a/kernel/posix-cpu-timers.c
|
||||
+++ b/kernel/posix-cpu-timers.c
|
||||
@@ -274,9 +274,7 @@ void thread_group_cputimer(struct task_struct *tsk, struct task_cputime *times)
|
||||
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_struct *tsk, struct task_cputime *times)
|
||||
* 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);
|
||||
}
|
||||
--
|
||||
1.7.7
|
||||
|
File diff suppressed because it is too large
Load Diff
|
@ -1,2 +1,3 @@
|
|||
+ bugfix/all/stable/3.0.7.patch
|
||||
+ bugfix/all/cputimer-Cure-lock-inversion.patch
|
||||
- bugfix/all/uvcvideo-Fix-crash-when-linking-entities.patch
|
||||
+ bugfix/all/stable/3.0.8.patch
|
||||
|
|
Loading…
Reference in New Issue