@@ -20,31 +20,26 @@ struct {
20
20
__u64 counts [NR_SOFTIRQS ] = {};
21
21
struct hist hists [NR_SOFTIRQS ] = {};
22
22
23
- SEC ("tp_btf/softirq_entry" )
24
- int BPF_PROG (softirq_entry , unsigned int vec_nr )
23
+ static int handle_entry (unsigned int vec_nr )
25
24
{
26
25
u64 ts = bpf_ktime_get_ns ();
27
26
u32 key = 0 ;
28
27
29
- bpf_map_update_elem (& start , & key , & ts , 0 );
28
+ bpf_map_update_elem (& start , & key , & ts , BPF_ANY );
30
29
return 0 ;
31
30
}
32
31
33
- SEC ("tp_btf/softirq_exit" )
34
- int BPF_PROG (softirq_exit , unsigned int vec_nr )
32
+ static int handle_exit (unsigned int vec_nr )
35
33
{
34
+ u64 delta , * tsp ;
36
35
u32 key = 0 ;
37
- s64 delta ;
38
- u64 * tsp ;
39
36
40
37
if (vec_nr >= NR_SOFTIRQS )
41
38
return 0 ;
42
39
tsp = bpf_map_lookup_elem (& start , & key );
43
- if (!tsp || ! * tsp )
40
+ if (!tsp )
44
41
return 0 ;
45
42
delta = bpf_ktime_get_ns () - * tsp ;
46
- if (delta < 0 )
47
- return 0 ;
48
43
if (!targ_ns )
49
44
delta /= 1000U ;
50
45
@@ -64,4 +59,28 @@ int BPF_PROG(softirq_exit, unsigned int vec_nr)
64
59
return 0 ;
65
60
}
66
61
62
+ SEC ("tp_btf/softirq_entry" )
63
+ int BPF_PROG (softirq_entry_btf , unsigned int vec_nr )
64
+ {
65
+ return handle_entry (vec_nr );
66
+ }
67
+
68
+ SEC ("tp_btf/softirq_exit" )
69
+ int BPF_PROG (softirq_exit_btf , unsigned int vec_nr )
70
+ {
71
+ return handle_exit (vec_nr );
72
+ }
73
+
74
+ SEC ("raw_tp/softirq_entry" )
75
+ int BPF_PROG (softirq_entry , unsigned int vec_nr )
76
+ {
77
+ return handle_entry (vec_nr );
78
+ }
79
+
80
+ SEC ("raw_tp/softirq_exit" )
81
+ int BPF_PROG (softirq_exit , unsigned int vec_nr )
82
+ {
83
+ return handle_exit (vec_nr );
84
+ }
85
+
67
86
char LICENSE [] SEC ("license" ) = "GPL" ;
0 commit comments