summaryrefslogtreecommitdiff
path: root/arch/arm64/kvm/perf.c
diff options
context:
space:
mode:
Diffstat (limited to 'arch/arm64/kvm/perf.c')
-rw-r--r--arch/arm64/kvm/perf.c35
1 files changed, 15 insertions, 20 deletions
diff --git a/arch/arm64/kvm/perf.c b/arch/arm64/kvm/perf.c
index a0d660cf889e..dfa9bce8559e 100644
--- a/arch/arm64/kvm/perf.c
+++ b/arch/arm64/kvm/perf.c
@@ -13,39 +13,34 @@
DEFINE_STATIC_KEY_FALSE(kvm_arm_pmu_available);
-static int kvm_is_in_guest(void)
+static unsigned int kvm_guest_state(void)
{
- return kvm_get_running_vcpu() != NULL;
-}
-
-static int kvm_is_user_mode(void)
-{
- struct kvm_vcpu *vcpu;
+ struct kvm_vcpu *vcpu = kvm_get_running_vcpu();
+ unsigned int state;
- vcpu = kvm_get_running_vcpu();
+ if (!vcpu)
+ return 0;
- if (vcpu)
- return !vcpu_mode_priv(vcpu);
+ state = PERF_GUEST_ACTIVE;
+ if (!vcpu_mode_priv(vcpu))
+ state |= PERF_GUEST_USER;
- return 0;
+ return state;
}
static unsigned long kvm_get_guest_ip(void)
{
- struct kvm_vcpu *vcpu;
-
- vcpu = kvm_get_running_vcpu();
+ struct kvm_vcpu *vcpu = kvm_get_running_vcpu();
- if (vcpu)
- return *vcpu_pc(vcpu);
+ if (WARN_ON_ONCE(!vcpu))
+ return 0;
- return 0;
+ return *vcpu_pc(vcpu);
}
static struct perf_guest_info_callbacks kvm_guest_cbs = {
- .is_in_guest = kvm_is_in_guest,
- .is_user_mode = kvm_is_user_mode,
- .get_guest_ip = kvm_get_guest_ip,
+ .state = kvm_guest_state,
+ .get_ip = kvm_get_guest_ip,
};
void kvm_perf_init(void)