discuss marker types
[lttv.git] / ltt / branches / poly / doc / developer / marker-types.txt
CommitLineData
5a1e0e3f 1
2#define MARK_TRAP 1
3#define _MARK_TRAP (1 << MARK_TRAP)
4 Can generate a trap
5
6#define MARK_PREEMPT 2
7#define _MARK_PREEMPT (1 << MARK_PREEMPT)
8 Permits blocking calls within probe.
9 How to deal with probe removal :
10 Each site has its per cpu probe_exec counters. The sum of the signed values
11 gives the number of executors. Operations inc/dec on those values are done
12 within preempt disable so they can be done non atomically without risking
13 to be corrupted by another CPU.
14 1 - disable site and remove call
15 2 - while sum of probe_exec counters != 0, sleep 50ms
16 fail after 10 loops
17 - if someone sleeps in here for a long time or waits for
18 a busy ressource, removal may fail with -EBUSY.
19
20site :
21
22if (enable) {
23 preempt_disable();
24 probe_exec[smp_processor_id()]++;
25 preempt_enable();
26 handler();
27 preempt_disable();
28 probe_exec[smp_processor_id()]--;
29 preempt_enable();
30}
31
32#define MARK_RESCHED 3
33#define _MARK_RESCHED (1 << MARK_RESCHED)
34 preempt_schedule() will be called by the marker.
35
36#define _MARK_DEFAULT (~_MARK_PREEMPT | _MARK_TRAP | _MARK_RESCHED)
37
38#define MARK (format, ...) MARK_OPTIONS(MARK_DEFAULT, format, __VA_ARGS__)
39
40ex. i386
41#define MARK_OPTIONS(opt, format, ...) \
42{ \
43 if (opt & _MARK_NO_TRAP) \
44 GEN_MARK(opt, format, __VA_ARGS__); \
45 else \
46 MARK(opt, format, __VA_ARGS__); \
47}
48
49ex. powerpc
50#define MARK_OPTIONS(opt, format, ...) MARK(opt, format, __VA_ARGS__);
51
52
53MARK(opt, format, ...) \
54static declare opt in struct; \
55if (enable) {
56 preempt_disable();
57 if (opt & _MARK_PREEMPT) {
58 probe_exec[smp_processor_id()]++;
59 if (opt & _MARK_RESCHED)
60 preempt_enable();
61 else
62 preempt_enable_no_resched();
63 }
64 handler();
65 if (opt & _MARK_PREEMPT) {
66 preempt_disable();
67 probe_exec[smp_processor_id()]--;
68 }
69 if (opt & _MARK_RESCHED)
70 preempt_enable();
71 else
72 preempt_enable_no_resched();
73}
74
75
76
This page took 0.024252 seconds and 4 git commands to generate.