]> xenbits.xensource.com Git - people/vhanquez/xen.git/commitdiff
arm: restore ELR_hyp and SPSR_hyp on return from hypervisor to hypervisor.
authorIan Campbell <ian.campbell@citrix.com>
Wed, 22 Feb 2012 14:33:23 +0000 (14:33 +0000)
committerIan Campbell <ian.campbell@citrix.com>
Wed, 22 Feb 2012 14:33:23 +0000 (14:33 +0000)
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>
xen/arch/arm/entry.S

index d78115d5360ec35406a16b82911522e28f682fbc..b2986289c5b8e2ee547feaf386ec4a506bba1913 100644 (file)
@@ -102,6 +102,10 @@ ENTRY(return_to_guest)
 
 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