@@ -15,13 +15,19 @@ struct perf_env perf_env;
1515
1616void perf_env__insert_bpf_prog_info (struct perf_env * env ,
1717 struct bpf_prog_info_node * info_node )
18+ {
19+ down_write (& env -> bpf_progs .lock );
20+ __perf_env__insert_bpf_prog_info (env , info_node );
21+ up_write (& env -> bpf_progs .lock );
22+ }
23+
24+ void __perf_env__insert_bpf_prog_info (struct perf_env * env , struct bpf_prog_info_node * info_node )
1825{
1926 __u32 prog_id = info_node -> info_linear -> info .id ;
2027 struct bpf_prog_info_node * node ;
2128 struct rb_node * parent = NULL ;
2229 struct rb_node * * p ;
2330
24- down_write (& env -> bpf_progs .lock );
2531 p = & env -> bpf_progs .infos .rb_node ;
2632
2733 while (* p != NULL ) {
@@ -33,15 +39,13 @@ void perf_env__insert_bpf_prog_info(struct perf_env *env,
3339 p = & (* p )-> rb_right ;
3440 } else {
3541 pr_debug ("duplicated bpf prog info %u\n" , prog_id );
36- goto out ;
42+ return ;
3743 }
3844 }
3945
4046 rb_link_node (& info_node -> rb_node , parent , p );
4147 rb_insert_color (& info_node -> rb_node , & env -> bpf_progs .infos );
4248 env -> bpf_progs .infos_cnt ++ ;
43- out :
44- up_write (& env -> bpf_progs .lock );
4549}
4650
4751struct bpf_prog_info_node * perf_env__find_bpf_prog_info (struct perf_env * env ,
@@ -70,14 +74,22 @@ struct bpf_prog_info_node *perf_env__find_bpf_prog_info(struct perf_env *env,
7074}
7175
7276bool perf_env__insert_btf (struct perf_env * env , struct btf_node * btf_node )
77+ {
78+ bool ret ;
79+
80+ down_write (& env -> bpf_progs .lock );
81+ ret = __perf_env__insert_btf (env , btf_node );
82+ up_write (& env -> bpf_progs .lock );
83+ return ret ;
84+ }
85+
86+ bool __perf_env__insert_btf (struct perf_env * env , struct btf_node * btf_node )
7387{
7488 struct rb_node * parent = NULL ;
7589 __u32 btf_id = btf_node -> id ;
7690 struct btf_node * node ;
7791 struct rb_node * * p ;
78- bool ret = true;
7992
80- down_write (& env -> bpf_progs .lock );
8193 p = & env -> bpf_progs .btfs .rb_node ;
8294
8395 while (* p != NULL ) {
@@ -89,25 +101,31 @@ bool perf_env__insert_btf(struct perf_env *env, struct btf_node *btf_node)
89101 p = & (* p )-> rb_right ;
90102 } else {
91103 pr_debug ("duplicated btf %u\n" , btf_id );
92- ret = false;
93- goto out ;
104+ return false;
94105 }
95106 }
96107
97108 rb_link_node (& btf_node -> rb_node , parent , p );
98109 rb_insert_color (& btf_node -> rb_node , & env -> bpf_progs .btfs );
99110 env -> bpf_progs .btfs_cnt ++ ;
100- out :
101- up_write (& env -> bpf_progs .lock );
102- return ret ;
111+ return true;
103112}
104113
105114struct btf_node * perf_env__find_btf (struct perf_env * env , __u32 btf_id )
115+ {
116+ struct btf_node * res ;
117+
118+ down_read (& env -> bpf_progs .lock );
119+ res = __perf_env__find_btf (env , btf_id );
120+ up_read (& env -> bpf_progs .lock );
121+ return res ;
122+ }
123+
124+ struct btf_node * __perf_env__find_btf (struct perf_env * env , __u32 btf_id )
106125{
107126 struct btf_node * node = NULL ;
108127 struct rb_node * n ;
109128
110- down_read (& env -> bpf_progs .lock );
111129 n = env -> bpf_progs .btfs .rb_node ;
112130
113131 while (n ) {
@@ -117,13 +135,9 @@ struct btf_node *perf_env__find_btf(struct perf_env *env, __u32 btf_id)
117135 else if (btf_id > node -> id )
118136 n = n -> rb_right ;
119137 else
120- goto out ;
138+ return node ;
121139 }
122- node = NULL ;
123-
124- out :
125- up_read (& env -> bpf_progs .lock );
126- return node ;
140+ return NULL ;
127141}
128142
129143/* purge data in bpf_progs.infos tree */
0 commit comments