ia64/xen-unstable

diff linux-2.6-xen-sparse/arch/ia64/xen/hypercall.S @ 10703:8d501f39286c

[IA64] vDSO paravirtualization: paravirtualize vDSO

paravirtualize vdso areabased on Kevin's pointout and Dan's Idea.
introduce hyperprivop HYPERPRIVOP_RSM_BE and HYPERPRIVOP_GET_PSR.
and paravirtualize vdso area using them.

Signed-off-by: Isaku Yamahata <yamahata@valinux.co.jp>
author awilliam@xenbuild.aw
date Mon Jul 24 13:43:35 2006 -0600 (2006-07-24)
parents 90329e7d6be5
children 147144f9ec51
line diff
     1.1 --- a/linux-2.6-xen-sparse/arch/ia64/xen/hypercall.S	Mon Jul 24 13:04:40 2006 -0600
     1.2 +++ b/linux-2.6-xen-sparse/arch/ia64/xen/hypercall.S	Mon Jul 24 13:43:35 2006 -0600
     1.3 @@ -351,3 +351,59 @@ GLOBAL_ENTRY(xen_send_ipi)
     1.4          br.ret.sptk.many rp
     1.5          ;;
     1.6  END(xen_send_ipi)
     1.7 +
     1.8 +#ifdef CONFIG_XEN_IA64_VDSO_PARAVIRT
     1.9 +// Those are vdso specialized.
    1.10 +// In fsys mode, call, ret can't be used.
    1.11 +GLOBAL_ENTRY(xen_rsm_be_i)
    1.12 +	ld8 r22=[r22]
    1.13 +	;; 
    1.14 +	st1 [r22]=r20
    1.15 +	st4 [r23]=r0
    1.16 +	XEN_HYPER_RSM_BE
    1.17 +	st4 [r23]=r20
    1.18 +	brl.cond.sptk	.vdso_rsm_be_i_ret
    1.19 +	;; 
    1.20 +END(xen_rsm_be_i)
    1.21 +
    1.22 +GLOBAL_ENTRY(xen_get_psr)
    1.23 +	mov r31=r8
    1.24 +	mov r25=IA64_PSR_IC
    1.25 +	st4 [r23]=r0
    1.26 +	XEN_HYPER_GET_PSR
    1.27 +	;; 
    1.28 +	st4 [r23]=r20
    1.29 +	or r29=r8,r25 // vpsr.ic was cleared for hyperprivop
    1.30 +	mov r8=r31
    1.31 +	brl.cond.sptk	.vdso_get_psr_ret
    1.32 +	;; 
    1.33 +END(xen_get_psr)
    1.34 +
    1.35 +GLOBAL_ENTRY(xen_ssm_i_0)
    1.36 +	st4 [r22]=r20
    1.37 +	ld4 r25=[r24]
    1.38 +	;;
    1.39 +	cmp.ne.unc p11,p0=r0, r25
    1.40 +	;; 
    1.41 +(p11)	st4 [r22]=r0
    1.42 +(p11)	st4 [r23]=r0
    1.43 +(p11)	XEN_HYPER_SSM_I
    1.44 +	
    1.45 +	brl.cond.sptk	.vdso_ssm_i_0_ret
    1.46 +	;; 
    1.47 +END(xen_ssm_i_0)
    1.48 +
    1.49 +GLOBAL_ENTRY(xen_ssm_i_1)
    1.50 +	st4 [r22]=r20
    1.51 +	ld4 r25=[r24]
    1.52 +	;; 
    1.53 +	cmp.ne.unc p11,p0=r0, r25
    1.54 +	;; 
    1.55 +(p11)	st4 [r22]=r0
    1.56 +(p11)	st4 [r23]=r0
    1.57 +(p11)	XEN_HYPER_SSM_I
    1.58 +	;;
    1.59 +	brl.cond.sptk	.vdso_ssm_i_1_ret
    1.60 +	;; 
    1.61 +END(xen_ssm_i_1)
    1.62 +#endif