ARM: idmap: use idmap_pgd when setting up mm for reboot
authorWill Deacon <will.deacon@arm.com>
Wed, 8 Jun 2011 14:53:34 +0000 (15:53 +0100)
committerGrazvydas Ignotas <notasas@gmail.com>
Wed, 6 Feb 2013 17:48:37 +0000 (19:48 +0200)
commit7e3bbcc787d8c630181b5619d7ace972c421be20
tree3bf7fc3fc452d81946bdafae364c0385562a99c4
parent3bd0ea208e1355df2c39be2434824babe1689bf9
ARM: idmap: use idmap_pgd when setting up mm for reboot

For soft-rebooting a system, it is necessary to map the MMU-off code
with an identity mapping so that execution can continue safely once the
MMU has been switched off.

Currently, switch_mm_for_reboot takes out a 1:1 mapping from 0x0 to
TASK_SIZE during reboot in the hope that the reset code lives at a
physical address corresponding to a userspace virtual address.

This patch modifies the code so that we switch to the idmap_pgd tables,
which contain a 1:1 mapping of the cpu_reset code. This has the
advantage of only remapping the code that we need and also means we
don't need to worry about allocating a pgd from an atomic context in the
case that the physical address of the cpu_reset code aliases with the
virtual space used by the kernel.

Acked-by: Dave Martin <dave.martin@linaro.org>
Reviewed-by: Catalin Marinas <catalin.marinas@arm.com>
Signed-off-by: Will Deacon <will.deacon@arm.com>
arch/arm/mm/idmap.c