[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-devel] [RFC 4/9] arm64: utilize time accounting
From: Andrii Anisov <andrii_anisov@xxxxxxxx> Call time accounting hooks from appropriate transition points of the ARM64 code. Signed-off-by: Andrii Anisov <andrii_anisov@xxxxxxxx> --- xen/arch/arm/arm64/entry.S | 39 ++++++++++++++++++++++++++++++++++++--- xen/arch/arm/domain.c | 2 ++ 2 files changed, 38 insertions(+), 3 deletions(-) diff --git a/xen/arch/arm/arm64/entry.S b/xen/arch/arm/arm64/entry.S index 2d9a271..6fb2fa9 100644 --- a/xen/arch/arm/arm64/entry.S +++ b/xen/arch/arm/arm64/entry.S @@ -143,12 +143,21 @@ .endm - .macro exit, hyp, compat + .macro exit, hyp, compat, tacc=1 .if \hyp == 0 /* Guest mode */ + .if \tacc == 1 + + mov x0, #1 + bl tacc_hyp + + .endif + bl leave_hypervisor_tail /* Disables interrupts on return */ + mov x0, #1 + bl tacc_guest exit_guest \compat .endif @@ -205,9 +214,15 @@ hyp_sync: hyp_irq: entry hyp=1 + mov x0,#5 + bl tacc_irq_enter msr daifclr, #4 mov x0, sp bl do_trap_irq + + mov x0,#5 + bl tacc_irq_exit + exit hyp=1 guest_sync: @@ -291,6 +306,9 @@ guest_sync_slowpath: * to save them. */ entry hyp=0, compat=0, save_x0_x1=0 + + mov x0,#1 + bl tacc_gsync /* * The vSError will be checked while SKIP_SYNCHRONIZE_SERROR_ENTRY_EXIT * is not set. If a vSError took place, the initial exception will be @@ -307,6 +325,10 @@ guest_sync_slowpath: guest_irq: entry hyp=0, compat=0 + + mov x0,#6 + bl tacc_irq_enter + /* * The vSError will be checked while SKIP_SYNCHRONIZE_SERROR_ENTRY_EXIT * is not set. If a vSError took place, the initial exception will be @@ -319,6 +341,8 @@ guest_irq: mov x0, sp bl do_trap_irq 1: + mov x0,#6 + bl tacc_irq_exit exit hyp=0, compat=0 guest_fiq_invalid: @@ -334,6 +358,9 @@ guest_error: guest_sync_compat: entry hyp=0, compat=1 + + mov x0,#2 + bl tacc_gsync /* * The vSError will be checked while SKIP_SYNCHRONIZE_SERROR_ENTRY_EXIT * is not set. If a vSError took place, the initial exception will be @@ -350,6 +377,10 @@ guest_sync_compat: guest_irq_compat: entry hyp=0, compat=1 + + mov x0,#7 + bl tacc_irq_enter + /* * The vSError will be checked while SKIP_SYNCHRONIZE_SERROR_ENTRY_EXIT * is not set. If a vSError took place, the initial exception will be @@ -362,6 +393,8 @@ guest_irq_compat: mov x0, sp bl do_trap_irq 1: + mov x0,#7 + bl tacc_irq_exit exit hyp=0, compat=1 guest_fiq_invalid_compat: @@ -376,9 +409,9 @@ guest_error_compat: exit hyp=0, compat=1 ENTRY(return_to_new_vcpu32) - exit hyp=0, compat=1 + exit hyp=0, compat=1, tacc=0 ENTRY(return_to_new_vcpu64) - exit hyp=0, compat=0 + exit hyp=0, compat=0, tacc=0 return_from_trap: msr daifset, #2 /* Mask interrupts */ diff --git a/xen/arch/arm/domain.c b/xen/arch/arm/domain.c index a9c4113..53ef630 100644 --- a/xen/arch/arm/domain.c +++ b/xen/arch/arm/domain.c @@ -51,11 +51,13 @@ static void do_idle(void) process_pending_softirqs(); local_irq_disable(); + tacc_idle(1); if ( cpu_is_haltable(cpu) ) { dsb(sy); wfi(); } + tacc_hyp(2); local_irq_enable(); sched_tick_resume(); -- 2.7.4 _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxxxxxxxxx https://lists.xenproject.org/mailman/listinfo/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |