From: Greg Kroah-Hartman Date: Fri, 19 Jul 2013 00:56:20 +0000 (-0700) Subject: 3.0-stable patches X-Git-Tag: v3.9.11~5 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=e1eeec605fcf8fbf4f916f264312619a207eb68c;p=thirdparty%2Fkernel%2Fstable-queue.git 3.0-stable patches added patches: arm-7765-1-perf-record-the-user-mode-pc-in-the-call-chain.patch drivers-dma-pl330.c-fix-locking-in-pl330_free_chan_resources.patch --- diff --git a/queue-3.0/arm-7765-1-perf-record-the-user-mode-pc-in-the-call-chain.patch b/queue-3.0/arm-7765-1-perf-record-the-user-mode-pc-in-the-call-chain.patch new file mode 100644 index 00000000000..efba9461133 --- /dev/null +++ b/queue-3.0/arm-7765-1-perf-record-the-user-mode-pc-in-the-call-chain.patch @@ -0,0 +1,35 @@ +From c5f927a6f62196226915f12194c9d0df4e2210d7 Mon Sep 17 00:00:00 2001 +From: Jed Davis +Date: Thu, 20 Jun 2013 10:16:29 +0100 +Subject: ARM: 7765/1: perf: Record the user-mode PC in the call chain. + +From: Jed Davis + +commit c5f927a6f62196226915f12194c9d0df4e2210d7 upstream. + +With this change, we no longer lose the innermost entry in the user-mode +part of the call chain. See also the x86 port, which includes the ip. + +It's possible to partially work around this problem by post-processing +the data to use the PERF_SAMPLE_IP value, but this works only if the CPU +wasn't in the kernel when the sample was taken. + +Signed-off-by: Jed Davis +Signed-off-by: Will Deacon +Signed-off-by: Russell King +Signed-off-by: Greg Kroah-Hartman + +--- + arch/arm/kernel/perf_event.c | 1 + + 1 file changed, 1 insertion(+) + +--- a/arch/arm/kernel/perf_event.c ++++ b/arch/arm/kernel/perf_event.c +@@ -741,6 +741,7 @@ perf_callchain_user(struct perf_callchai + struct frame_tail __user *tail; + + ++ perf_callchain_store(entry, regs->ARM_pc); + tail = (struct frame_tail __user *)regs->ARM_fp - 1; + + while ((entry->nr < PERF_MAX_STACK_DEPTH) && diff --git a/queue-3.0/drivers-dma-pl330.c-fix-locking-in-pl330_free_chan_resources.patch b/queue-3.0/drivers-dma-pl330.c-fix-locking-in-pl330_free_chan_resources.patch new file mode 100644 index 00000000000..38e34d3a57f --- /dev/null +++ b/queue-3.0/drivers-dma-pl330.c-fix-locking-in-pl330_free_chan_resources.patch @@ -0,0 +1,68 @@ +From da331ba8e9c5de72a27e50f71105395bba6eebe0 Mon Sep 17 00:00:00 2001 +From: Bartlomiej Zolnierkiewicz +Date: Wed, 3 Jul 2013 15:00:43 -0700 +Subject: drivers/dma/pl330.c: fix locking in pl330_free_chan_resources() + +From: Bartlomiej Zolnierkiewicz + +commit da331ba8e9c5de72a27e50f71105395bba6eebe0 upstream. + +tasklet_kill() may sleep so call it before taking pch->lock. + +Fixes following lockup: + + BUG: scheduling while atomic: cat/2383/0x00000002 + Modules linked in: + unwind_backtrace+0x0/0xfc + __schedule_bug+0x4c/0x58 + __schedule+0x690/0x6e0 + sys_sched_yield+0x70/0x78 + tasklet_kill+0x34/0x8c + pl330_free_chan_resources+0x24/0x88 + dma_chan_put+0x4c/0x50 + [...] + BUG: spinlock lockup suspected on CPU#0, swapper/0/0 + lock: 0xe52aa04c, .magic: dead4ead, .owner: cat/2383, .owner_cpu: 1 + unwind_backtrace+0x0/0xfc + do_raw_spin_lock+0x194/0x204 + _raw_spin_lock_irqsave+0x20/0x28 + pl330_tasklet+0x2c/0x5a8 + tasklet_action+0xfc/0x114 + __do_softirq+0xe4/0x19c + irq_exit+0x98/0x9c + handle_IPI+0x124/0x16c + gic_handle_irq+0x64/0x68 + __irq_svc+0x40/0x70 + cpuidle_wrap_enter+0x4c/0xa0 + cpuidle_enter_state+0x18/0x68 + cpuidle_idle_call+0xac/0xe0 + cpu_idle+0xac/0xf0 + +Signed-off-by: Bartlomiej Zolnierkiewicz +Signed-off-by: Kyungmin Park +Acked-by: Jassi Brar +Cc: Vinod Koul +Cc: Tomasz Figa +Signed-off-by: Andrew Morton +Signed-off-by: Linus Torvalds +Signed-off-by: Greg Kroah-Hartman + +--- + drivers/dma/pl330.c | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +--- a/drivers/dma/pl330.c ++++ b/drivers/dma/pl330.c +@@ -281,10 +281,10 @@ static void pl330_free_chan_resources(st + struct dma_pl330_chan *pch = to_pchan(chan); + unsigned long flags; + +- spin_lock_irqsave(&pch->lock, flags); +- + tasklet_kill(&pch->task); + ++ spin_lock_irqsave(&pch->lock, flags); ++ + pl330_release_channel(pch->pl330_chid); + pch->pl330_chid = NULL; + diff --git a/queue-3.0/series b/queue-3.0/series index 2e7e9ebacdc..ce429ebd4e2 100644 --- a/queue-3.0/series +++ b/queue-3.0/series @@ -14,3 +14,5 @@ ahci-remove-pmp-link-online-check-in-fbs-eh.patch timer-fix-jiffies-wrap-behavior-of-round_jiffies_common.patch ext4-fix-data-offset-overflow-in-ext4_xattr_fiemap-on-32-bit-archs.patch ext4-fix-overflow-when-counting-used-blocks-on-32-bit-architectures.patch +arm-7765-1-perf-record-the-user-mode-pc-in-the-call-chain.patch +drivers-dma-pl330.c-fix-locking-in-pl330_free_chan_resources.patch