Lines Matching refs:im

203 	struct bpf_tramp_image *im;  in __bpf_tramp_image_put_deferred()  local
205 im = container_of(work, struct bpf_tramp_image, work); in __bpf_tramp_image_put_deferred()
206 bpf_image_ksym_del(&im->ksym); in __bpf_tramp_image_put_deferred()
207 bpf_jit_free_exec(im->image); in __bpf_tramp_image_put_deferred()
209 percpu_ref_exit(&im->pcref); in __bpf_tramp_image_put_deferred()
210 kfree_rcu(im, rcu); in __bpf_tramp_image_put_deferred()
216 struct bpf_tramp_image *im; in __bpf_tramp_image_put_rcu() local
218 im = container_of(rcu, struct bpf_tramp_image, rcu); in __bpf_tramp_image_put_rcu()
219 INIT_WORK(&im->work, __bpf_tramp_image_put_deferred); in __bpf_tramp_image_put_rcu()
220 schedule_work(&im->work); in __bpf_tramp_image_put_rcu()
226 struct bpf_tramp_image *im; in __bpf_tramp_image_release() local
228 im = container_of(pcref, struct bpf_tramp_image, pcref); in __bpf_tramp_image_release()
229 call_rcu_tasks(&im->rcu, __bpf_tramp_image_put_rcu); in __bpf_tramp_image_release()
235 struct bpf_tramp_image *im; in __bpf_tramp_image_put_rcu_tasks() local
237 im = container_of(rcu, struct bpf_tramp_image, rcu); in __bpf_tramp_image_put_rcu_tasks()
238 if (im->ip_after_call) in __bpf_tramp_image_put_rcu_tasks()
240 percpu_ref_kill(&im->pcref); in __bpf_tramp_image_put_rcu_tasks()
243 call_rcu_tasks(&im->rcu, __bpf_tramp_image_put_rcu); in __bpf_tramp_image_put_rcu_tasks()
246 static void bpf_tramp_image_put(struct bpf_tramp_image *im) in bpf_tramp_image_put() argument
274 if (im->ip_after_call) { in bpf_tramp_image_put()
275 int err = bpf_arch_text_poke(im->ip_after_call, BPF_MOD_JUMP, in bpf_tramp_image_put()
276 NULL, im->ip_epilogue); in bpf_tramp_image_put()
279 call_rcu_tasks(&im->rcu, __bpf_tramp_image_put_rcu_tasks); in bpf_tramp_image_put()
281 percpu_ref_kill(&im->pcref); in bpf_tramp_image_put()
291 call_rcu_tasks_trace(&im->rcu, __bpf_tramp_image_put_rcu_tasks); in bpf_tramp_image_put()
296 struct bpf_tramp_image *im; in bpf_tramp_image_alloc() local
301 im = kzalloc(sizeof(*im), GFP_KERNEL); in bpf_tramp_image_alloc()
302 if (!im) in bpf_tramp_image_alloc()
310 im->image = image = bpf_jit_alloc_exec_page(); in bpf_tramp_image_alloc()
314 err = percpu_ref_init(&im->pcref, __bpf_tramp_image_release, 0, GFP_KERNEL); in bpf_tramp_image_alloc()
318 ksym = &im->ksym; in bpf_tramp_image_alloc()
322 return im; in bpf_tramp_image_alloc()
325 bpf_jit_free_exec(im->image); in bpf_tramp_image_alloc()
329 kfree(im); in bpf_tramp_image_alloc()
336 struct bpf_tramp_image *im; in bpf_trampoline_update() local
354 im = bpf_tramp_image_alloc(tr->key, tr->selector); in bpf_trampoline_update()
355 if (IS_ERR(im)) { in bpf_trampoline_update()
356 err = PTR_ERR(im); in bpf_trampoline_update()
367 err = arch_prepare_bpf_trampoline(im, im->image, im->image + PAGE_SIZE, in bpf_trampoline_update()
377 err = modify_fentry(tr, tr->cur_image->image, im->image); in bpf_trampoline_update()
380 err = register_fentry(tr, im->image); in bpf_trampoline_update()
385 tr->cur_image = im; in bpf_trampoline_update()