Hi Andrew,
On 15/11/18 12:55, 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.
Signed-off-by: Andrew Murray <andrew.murray@xxxxxxx>
---
arch/arm64/kvm/hyp/switch.c | 38 ++++++++++++++++++++++++++++++++++++++
1 file changed, 38 insertions(+)
diff --git a/arch/arm64/kvm/hyp/switch.c b/arch/arm64/kvm/hyp/switch.c
index d496ef5..ebf0aac 100644
--- a/arch/arm64/kvm/hyp/switch.c
+++ b/arch/arm64/kvm/hyp/switch.c
@@ -373,6 +373,32 @@ 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_only = host_ctxt->events_host_only;
+ u32 guest_only = host_ctxt->events_guest_only;
+
+ if (host_only)
+ write_sysreg(host_only, pmcntenclr_el0);
+
+ if (guest_only)
+ write_sysreg(guest_only, pmcntenset_el0);
+
+ return (host_only || guest_only);
+}
+
+static void __hyp_text __pmu_switch_to_host(struct kvm_cpu_context *host_ctxt)
+{
+ u32 host_only = host_ctxt->events_host_only;
+ u32 guest_only = host_ctxt->events_guest_only;
+
+ if (guest_only)
+ write_sysreg(guest_only, pmcntenclr_el0);
+
+ if (host_only)
+ write_sysreg(host_only, pmcntenset_el0);
In the perf_event code, there is an ISB after enabling an event. I guess
we don't need it when setting the guest events since I believe the eret
to the guess give us the context synchronization. But don't we need one
here when restoring host only events?
Thanks,
--
Julien Thierry
_______________________________________________
kvmarm mailing list
kvmarm@xxxxxxxxxxxxxxxxxxxxx
https://lists.cs.columbia.edu/mailman/listinfo/kvmarm