ARM: pxa: fix page table corruption on resume
Before this patch, the following error would sometimes occur after a resume on pxa3xx: /path/to/mm/memory.c:144: bad pmd 8040542e. The problem was that a temporary page table mapping was being improperly restored. The PXA3xx resume code creates a temporary mapping of resume_turn_on_mmu to avoid a prefetch abort. The pxa3xx_resume_after_mmu code requires that the r1 register holding the address of this mapping not be modified, however, resume_turn_on_mmu does modify it. It is mostly correct in that r1 receives the base table address, but it may also get other bits in 13:0. This results in pxa3xx_resume_after_mmu restoring the original mapping to the wrong place, corrupting memory and leaving the temporary mapping in place. Signed-off-by: Matt Reimer <mreimer@sdgsystems.com> Signed-off-by: Eric Miao <eric.y.miao@gmail.com>
This commit is contained in:
parent
823a2df258
commit
24c7855774
1 changed files with 2 additions and 2 deletions
|
@ -353,8 +353,8 @@ resume_turn_on_mmu:
|
|||
|
||||
@ Let us ensure we jump to resume_after_mmu only when the mcr above
|
||||
@ actually took effect. They call it the "cpwait" operation.
|
||||
mrc p15, 0, r1, c2, c0, 0 @ queue a dependency on CP15
|
||||
sub pc, r2, r1, lsr #32 @ jump to virtual addr
|
||||
mrc p15, 0, r0, c2, c0, 0 @ queue a dependency on CP15
|
||||
sub pc, r2, r0, lsr #32 @ jump to virtual addr
|
||||
nop
|
||||
nop
|
||||
nop
|
||||
|
|
Loading…
Reference in a new issue