On Wed, Dec 12, 2018 at 10:53:35AM +0000, Suzuki K Poulose wrote: > > > On 12/12/2018 10:29, 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 | 52 > > +++++++++++++++++++++++++++++++++++++++++++++ > > 1 file changed, 52 insertions(+) > > > > diff --git a/arch/arm64/kvm/hyp/switch.c b/arch/arm64/kvm/hyp/switch.c > > index d496ef5..9732ef7 100644 > > --- a/arch/arm64/kvm/hyp/switch.c > > +++ b/arch/arm64/kvm/hyp/switch.c > > @@ -373,6 +373,46 @@ 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) > > +{ > > + struct kvm_host_data *host; > > + struct kvm_pmu_events *pmu; > > + u32 clr, set; > > + > > + host = container_of(host_ctxt, struct kvm_host_data, host_ctxt); > > + pmu = &host->pmu_events; > > + > > + clr = pmu->events_host & ~pmu->events_guest; > > + set = pmu->events_guest & ~pmu->events_host; > > It may make sense to add in a comment explaining why we only set: > > events_guest & ~events_host >
Yes I'll add a comment, especially as I've just spend 5 minutes trying to remember why I did this. Instead of assigning 'pmu->events_guest & ~pmu->events_host' to 'set' we could have just assigned 'pmu->events_guest'. However consider the scenario where an event is enabled for both host and guest - this would have resulted in us always writing the (already set) bit to the system register. Therefore with my approach we can potentially avoid any system register writes on a hypervisor switch when the only events enabled are those for both host and guest. Thanks, Andrew Murray > Either way: > > Reviewed-by: Suzuki K Poulose <suzuki.poul...@arm.com> _______________________________________________ kvmarm mailing list kvmarm@lists.cs.columbia.edu https://lists.cs.columbia.edu/mailman/listinfo/kvmarm