@@ -24,13 +24,19 @@ struct perf_env perf_env;
2424
2525void perf_env__insert_bpf_prog_info (struct perf_env * env ,
2626 struct bpf_prog_info_node * info_node )
27+ {
28+ down_write (& env -> bpf_progs .lock );
29+ __perf_env__insert_bpf_prog_info (env , info_node );
30+ up_write (& env -> bpf_progs .lock );
31+ }
32+
33+ void __perf_env__insert_bpf_prog_info (struct perf_env * env , struct bpf_prog_info_node * info_node )
2734{
2835 __u32 prog_id = info_node -> info_linear -> info .id ;
2936 struct bpf_prog_info_node * node ;
3037 struct rb_node * parent = NULL ;
3138 struct rb_node * * p ;
3239
33- down_write (& env -> bpf_progs .lock );
3440 p = & env -> bpf_progs .infos .rb_node ;
3541
3642 while (* p != NULL ) {
@@ -42,15 +48,13 @@ void perf_env__insert_bpf_prog_info(struct perf_env *env,
4248 p = & (* p )-> rb_right ;
4349 } else {
4450 pr_debug ("duplicated bpf prog info %u\n" , prog_id );
45- goto out ;
51+ return ;
4652 }
4753 }
4854
4955 rb_link_node (& info_node -> rb_node , parent , p );
5056 rb_insert_color (& info_node -> rb_node , & env -> bpf_progs .infos );
5157 env -> bpf_progs .infos_cnt ++ ;
52- out :
53- up_write (& env -> bpf_progs .lock );
5458}
5559
5660struct bpf_prog_info_node * perf_env__find_bpf_prog_info (struct perf_env * env ,
@@ -79,14 +83,22 @@ struct bpf_prog_info_node *perf_env__find_bpf_prog_info(struct perf_env *env,
7983}
8084
8185bool perf_env__insert_btf (struct perf_env * env , struct btf_node * btf_node )
86+ {
87+ bool ret ;
88+
89+ down_write (& env -> bpf_progs .lock );
90+ ret = __perf_env__insert_btf (env , btf_node );
91+ up_write (& env -> bpf_progs .lock );
92+ return ret ;
93+ }
94+
95+ bool __perf_env__insert_btf (struct perf_env * env , struct btf_node * btf_node )
8296{
8397 struct rb_node * parent = NULL ;
8498 __u32 btf_id = btf_node -> id ;
8599 struct btf_node * node ;
86100 struct rb_node * * p ;
87- bool ret = true;
88101
89- down_write (& env -> bpf_progs .lock );
90102 p = & env -> bpf_progs .btfs .rb_node ;
91103
92104 while (* p != NULL ) {
@@ -98,25 +110,31 @@ bool perf_env__insert_btf(struct perf_env *env, struct btf_node *btf_node)
98110 p = & (* p )-> rb_right ;
99111 } else {
100112 pr_debug ("duplicated btf %u\n" , btf_id );
101- ret = false;
102- goto out ;
113+ return false;
103114 }
104115 }
105116
106117 rb_link_node (& btf_node -> rb_node , parent , p );
107118 rb_insert_color (& btf_node -> rb_node , & env -> bpf_progs .btfs );
108119 env -> bpf_progs .btfs_cnt ++ ;
109- out :
110- up_write (& env -> bpf_progs .lock );
111- return ret ;
120+ return true;
112121}
113122
114123struct btf_node * perf_env__find_btf (struct perf_env * env , __u32 btf_id )
124+ {
125+ struct btf_node * res ;
126+
127+ down_read (& env -> bpf_progs .lock );
128+ res = __perf_env__find_btf (env , btf_id );
129+ up_read (& env -> bpf_progs .lock );
130+ return res ;
131+ }
132+
133+ struct btf_node * __perf_env__find_btf (struct perf_env * env , __u32 btf_id )
115134{
116135 struct btf_node * node = NULL ;
117136 struct rb_node * n ;
118137
119- down_read (& env -> bpf_progs .lock );
120138 n = env -> bpf_progs .btfs .rb_node ;
121139
122140 while (n ) {
@@ -126,13 +144,9 @@ struct btf_node *perf_env__find_btf(struct perf_env *env, __u32 btf_id)
126144 else if (btf_id > node -> id )
127145 n = n -> rb_right ;
128146 else
129- goto out ;
147+ return node ;
130148 }
131- node = NULL ;
132-
133- out :
134- up_read (& env -> bpf_progs .lock );
135- return node ;
149+ return NULL ;
136150}
137151
138152/* purge data in bpf_progs.infos tree */
0 commit comments