Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > linux.kernel > #1555177

[PATCH v3 7/9] kvm: host_pmu: Add support for tracking guest TLB operations

From Punit Agrawal <punit.agrawal@arm.com>
Newsgroups linux.kernel
Subject [PATCH v3 7/9] kvm: host_pmu: Add support for tracking guest TLB operations
Date 2017-01-10 12:50 +0100
Message-ID <sY369-N3-3@gated-at.bofh.it> (permalink)
References <sY2Wu-JF-13@gated-at.bofh.it>
Organization linux.* mail to news gateway

Show all headers | View raw


Add the callbacks required by host PMU to support monitoring guest TLB
operations.

Signed-off-by: Punit Agrawal <punit.agrawal@arm.com>
Cc: Christoffer Dall <christoffer.dall@linaro.org>
Cc: Marc Zyngier <marc.zyngier@arm.com>
---
 virt/kvm/arm/host_pmu.c | 50 +++++++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 50 insertions(+)

diff --git a/virt/kvm/arm/host_pmu.c b/virt/kvm/arm/host_pmu.c
index fc610ccc169a..22c3aef17ec4 100644
--- a/virt/kvm/arm/host_pmu.c
+++ b/virt/kvm/arm/host_pmu.c
@@ -13,6 +13,7 @@
 #include <asm/kvm_emulate.h>
 
 enum host_pmu_events {
+	tlb_invalidate,
 	KVM_HOST_MAX_EVENTS,
 };
 
@@ -40,10 +41,59 @@ struct event_data {
 	struct list_head event_list;
 };
 
+static u64 get_tlb_invalidate_count(struct kvm *kvm)
+{
+	struct kvm_vcpu *vcpu;
+	u64 val = 0;
+	int i;
+
+	kvm_for_each_vcpu(i, vcpu, kvm)
+		val += vcpu->stat.tlb_invalidate;
+
+	return val;
+}
+
+static void configure_tlb_invalidate(struct kvm *kvm, bool enable)
+{
+	struct kvm_vcpu *vcpu;
+	int i;
+
+	kvm_arm_halt_guest(kvm);
+	kvm_for_each_vcpu(i, vcpu, kvm) {
+		unsigned long hcr = vcpu_get_hcr(vcpu);
+
+		if (enable)
+			hcr |= HCR_TTLB;
+		else
+			hcr &= ~HCR_TTLB;
+
+		vcpu_set_hcr(vcpu, hcr);
+	}
+	kvm_arm_resume_guest(kvm);
+}
+
 static struct kvm_event_cb event_callbacks[] = {
+	{
+		.event			= tlb_invalidate,
+		.get_event_count	= get_tlb_invalidate_count,
+		.configure_event	= configure_tlb_invalidate,
+	}
 };
 
+static ssize_t events_sysfs_show(struct device *dev,
+				 struct device_attribute *attr, char *page)
+{
+	struct perf_pmu_events_attr *pmu_attr;
+
+	pmu_attr = container_of(attr, struct perf_pmu_events_attr, attr);
+
+	return sprintf(page, "event=0x%03llx,vm=?\n", pmu_attr->id);
+}
+PMU_EVENT_ATTR(tlb_invalidate, event_attr_tlb_invalidate, tlb_invalidate,
+	       events_sysfs_show);
+
 static struct attribute *event_attrs[] = {
+	&event_attr_tlb_invalidate.attr.attr,
 	NULL,
 };
 
-- 
2.11.0

Back to linux.kernel | Previous | Next — Previous in thread | Next in thread | Find similar | Unroll thread


Thread

[PATCH v3 0/9] Add support for monitoring guest TLB operations Punit Agrawal <punit.agrawal@arm.com> - 2017-01-10 12:40 +0100
  [PATCH v3 3/9] KVM: Add event to trace tlb invalidations Punit Agrawal <punit.agrawal@arm.com> - 2017-01-10 12:50 +0100
  [PATCH v3 7/9] kvm: host_pmu: Add support for tracking guest TLB operations Punit Agrawal <punit.agrawal@arm.com> - 2017-01-10 12:50 +0100
  [PATCH v3 9/9] arm64: KVM: Enable support for the host pmu Punit Agrawal <punit.agrawal@arm.com> - 2017-01-10 12:50 +0100
  [PATCH v3 2/9] KVM: Track the pid of the VM process Punit Agrawal <punit.agrawal@arm.com> - 2017-01-10 12:50 +0100
  [PATCH v3 5/9] arm64: KVM: Handle trappable TLB instructions Punit Agrawal <punit.agrawal@arm.com> - 2017-01-10 12:50 +0100
  [PATCH v3 4/9] arm: KVM: Handle trappable TLB instructions Punit Agrawal <punit.agrawal@arm.com> - 2017-01-10 12:50 +0100
  [PATCH v3 8/9] arm: KVM: Enable support for host pmu Punit Agrawal <punit.agrawal@arm.com> - 2017-01-10 12:50 +0100
  [PATCH v3 6/9] kvm: arm/arm64: Add host pmu to support VM introspection Punit Agrawal <punit.agrawal@arm.com> - 2017-01-10 12:50 +0100

csiph-web