Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 94752a79 authored by Isaku Yamahata's avatar Isaku Yamahata Committed by Tony Luck
Browse files

ia64/pv_ops: paravirtualize mov = ar.itc.



paravirtualize mov reg = ar.itc.

Signed-off-by: default avatarIsaku Yamahata <yamahata@valinux.co.jp>
Signed-off-by: default avatarTony Luck <tony.luck@intel.com>
parent 9d1964f2
Loading
Loading
Loading
Loading
+5 −0
Original line number Diff line number Diff line
@@ -77,6 +77,11 @@
(pred)	mov reg = psr			\
	CLOBBER(clob)

#define MOV_FROM_ITC(pred, pred_clob, reg, clob)	\
(pred)	mov reg = ar.itc				\
	CLOBBER(clob)					\
	CLOBBER_PRED(pred_clob)

#define MOV_TO_IFA(reg, clob)	\
	mov cr.ifa = reg	\
	CLOBBER(clob)
+2 −2
Original line number Diff line number Diff line
@@ -735,7 +735,7 @@ GLOBAL_ENTRY(__paravirt_leave_syscall)
__paravirt_work_processed_syscall:
#ifdef CONFIG_VIRT_CPU_ACCOUNTING
	adds r2=PT(LOADRS)+16,r12
(pUStk)	mov.m r22=ar.itc			// fetch time at leave
	MOV_FROM_ITC(pUStk, p9, r22, r19)	// fetch time at leave
	adds r18=TI_FLAGS+IA64_TASK_SIZE,r13
	;;
(p6)	ld4 r31=[r18]				// load current_thread_info()->flags
@@ -984,7 +984,7 @@ GLOBAL_ENTRY(__paravirt_leave_kernel)
#ifdef CONFIG_VIRT_CPU_ACCOUNTING
	.pred.rel.mutex pUStk,pKStk
	MOV_FROM_PSR(pKStk, r22, r29)	// M2 read PSR now that interrupts are disabled
(pUStk)	mov.m r22=ar.itc	// M  fetch time at leave
	MOV_FROM_ITC(pUStk, p9, r22, r29)	// M  fetch time at leave
	nop.i 0
	;;
#else
+2 −2
Original line number Diff line number Diff line
@@ -280,7 +280,7 @@ ENTRY(fsys_gettimeofday)
(p9)	cmp.eq p13,p0 = 0,r30	// if mmio_ptr, clear p13 jitter control
	;;
	.pred.rel.mutex p8,p9
(p8)	mov r2 = ar.itc		// CPU_TIMER. 36 clocks latency!!!
	MOV_FROM_ITC(p8, p6, r2, r10)	// CPU_TIMER. 36 clocks latency!!!
(p9)	ld8 r2 = [r30]		// MMIO_TIMER. Could also have latency issues..
(p13)	ld8 r25 = [r19]		// get itc_lastcycle value
	ld8 r9 = [r22],IA64_TIMESPEC_TV_NSEC_OFFSET	// tv_sec
@@ -684,7 +684,7 @@ GLOBAL_ENTRY(paravirt_fsys_bubble_down)
	;;
	mov ar.rsc=0				// M2   set enforced lazy mode, pl 0, LE, loadrs=0
#ifdef CONFIG_VIRT_CPU_ACCOUNTING
	mov.m r30=ar.itc			// M    get cycle for accounting
	MOV_FROM_ITC(p0, p6, r30, r23)		// M    get cycle for accounting
#else
	nop.m 0
#endif
+1 −1
Original line number Diff line number Diff line
@@ -804,7 +804,7 @@ ENTRY(break_fault)
///////////////////////////////////////////////////////////////////////
	st1 [r16]=r0				// M2|3 clear current->thread.on_ustack flag
#ifdef CONFIG_VIRT_CPU_ACCOUNTING
	mov.m r30=ar.itc			// M    get cycle for accounting
	MOV_FROM_ITC(p0, p14, r30, r18)		// M    get cycle for accounting
#else
	mov b6=r30				// I0   setup syscall handler branch reg early
#endif