[RFC 6/6] KVM: arm64: Add tracepoints for TLBID vDomain load events
Jinqian Yang
yangjinqian1 at huawei.com
Thu Oct 29 23:56:17 PDT 2026
kvm_tlbid_vcpu_info logs each vCPU's vDomain bitmap on migration,
and kvm_tlbid_domain_mapping logs the pCPU mask and physical domain
mapped for each vDomain, covering both the default vDomain0 mapping
and the per-vDomain updates.
Signed-off-by: Jinqian Yang <yangjinqian1 at huawei.com>
---
arch/arm64/kvm/arm.c | 10 ++++++++
arch/arm64/kvm/trace_arm.h | 47 ++++++++++++++++++++++++++++++++++++++
2 files changed, 57 insertions(+)
diff --git a/arch/arm64/kvm/arm.c b/arch/arm64/kvm/arm.c
index b5ab89db1c07..0352d62cea18 100644
--- a/arch/arm64/kvm/arm.c
+++ b/arch/arm64/kvm/arm.c
@@ -954,6 +954,9 @@ static void kvm_tlbidomain_vcpu_load(struct kvm_vcpu *vcpu)
max_vdomains);
}
}
+ trace_kvm_tlbid_vcpu_info(vcpu->vcpu_idx, vcpu->cpu,
+ current_data->last_pcpu,
+ current_data->vdomain_bitmap);
if (!vdomain->guest_tlbid_enabled) {
old_map = vdomain->domain_map[0];
@@ -966,6 +969,10 @@ static void kvm_tlbidomain_vcpu_load(struct kvm_vcpu *vcpu)
0,
current_data->last_pcpu,
test_bit(0, clear_bits));
+ trace_kvm_tlbid_domain_mapping(0,
+ vdomain->vdomain_cpumasks[0],
+ vdomain->domain_map[0]);
+
if (vdomain->domain_map[0] == old_map)
goto unlock;
} else {
@@ -983,6 +990,9 @@ static void kvm_tlbidomain_vcpu_load(struct kvm_vcpu *vcpu)
i,
current_data->last_pcpu,
test_bit(i, clear_bits));
+ trace_kvm_tlbid_domain_mapping(i,
+ vdomain->vdomain_cpumasks[i],
+ vdomain->domain_map[i]);
if (vdomain->domain_map[i] != old_map)
domain_map_changed = true;
diff --git a/arch/arm64/kvm/trace_arm.h b/arch/arm64/kvm/trace_arm.h
index 9c60f6465c78..0e8faeb8964e 100644
--- a/arch/arm64/kvm/trace_arm.h
+++ b/arch/arm64/kvm/trace_arm.h
@@ -415,6 +415,53 @@ TRACE_EVENT(kvm_forward_sysreg_trap,
sys_reg_Op2(__entry->sysreg))
);
+TRACE_EVENT(kvm_tlbid_vcpu_info,
+ TP_PROTO(int vcpu_idx, int current_pcpu, int last_pcpu,
+ u32 vdomain_bitmap),
+ TP_ARGS(vcpu_idx, current_pcpu, last_pcpu, vdomain_bitmap),
+
+ TP_STRUCT__entry(
+ __field(int, vcpu_idx)
+ __field(int, current_pcpu)
+ __field(int, last_pcpu)
+ __field(u32, vdomain_bitmap)
+ ),
+
+ TP_fast_assign(
+ __entry->vcpu_idx = vcpu_idx;
+ __entry->current_pcpu = current_pcpu;
+ __entry->last_pcpu = last_pcpu;
+ __entry->vdomain_bitmap = vdomain_bitmap;
+ ),
+
+ TP_printk("vcpu=%d current_pcpu=%d last_pcpu=%d vdomain_bitmap=0x%x",
+ __entry->vcpu_idx, __entry->current_pcpu,
+ __entry->last_pcpu, __entry->vdomain_bitmap)
+);
+
+TRACE_EVENT(kvm_tlbid_domain_mapping,
+ TP_PROTO(int vdomain_id, const struct cpumask *cpumask,
+ int pdomain_id),
+ TP_ARGS(vdomain_id, cpumask, pdomain_id),
+
+ TP_STRUCT__entry(
+ __field(int, vdomain_id)
+ __cpumask(cpumask)
+ __field(int, pdomain_id)
+ ),
+
+ TP_fast_assign(
+ __entry->vdomain_id = vdomain_id;
+ __assign_cpumask(cpumask, cpumask_bits(cpumask));
+ __entry->pdomain_id = pdomain_id;
+ ),
+
+ TP_printk("Domain mapping: vDomain=%d, cpumask=%s, pDomain=%d",
+ __entry->vdomain_id,
+ __get_cpumask(cpumask),
+ __entry->pdomain_id)
+);
+
#endif /* _TRACE_ARM_ARM64_KVM_H */
#undef TRACE_INCLUDE_PATH
--
2.33.0
More information about the linux-arm-kernel
mailing list