Hi Andrew, On 04/12/18 14:58, Andrew Murray wrote: > Enable/disable event counters as appropriate when entering and exiting > the guest to enable support for guest or host only event counting. > > For both VHE and non-VHE we switch the counters between host/guest at > EL2. EL2 is filtered out by the PMU when we are using the :G modifier. > > The PMU may be on when we change which counters are enabled however > we avoid adding an isb as we instead rely on existing context > synchronisation events: the isb in kvm_arm_vhe_guest_exit for VHE and > the eret from the hvc in kvm_call_hyp. > > Signed-off-by: Andrew Murray <andrew.mur...@arm.com> > --- > arch/arm64/kvm/hyp/switch.c | 41 +++++++++++++++++++++++++++++++++++++++++ > 1 file changed, 41 insertions(+) > > diff --git a/arch/arm64/kvm/hyp/switch.c b/arch/arm64/kvm/hyp/switch.c > index d496ef5..5e03921 100644 > --- a/arch/arm64/kvm/hyp/switch.c > +++ b/arch/arm64/kvm/hyp/switch.c > @@ -373,6 +373,35 @@ static bool __hyp_text __hyp_switch_fpsimd(struct > kvm_vcpu *vcpu) > return true; > } > > +static bool __hyp_text __pmu_switch_to_guest(struct kvm_cpu_context > *host_ctxt) > +{ > + u32 host = host_ctxt->events_host; > + u32 guest = host_ctxt->events_guest; > + > + if (host == guest) > + return false; > + > + if (host) > + write_sysreg(host, pmcntenclr_el0);
Nit: Instead of clearing host counters we could clear non-guest counters: u32 clear_events = host_ctxt->events_hosts & ~guest; if (clear_events) write_sysreg(clear_events, pmcntenclr_el0); Don't know if it makes a lot of difference. > + > + if (guest) > + write_sysreg(guest, pmcntenset_el0); > + > + return (host || guest); We know this is true. If both (host == 0 && guest == 0) then (host == guest) meaning we returned false. > +} > + > +static void __hyp_text __pmu_switch_to_host(struct kvm_cpu_context > *host_ctxt) > +{ > + u32 host = host_ctxt->events_host; > + u32 guest = host_ctxt->events_guest; > + > + if (guest) > + write_sysreg(guest, pmcntenclr_el0); Nit: Same as above, we could just clear the counters that are exclusive to the guest. Cheers, -- Julien Thierry _______________________________________________ kvmarm mailing list kvmarm@lists.cs.columbia.edu https://lists.cs.columbia.edu/mailman/listinfo/kvmarm