/root/src/xen/xen/include/xen/xenoprof.h
Line | Count | Source (jump to first uncovered line) |
1 | | /****************************************************************************** |
2 | | * xenoprof.h |
3 | | * |
4 | | * Xenoprof: Xenoprof enables performance profiling in Xen |
5 | | * |
6 | | * Copyright (C) 2005 Hewlett-Packard Co. |
7 | | * written by Aravind Menon & Jose Renato Santos |
8 | | */ |
9 | | |
10 | | #ifndef __XEN_XENOPROF_H__ |
11 | | #define __XEN_XENOPROF_H__ |
12 | | |
13 | | #include <xen/inttypes.h> |
14 | | #include <public/xenoprof.h> |
15 | | #include <asm/xenoprof.h> |
16 | | |
17 | 0 | #define PMU_OWNER_NONE 0 |
18 | 0 | #define PMU_OWNER_XENOPROF 1 |
19 | 0 | #define PMU_OWNER_HVM 2 |
20 | | |
21 | | #ifdef CONFIG_XENOPROF |
22 | | |
23 | 0 | #define XENOPROF_DOMAIN_IGNORED 0 |
24 | 0 | #define XENOPROF_DOMAIN_ACTIVE 1 |
25 | 0 | #define XENOPROF_DOMAIN_PASSIVE 2 |
26 | | |
27 | | #define XENOPROF_IDLE 0 |
28 | 0 | #define XENOPROF_INITIALIZED 1 |
29 | 0 | #define XENOPROF_COUNTERS_RESERVED 2 |
30 | 0 | #define XENOPROF_READY 3 |
31 | 0 | #define XENOPROF_PROFILING 4 |
32 | | |
33 | | #ifndef CONFIG_COMPAT |
34 | | typedef struct xenoprof_buf xenoprof_buf_t; |
35 | | #else |
36 | | #include <compat/xenoprof.h> |
37 | | typedef union { |
38 | | struct xenoprof_buf native; |
39 | | struct compat_oprof_buf compat; |
40 | | } xenoprof_buf_t; |
41 | | #endif |
42 | | |
43 | | struct xenoprof_vcpu { |
44 | | int event_size; |
45 | | xenoprof_buf_t *buffer; |
46 | | }; |
47 | | |
48 | | struct xenoprof { |
49 | | char *rawbuf; |
50 | | int npages; |
51 | | int nbuf; |
52 | | int bufsize; |
53 | | int domain_type; |
54 | | int domain_ready; |
55 | | int is_primary; |
56 | | #ifdef CONFIG_COMPAT |
57 | | int is_compat; |
58 | | #endif |
59 | | struct xenoprof_vcpu *vcpu; |
60 | | }; |
61 | | |
62 | | #ifndef CONFIG_COMPAT |
63 | | #define XENOPROF_COMPAT(x) 0 |
64 | | #define xenoprof_buf(d, b, field) ((b)->field) |
65 | | #else |
66 | 0 | #define XENOPROF_COMPAT(x) ((x)->is_compat) |
67 | 0 | #define xenoprof_buf(d, b, field) (*(!(d)->xenoprof->is_compat ? \ |
68 | 0 | &(b)->native.field : \ |
69 | 0 | &(b)->compat.field)) |
70 | | #endif |
71 | | |
72 | | struct domain; |
73 | | |
74 | | int acquire_pmu_ownership(int pmu_ownership); |
75 | | void release_pmu_ownership(int pmu_ownership); |
76 | | |
77 | | int is_active(struct domain *d); |
78 | | int is_passive(struct domain *d); |
79 | | void free_xenoprof_pages(struct domain *d); |
80 | | |
81 | | int xenoprof_add_trace(struct vcpu *, uint64_t pc, int mode); |
82 | | |
83 | | void xenoprof_log_event(struct vcpu *, const struct cpu_user_regs *, |
84 | | uint64_t pc, int mode, int event); |
85 | | |
86 | | #else |
87 | | static inline int acquire_pmu_ownership(int pmu_ownership) |
88 | | { |
89 | | return 1; |
90 | | } |
91 | | |
92 | | static inline void release_pmu_ownership(int pmu_ownership) |
93 | | { |
94 | | } |
95 | | #endif /* CONFIG_XENOPROF */ |
96 | | |
97 | | #endif /* __XEN__XENOPROF_H__ */ |