projects
/
platform
/
kernel
/
linux-rpi.git
/ commitdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
| commitdiff |
tree
raw
|
patch
| inline |
side by side
(parent:
bb65f50
)
powerpc/mpc85xx: call k(un)map_atomic rather than k(un)map
author
Yanjiang Jin
<yanjiang.jin@windriver.com>
Mon, 2 Mar 2015 08:35:35 +0000
(16:35 +0800)
committer
Scott Wood
<scottwood@freescale.com>
Wed, 1 Apr 2015 03:23:19 +0000
(22:23 -0500)
The k(un)map function may be called in atomic context in the
function map_and_flush(), so use k(un)map_atomic to replace it,
else we would get the below warning during kdump:
BUG: sleeping function called from invalid context at include/linux/highmem.h:58
in_atomic(): 1, irqs_disabled(): 1, pid: 736, name: sh
INFO: lockdep is turned off.
irq event stamp: 0
hardirqs last enabled at (0): [< (null)>] (null)
hardirqs last disabled at (0): [<
c000000000066d1c
>] .copy_process.part.44+0x50c/0x1360
softirqs last enabled at (0): [<
c000000000066d1c
>] .copy_process.part.44+0x50c/0x1360
softirqs last disabled at (0): [< (null)>] (null)
CPU: 1 PID: 736 Comm: sh Tainted: G D W 3.10.62-ltsi-WR6.0.0.0_standard #2
Call Trace:
[
c0000000f47cf120
] [
c00000000000b150
] .show_stack+0x170/0x290 (unreliable)
[
c0000000f47cf210
] [
c000000000b71334
] .dump_stack+0x28/0x3c
[
c0000000f47cf280
] [
c0000000000bb5d8
] .__might_sleep+0x1a8/0x270
[
c0000000f47cf310
] [
c0000000000440cc
] .map_and_flush+0x4c/0xc0
[
c0000000f47cf390
] [
c0000000000441cc
] .mpc85xx_smp_machine_kexec+0x8c/0xec0
[
c0000000f47cf420
] [
c00000000002ae00
] .machine_kexec+0x60/0x90
[
c0000000f47cf4b0
] [
c00000000010957c
] .crash_kexec+0x8c/0x100
[
c0000000f47cf6a0
] [
c000000000015df8
] .die+0x348/0x450
[
c0000000f47cf740
] [
c00000000002f3a0
] .bad_page_fault+0xe0/0x130
[
c0000000f47cf7c0
] [
c00000000001f3e4
] storage_fault_common+0x40/0x44
Signed-off-by: Yanjiang Jin <yanjiang.jin@windriver.com>
[scottwood@freescale.com: fix subject line]
Signed-off-by: Scott Wood <scottwood@freescale.com>
arch/powerpc/platforms/85xx/smp.c
patch
|
blob
|
history
diff --git
a/arch/powerpc/platforms/85xx/smp.c
b/arch/powerpc/platforms/85xx/smp.c
index d7c1e69f30702f941180f285df6290ecf7ff75ae..8631ac5f0e579c35ffa4ac2153e237be908a8817 100644
(file)
--- a/
arch/powerpc/platforms/85xx/smp.c
+++ b/
arch/powerpc/platforms/85xx/smp.c
@@
-360,10
+360,10
@@
static void mpc85xx_smp_kexec_down(void *arg)
static void map_and_flush(unsigned long paddr)
{
struct page *page = pfn_to_page(paddr >> PAGE_SHIFT);
- unsigned long kaddr = (unsigned long)kmap(page);
+ unsigned long kaddr = (unsigned long)kmap
_atomic
(page);
flush_dcache_range(kaddr, kaddr + PAGE_SIZE);
- kunmap
(page
);
+ kunmap
_atomic((void *)kaddr
);
}
/**