Coverage Report

Created: 2017-10-25 09:10

/root/src/xen/xen/include/public/xenoprof.h
Line
Count
Source (jump to first uncovered line)
1
/******************************************************************************
2
 * xenoprof.h
3
 * 
4
 * Interface for enabling system wide profiling based on hardware performance
5
 * counters
6
 * 
7
 * Permission is hereby granted, free of charge, to any person obtaining a copy
8
 * of this software and associated documentation files (the "Software"), to
9
 * deal in the Software without restriction, including without limitation the
10
 * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
11
 * sell copies of the Software, and to permit persons to whom the Software is
12
 * furnished to do so, subject to the following conditions:
13
 *
14
 * The above copyright notice and this permission notice shall be included in
15
 * all copies or substantial portions of the Software.
16
 *
17
 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
18
 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
19
 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
20
 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
21
 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
22
 * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
23
 * DEALINGS IN THE SOFTWARE.
24
 *
25
 * Copyright (C) 2005 Hewlett-Packard Co.
26
 * Written by Aravind Menon & Jose Renato Santos
27
 */
28
29
#ifndef __XEN_PUBLIC_XENOPROF_H__
30
#define __XEN_PUBLIC_XENOPROF_H__
31
32
#include "xen.h"
33
34
/*
35
 * Commands to HYPERVISOR_xenoprof_op().
36
 */
37
0
#define XENOPROF_init                0
38
0
#define XENOPROF_reset_active_list   1
39
0
#define XENOPROF_reset_passive_list  2
40
0
#define XENOPROF_set_active          3
41
0
#define XENOPROF_set_passive         4
42
0
#define XENOPROF_reserve_counters    5
43
0
#define XENOPROF_counter             6
44
0
#define XENOPROF_setup_events        7
45
0
#define XENOPROF_enable_virq         8
46
0
#define XENOPROF_start               9
47
0
#define XENOPROF_stop               10
48
0
#define XENOPROF_disable_virq       11
49
0
#define XENOPROF_release_counters   12
50
0
#define XENOPROF_shutdown           13
51
0
#define XENOPROF_get_buffer         14
52
0
#define XENOPROF_set_backtrace      15
53
54
/* AMD IBS support */
55
0
#define XENOPROF_get_ibs_caps       16
56
0
#define XENOPROF_ibs_counter        17
57
0
#define XENOPROF_last_op            17
58
59
#define MAX_OPROF_EVENTS    32
60
0
#define MAX_OPROF_DOMAINS   25
61
0
#define XENOPROF_CPU_TYPE_SIZE 64
62
63
/* Xenoprof performance events (not Xen events) */
64
struct event_log {
65
    uint64_t eip;
66
    uint8_t mode;
67
    uint8_t event;
68
};
69
70
/* PC value that indicates a special code */
71
0
#define XENOPROF_ESCAPE_CODE (~xen_mk_ullong(0))
72
/* Transient events for the xenoprof->oprofile cpu buf */
73
0
#define XENOPROF_TRACE_BEGIN 1
74
75
/* Xenoprof buffer shared between Xen and domain - 1 per VCPU */
76
struct xenoprof_buf {
77
    uint32_t event_head;
78
    uint32_t event_tail;
79
    uint32_t event_size;
80
    uint32_t vcpu_id;
81
    uint64_t xen_samples;
82
    uint64_t kernel_samples;
83
    uint64_t user_samples;
84
    uint64_t lost_samples;
85
    struct event_log event_log[1];
86
};
87
#ifndef __XEN__
88
typedef struct xenoprof_buf xenoprof_buf_t;
89
DEFINE_XEN_GUEST_HANDLE(xenoprof_buf_t);
90
#endif
91
92
struct xenoprof_init {
93
    int32_t  num_events;
94
    int32_t  is_primary;
95
    char cpu_type[XENOPROF_CPU_TYPE_SIZE];
96
};
97
typedef struct xenoprof_init xenoprof_init_t;
98
DEFINE_XEN_GUEST_HANDLE(xenoprof_init_t);
99
100
struct xenoprof_get_buffer {
101
    int32_t  max_samples;
102
    int32_t  nbuf;
103
    int32_t  bufsize;
104
    uint64_t buf_gmaddr;
105
};
106
typedef struct xenoprof_get_buffer xenoprof_get_buffer_t;
107
DEFINE_XEN_GUEST_HANDLE(xenoprof_get_buffer_t);
108
109
struct xenoprof_counter {
110
    uint32_t ind;
111
    uint64_t count;
112
    uint32_t enabled;
113
    uint32_t event;
114
    uint32_t hypervisor;
115
    uint32_t kernel;
116
    uint32_t user;
117
    uint64_t unit_mask;
118
};
119
typedef struct xenoprof_counter xenoprof_counter_t;
120
DEFINE_XEN_GUEST_HANDLE(xenoprof_counter_t);
121
122
typedef struct xenoprof_passive {
123
    uint16_t domain_id;
124
    int32_t  max_samples;
125
    int32_t  nbuf;
126
    int32_t  bufsize;
127
    uint64_t buf_gmaddr;
128
} xenoprof_passive_t;
129
DEFINE_XEN_GUEST_HANDLE(xenoprof_passive_t);
130
131
struct xenoprof_ibs_counter {
132
    uint64_t op_enabled;
133
    uint64_t fetch_enabled;
134
    uint64_t max_cnt_fetch;
135
    uint64_t max_cnt_op;
136
    uint64_t rand_en;
137
    uint64_t dispatched_ops;
138
};
139
typedef struct xenoprof_ibs_counter xenoprof_ibs_counter_t;
140
DEFINE_XEN_GUEST_HANDLE(xenoprof_ibs_counter_t);
141
142
#endif /* __XEN_PUBLIC_XENOPROF_H__ */
143
144
/*
145
 * Local variables:
146
 * mode: C
147
 * c-file-style: "BSD"
148
 * c-basic-offset: 4
149
 * tab-width: 4
150
 * indent-tabs-mode: nil
151
 * End:
152
 */