blob: df225b3ce5aa3adb84c62fbc4e34572e93ddbed5 (
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
|
#ifndef UTT_H
#define UTT_H
enum {
Utt_trace_setup = 1,
Utt_trace_running,
Utt_trace_stopped,
};
struct utt_trace {
int trace_state;
struct rchan *rchan;
struct dentry *dir; /* systemtap/module_name */
struct dentry *dropped_file;
atomic_t dropped;
struct dentry *utt_tree_root; /* systemtap */
void *private_data;
atomic_t wakeup;
struct timer_list timer;
int is_global;
};
#define UTT_TRACE_ROOT_NAME_SIZE 64 /* Largest string for a root dir identifier */
#define UTT_TRACE_NAME_SIZE 64 /* Largest string for a trace identifier */
#ifndef UTT_TIMER_INTERVAL
#define UTT_TIMER_INTERVAL ((HZ + 99) / 100) /* Wakeup timer interval in jiffies (default 10 ms)*/
#endif
/*
* User setup structure
*/
struct utt_trace_setup {
char root[UTT_TRACE_ROOT_NAME_SIZE]; /* input */
char name[UTT_TRACE_NAME_SIZE]; /* input */
u32 buf_size; /* input */
u32 buf_nr; /* input */
int is_global; /* input */
int err; /* output */
};
extern struct utt_trace *utt_trace_setup(struct utt_trace_setup *utts);
extern int utt_trace_startstop(struct utt_trace *utt, int start,
unsigned int *trace_seq);
extern void utt_trace_cleanup(struct utt_trace *utt);
extern int utt_trace_remove(struct utt_trace *utt);
#ifndef STP_OLD_TRANSPORT
extern size_t utt_switch_subbuf(struct utt_trace *utt, struct rchan_buf *buf,
size_t length);
/**
* utt_reserve - reserve slot in channel buffer
* @utt: utt channel
* @length: number of bytes to reserve
*
* Returns pointer to reserved slot, NULL if full.
*
* This function is utt_switch_subbuf version of relay_reserve.
*/
static inline void *utt_reserve(struct utt_trace *utt, size_t length)
{
void *reserved;
struct rchan_buf *buf = utt->rchan->buf[smp_processor_id()];
if (unlikely(buf->offset + length > buf->chan->subbuf_size)) {
length = utt_switch_subbuf(utt, buf, length);
if (!length)
return NULL;
}
reserved = (char*)buf->data + buf->offset;
buf->offset += length;
return reserved;
}
#endif
#endif
|