|
|
1.1 ! root 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: #define XENOPROF_init 0 ! 38: #define XENOPROF_reset_active_list 1 ! 39: #define XENOPROF_reset_passive_list 2 ! 40: #define XENOPROF_set_active 3 ! 41: #define XENOPROF_set_passive 4 ! 42: #define XENOPROF_reserve_counters 5 ! 43: #define XENOPROF_counter 6 ! 44: #define XENOPROF_setup_events 7 ! 45: #define XENOPROF_enable_virq 8 ! 46: #define XENOPROF_start 9 ! 47: #define XENOPROF_stop 10 ! 48: #define XENOPROF_disable_virq 11 ! 49: #define XENOPROF_release_counters 12 ! 50: #define XENOPROF_shutdown 13 ! 51: #define XENOPROF_get_buffer 14 ! 52: #define XENOPROF_set_backtrace 15 ! 53: #define XENOPROF_last_op 15 ! 54: ! 55: #define MAX_OPROF_EVENTS 32 ! 56: #define MAX_OPROF_DOMAINS 25 ! 57: #define XENOPROF_CPU_TYPE_SIZE 64 ! 58: ! 59: /* Xenoprof performance events (not Xen events) */ ! 60: struct event_log { ! 61: uint64_t eip; ! 62: uint8_t mode; ! 63: uint8_t event; ! 64: }; ! 65: ! 66: /* PC value that indicates a special code */ ! 67: #define XENOPROF_ESCAPE_CODE ~0UL ! 68: /* Transient events for the xenoprof->oprofile cpu buf */ ! 69: #define XENOPROF_TRACE_BEGIN 1 ! 70: ! 71: /* Xenoprof buffer shared between Xen and domain - 1 per VCPU */ ! 72: struct xenoprof_buf { ! 73: uint32_t event_head; ! 74: uint32_t event_tail; ! 75: uint32_t event_size; ! 76: uint32_t vcpu_id; ! 77: uint64_t xen_samples; ! 78: uint64_t kernel_samples; ! 79: uint64_t user_samples; ! 80: uint64_t lost_samples; ! 81: struct event_log event_log[1]; ! 82: }; ! 83: #ifndef __XEN__ ! 84: typedef struct xenoprof_buf xenoprof_buf_t; ! 85: DEFINE_XEN_GUEST_HANDLE(xenoprof_buf_t); ! 86: #endif ! 87: ! 88: struct xenoprof_init { ! 89: int32_t num_events; ! 90: int32_t is_primary; ! 91: char cpu_type[XENOPROF_CPU_TYPE_SIZE]; ! 92: }; ! 93: typedef struct xenoprof_init xenoprof_init_t; ! 94: DEFINE_XEN_GUEST_HANDLE(xenoprof_init_t); ! 95: ! 96: struct xenoprof_get_buffer { ! 97: int32_t max_samples; ! 98: int32_t nbuf; ! 99: int32_t bufsize; ! 100: uint64_t buf_gmaddr; ! 101: }; ! 102: typedef struct xenoprof_get_buffer xenoprof_get_buffer_t; ! 103: DEFINE_XEN_GUEST_HANDLE(xenoprof_get_buffer_t); ! 104: ! 105: struct xenoprof_counter { ! 106: uint32_t ind; ! 107: uint64_t count; ! 108: uint32_t enabled; ! 109: uint32_t event; ! 110: uint32_t hypervisor; ! 111: uint32_t kernel; ! 112: uint32_t user; ! 113: uint64_t unit_mask; ! 114: }; ! 115: typedef struct xenoprof_counter xenoprof_counter_t; ! 116: DEFINE_XEN_GUEST_HANDLE(xenoprof_counter_t); ! 117: ! 118: typedef struct xenoprof_passive { ! 119: uint16_t domain_id; ! 120: int32_t max_samples; ! 121: int32_t nbuf; ! 122: int32_t bufsize; ! 123: uint64_t buf_gmaddr; ! 124: } xenoprof_passive_t; ! 125: DEFINE_XEN_GUEST_HANDLE(xenoprof_passive_t); ! 126: ! 127: ! 128: #endif /* __XEN_PUBLIC_XENOPROF_H__ */ ! 129: ! 130: /* ! 131: * Local variables: ! 132: * mode: C ! 133: * c-set-style: "BSD" ! 134: * c-basic-offset: 4 ! 135: * tab-width: 4 ! 136: * indent-tabs-mode: nil ! 137: * End: ! 138: */
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.