Lines Matching full:im
258 static void bpf_tramp_image_free(struct bpf_tramp_image *im)
260 bpf_image_ksym_del(&im->ksym);
261 arch_free_bpf_trampoline(im->image, im->size);
262 bpf_jit_uncharge_modmem(im->size);
263 percpu_ref_exit(&im->pcref);
264 kfree_rcu(im, rcu);
269 struct bpf_tramp_image *im;
271 im = container_of(work, struct bpf_tramp_image, work);
272 bpf_tramp_image_free(im);
278 struct bpf_tramp_image *im;
280 im = container_of(rcu, struct bpf_tramp_image, rcu);
281 INIT_WORK(&im->work, __bpf_tramp_image_put_deferred);
282 schedule_work(&im->work);
288 struct bpf_tramp_image *im;
290 im = container_of(pcref, struct bpf_tramp_image, pcref);
291 call_rcu_tasks(&im->rcu, __bpf_tramp_image_put_rcu);
297 struct bpf_tramp_image *im;
299 im = container_of(rcu, struct bpf_tramp_image, rcu);
300 if (im->ip_after_call)
302 percpu_ref_kill(&im->pcref);
305 call_rcu_tasks(&im->rcu, __bpf_tramp_image_put_rcu);
308 static void bpf_tramp_image_put(struct bpf_tramp_image *im)
336 if (im->ip_after_call) {
337 int err = bpf_arch_text_poke(im->ip_after_call, BPF_MOD_JUMP,
338 NULL, im->ip_epilogue);
341 call_rcu_tasks(&im->rcu, __bpf_tramp_image_put_rcu_tasks);
343 percpu_ref_kill(&im->pcref);
353 call_rcu_tasks_trace(&im->rcu, __bpf_tramp_image_put_rcu_tasks);
358 struct bpf_tramp_image *im;
363 im = kzalloc(sizeof(*im), GFP_KERNEL);
364 if (!im)
370 im->size = size;
373 im->image = image = arch_alloc_bpf_trampoline(size);
377 err = percpu_ref_init(&im->pcref, __bpf_tramp_image_release, 0, GFP_KERNEL);
381 ksym = &im->ksym;
386 return im;
389 arch_free_bpf_trampoline(im->image, im->size);
393 kfree(im);
400 struct bpf_tramp_image *im;
452 im = bpf_tramp_image_alloc(tr->key, size);
453 if (IS_ERR(im)) {
454 err = PTR_ERR(im);
458 err = arch_prepare_bpf_trampoline(im, im->image, im->image + size,
464 err = arch_protect_bpf_trampoline(im->image, im->size);
471 err = modify_fentry(tr, tr->cur_image->image, im->image, lock_direct_mutex);
474 err = register_fentry(tr, im->image);
486 /* free im memory and reallocate later */
487 bpf_tramp_image_free(im);
496 tr->cur_image = im;
505 bpf_tramp_image_free(im);
1090 arch_prepare_bpf_trampoline(struct bpf_tramp_image *im, void *image, void *image_end,