Annotation of Gnu-Mach/xen/public/xenoprof.h, revision 1.1.1.1

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:  */

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.