Loading...
Note: File does not exist in v3.5.6.
1// SPDX-License-Identifier: GPL-2.0-only
2/*
3 * Based on the x86 implementation.
4 *
5 * Copyright (C) 2012 ARM Ltd.
6 * Author: Marc Zyngier <marc.zyngier@arm.com>
7 */
8
9#include <linux/perf_event.h>
10#include <linux/kvm_host.h>
11
12#include <asm/kvm_emulate.h>
13
14static int kvm_is_in_guest(void)
15{
16 return kvm_arm_get_running_vcpu() != NULL;
17}
18
19static int kvm_is_user_mode(void)
20{
21 struct kvm_vcpu *vcpu;
22
23 vcpu = kvm_arm_get_running_vcpu();
24
25 if (vcpu)
26 return !vcpu_mode_priv(vcpu);
27
28 return 0;
29}
30
31static unsigned long kvm_get_guest_ip(void)
32{
33 struct kvm_vcpu *vcpu;
34
35 vcpu = kvm_arm_get_running_vcpu();
36
37 if (vcpu)
38 return *vcpu_pc(vcpu);
39
40 return 0;
41}
42
43static struct perf_guest_info_callbacks kvm_guest_cbs = {
44 .is_in_guest = kvm_is_in_guest,
45 .is_user_mode = kvm_is_user_mode,
46 .get_guest_ip = kvm_get_guest_ip,
47};
48
49int kvm_perf_init(void)
50{
51 return perf_register_guest_info_callbacks(&kvm_guest_cbs);
52}
53
54int kvm_perf_teardown(void)
55{
56 return perf_unregister_guest_info_callbacks(&kvm_guest_cbs);
57}