This is necessary to handle nested traps to the hypervisor more than one deep.
I've not seen an actually failure relating to this but I'm not quite sure how
we've managed to get away with not doing it (I suppose multiply nested traps
are uncommon).
Signed-off-by: Ian Campbell <ian.campbell@citrix.com>
Acked-by: Stefano Stabellini <stefano.stabellini@eu.citrix.com>
Committed-by: Ian Campbell <Ian.Campbell@citrix.com>
ENTRY(return_to_hypervisor)
ldr lr, [sp, #UREGS_lr]
+ ldr r11, [sp, #UREGS_pc]
+ msr ELR_hyp, r11
+ ldr r11, [sp, #UREGS_cpsr]
+ msr SPSR_hyp, r11
pop {r0-r12}
add sp, #(UREGS_R8_fiq - UREGS_sp); /* SP, LR, SPSR, PC */
eret