blob: 13b7a8b98cb1307400caa1f7b7e74eb65009a51c (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
|
/*
* CDDL HEADER START
*
* The contents of this file are subject to the terms of the
* Common Development and Distribution License, Version 1.0 only
* (the "License"). You may not use this file except in compliance
* with the License.
*
* You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
* or http://www.opensolaris.org/os/licensing.
* See the License for the specific language governing permissions
* and limitations under the License.
*
* When distributing Covered Code, include this CDDL HEADER in each
* file and include the License file at usr/src/OPENSOLARIS.LICENSE.
* If applicable, add the following below this CDDL HEADER, with the
* fields enclosed by brackets "[]" replaced with your own identifying
* information: Portions Copyright [yyyy] [name of copyright owner]
*
* CDDL HEADER END
*/
/*
* Copyright (c) 1994, by Sun Microsytems, Inc.
*/
#ifndef _TNF_TRACE_H
#define _TNF_TRACE_H
#pragma ident "%Z%%M% %I% %E% SMI"
#include <sys/types.h>
#include <sys/time.h>
#include <sys/tnf_probe.h>
#include <sys/thread.h>
#include <sys/processor.h>
#include "tnf_buf.h"
#include "tnf_types.h"
/*
* Minimum and default size of trace file
*/
#define TNF_TRACE_FILE_MIN (128 * 1024)
#define TNF_TRACE_FILE_DEFAULT (1 * 1024 * 1024)
/*
* Specification of index field of probe control block
*/
#define PROBE_INDEX_TYPE_MASK 0x3
#define PROBE_INDEX_MEM_PTR 0x0 /* index is a normal memory ptr */
#define PROBE_INDEX_FILE_PTR 0x1 /* index is a file abs ptr */
#define PROBE_INDEX_LOW_MASK 0xffff0000
#define PROBE_INDEX_SHIFT 16
#define PROBE_IS_FILE_PTR(x) \
(((x) & PROBE_INDEX_TYPE_MASK) == PROBE_INDEX_FILE_PTR)
#define ATTR_SEPARATOR ';'
#define VAL_SEPARATOR ' '
/*
* Flags in proc struct
*/
#define PROC_F_FILTER 0x1
#define PROC_IS_FILTER(pp) ((pp)->p_tnf_flags & PROC_F_FILTER)
#define PROC_FILTER_SET(pp) ((pp)->p_tnf_flags |= PROC_F_FILTER)
#define PROC_FILTER_CLR(pp) ((pp)->p_tnf_flags &= ~PROC_F_FILTER)
/*
* In-memory scheduling info, maintained per thread
*/
typedef struct {
tnf_record_p record_p;
tnf_uint32_t record_gen;
hrtime_t time_base;
processorid_t cpuid;
} tnf_schedule_t;
/*
* Per-thread tracing operations and state
*/
struct _tnf_ops {
char mode; /* allocation mode */
tnf_byte_lock_t busy; /* currently in a probe */
TNFW_B_WCB wcb; /* write control info */
tnf_schedule_t schedule; /* scheduling info */
};
/*
* File layout of a kernel schedule record
*/
typedef struct {
tnf_tag_t tag;
tnf_kthread_id_t tid;
tnf_lwpid_t lwpid;
tnf_pid_t pid;
/*
* time base should be on a double word boundary to avoid pads
*/
tnf_time_base_t time_base;
tnf_cpuid_t cpuid;
} tnf_schedule_prototype_t;
/*
* File layout of a probe (event tag) record
*/
typedef struct {
tnf_tag_t tag;
tnf_name_t name;
tnf_properties_t properties;
tnf_slot_types_t slot_types;
tnf_type_size_t type_size;
tnf_slot_names_t slot_names;
tnf_string_t string; /* XXX detail */
} tnf_probe_prototype_t;
/*
* Tag data variables
*/
extern tnf_tag_data_t *tnf_probe_type_tag_data;
extern tnf_tag_data_t *tnf_kernel_schedule_tag_data;
/*
*
*/
extern size_t tnf_trace_file_size;
/*
* Function prototypes
*/
/* Encoder functions */
tnf_record_p tnf_kernel_schedule(tnf_ops_t *, tnf_schedule_t *);
uintptr_t tnf_probe_tag(tnf_ops_t *, tnf_probe_control_t *);
/* Trace functions */
void *tnf_trace_alloc(tnf_ops_t *, tnf_probe_control_t *, tnf_probe_setup_t *);
void tnf_trace_commit(tnf_probe_setup_t *);
void tnf_trace_rollback(tnf_probe_setup_t *);
/* Trace control functions */
void tnf_trace_init(void);
void tnf_trace_on(void);
void tnf_trace_off(void);
#endif /* _TNF_TRACE_H */
|