root/virt/kvm/arm/perf.c

/* [<][>][^][v][top][bottom][index][help] */

DEFINITIONS

This source file includes following definitions.
  1. kvm_is_in_guest
  2. kvm_is_user_mode
  3. kvm_get_guest_ip
  4. kvm_perf_init
  5. kvm_perf_teardown

   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 
  14 static int kvm_is_in_guest(void)
  15 {
  16         return kvm_arm_get_running_vcpu() != NULL;
  17 }
  18 
  19 static 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 
  31 static 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 
  43 static 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 
  49 int kvm_perf_init(void)
  50 {
  51         return perf_register_guest_info_callbacks(&kvm_guest_cbs);
  52 }
  53 
  54 int kvm_perf_teardown(void)
  55 {
  56         return perf_unregister_guest_info_callbacks(&kvm_guest_cbs);
  57 }

/* [<][>][^][v][top][bottom][index][help] */