Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
awilliam
GitHub Repository: awilliam/linux-vfio
Path: blob/master/arch/powerpc/kvm/timing.h
10817 views
1
/*
2
* This program is free software; you can redistribute it and/or modify
3
* it under the terms of the GNU General Public License, version 2, as
4
* published by the Free Software Foundation.
5
*
6
* This program is distributed in the hope that it will be useful,
7
* but WITHOUT ANY WARRANTY; without even the implied warranty of
8
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
9
* GNU General Public License for more details.
10
*
11
* You should have received a copy of the GNU General Public License
12
* along with this program; if not, write to the Free Software
13
* Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
14
*
15
* Copyright IBM Corp. 2008
16
*
17
* Authors: Christian Ehrhardt <[email protected]>
18
*/
19
20
#ifndef __POWERPC_KVM_EXITTIMING_H__
21
#define __POWERPC_KVM_EXITTIMING_H__
22
23
#include <linux/kvm_host.h>
24
#include <asm/kvm_host.h>
25
26
#ifdef CONFIG_KVM_EXIT_TIMING
27
void kvmppc_init_timing_stats(struct kvm_vcpu *vcpu);
28
void kvmppc_update_timing_stats(struct kvm_vcpu *vcpu);
29
void kvmppc_create_vcpu_debugfs(struct kvm_vcpu *vcpu, unsigned int id);
30
void kvmppc_remove_vcpu_debugfs(struct kvm_vcpu *vcpu);
31
32
static inline void kvmppc_set_exit_type(struct kvm_vcpu *vcpu, int type)
33
{
34
vcpu->arch.last_exit_type = type;
35
}
36
37
#else
38
/* if exit timing is not configured there is no need to build the c file */
39
static inline void kvmppc_init_timing_stats(struct kvm_vcpu *vcpu) {}
40
static inline void kvmppc_update_timing_stats(struct kvm_vcpu *vcpu) {}
41
static inline void kvmppc_create_vcpu_debugfs(struct kvm_vcpu *vcpu,
42
unsigned int id) {}
43
static inline void kvmppc_remove_vcpu_debugfs(struct kvm_vcpu *vcpu) {}
44
static inline void kvmppc_set_exit_type(struct kvm_vcpu *vcpu, int type) {}
45
#endif /* CONFIG_KVM_EXIT_TIMING */
46
47
/* account the exit in kvm_stats */
48
static inline void kvmppc_account_exit_stat(struct kvm_vcpu *vcpu, int type)
49
{
50
/* type has to be known at build time for optimization */
51
52
/* The BUILD_BUG_ON below breaks in funny ways, commented out
53
* for now ... -BenH
54
BUILD_BUG_ON(!__builtin_constant_p(type));
55
*/
56
switch (type) {
57
case EXT_INTR_EXITS:
58
vcpu->stat.ext_intr_exits++;
59
break;
60
case DEC_EXITS:
61
vcpu->stat.dec_exits++;
62
break;
63
case EMULATED_INST_EXITS:
64
vcpu->stat.emulated_inst_exits++;
65
break;
66
case DCR_EXITS:
67
vcpu->stat.dcr_exits++;
68
break;
69
case DSI_EXITS:
70
vcpu->stat.dsi_exits++;
71
break;
72
case ISI_EXITS:
73
vcpu->stat.isi_exits++;
74
break;
75
case SYSCALL_EXITS:
76
vcpu->stat.syscall_exits++;
77
break;
78
case DTLB_REAL_MISS_EXITS:
79
vcpu->stat.dtlb_real_miss_exits++;
80
break;
81
case DTLB_VIRT_MISS_EXITS:
82
vcpu->stat.dtlb_virt_miss_exits++;
83
break;
84
case MMIO_EXITS:
85
vcpu->stat.mmio_exits++;
86
break;
87
case ITLB_REAL_MISS_EXITS:
88
vcpu->stat.itlb_real_miss_exits++;
89
break;
90
case ITLB_VIRT_MISS_EXITS:
91
vcpu->stat.itlb_virt_miss_exits++;
92
break;
93
case SIGNAL_EXITS:
94
vcpu->stat.signal_exits++;
95
break;
96
}
97
}
98
99
/* wrapper to set exit time and account for it in kvm_stats */
100
static inline void kvmppc_account_exit(struct kvm_vcpu *vcpu, int type)
101
{
102
kvmppc_set_exit_type(vcpu, type);
103
kvmppc_account_exit_stat(vcpu, type);
104
}
105
106
#endif /* __POWERPC_KVM_EXITTIMING_H__ */
107
108