[IA64] Fix save/restore
authorawilliam@xenbuild2.aw <awilliam@xenbuild2.aw>
Mon, 15 Jan 2007 05:18:38 +0000 (22:18 -0700)
committerawilliam@xenbuild2.aw <awilliam@xenbuild2.aw>
Mon, 15 Jan 2007 05:18:38 +0000 (22:18 -0700)
Using the new hypercall path, scratch registers are not saved/restored.

So after returning from hypercall, r20 may contain garbage data.
This triggered General Exception.

Signed-off-by: Anthony Xu <anthony.xu@intel.com>
linux-2.6-xen-sparse/arch/ia64/xen/xensetup.S

index 256c564fa8697de7f92a43f92f162e883dd72098..c295cc3431a46098aba9c6f068576fed2b4912af 100644 (file)
@@ -39,7 +39,7 @@ END(early_xen_setup)
    Just force the stacked registers to be written in memory.  */       
 GLOBAL_ENTRY(xencomm_arch_hypercall_suspend)
        ;; 
-       alloc r20=ar.pfs,0,0,2,0
+       alloc r20=ar.pfs,0,0,6,0
        mov r2=__HYPERVISOR_sched_op
        ;; 
        /* We don't want to deal with RSE.  */
@@ -49,6 +49,5 @@ GLOBAL_ENTRY(xencomm_arch_hypercall_suspend)
        ;;
        break 0x1000
        ;; 
-       mov ar.pfs=r20
        br.ret.sptk.many b0
 END(xencomm_arch_hypercall_suspend)