summaryrefslogtreecommitdiffstats
path: root/arch
diff options
context:
space:
mode:
authorMika Westerberg <mika.westerberg@iki.fi>2010-04-13 08:01:46 +0200
committerRussell King <rmk+kernel@arm.linux.org.uk>2010-04-14 12:11:31 +0200
commit3f2d4f561fab4588344cc519fd323382ab950928 (patch)
tree8998ed2d054db2e446532507d9c742cfbc289502 /arch
parentARM: 6051/1: VFP: preserve the HW context when calling signal handlers (diff)
downloadlinux-3f2d4f561fab4588344cc519fd323382ab950928.tar.xz
linux-3f2d4f561fab4588344cc519fd323382ab950928.zip
ARM: 6052/1: kdump: make kexec work in interrupt context
When crash happens in interrupt context there is no userspace context. We always use current->active_mm in those cases. Signed-off-by: Mika Westerberg <ext-mika.1.westerberg@nokia.com> Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
Diffstat (limited to 'arch')
-rw-r--r--arch/arm/mm/mmu.c10
1 files changed, 6 insertions, 4 deletions
diff --git a/arch/arm/mm/mmu.c b/arch/arm/mm/mmu.c
index 4223d086aa17..241c24a1c18f 100644
--- a/arch/arm/mm/mmu.c
+++ b/arch/arm/mm/mmu.c
@@ -1054,10 +1054,12 @@ void setup_mm_for_reboot(char mode)
pgd_t *pgd;
int i;
- if (current->mm && current->mm->pgd)
- pgd = current->mm->pgd;
- else
- pgd = init_mm.pgd;
+ /*
+ * We need to access to user-mode page tables here. For kernel threads
+ * we don't have any user-mode mappings so we use the context that we
+ * "borrowed".
+ */
+ pgd = current->active_mm->pgd;
base_pmdval = PMD_SECT_AP_WRITE | PMD_SECT_AP_READ | PMD_TYPE_SECT;
if (cpu_architecture() <= CPU_ARCH_ARMv5TEJ && !cpu_is_xscale())