Lines Matching defs:im

63 	int (*register_fentry)(struct bpf_trampoline *tr, struct bpf_tramp_image *im, void *data);
65 int (*modify_fentry)(struct bpf_trampoline *tr, u32 orig_flags, struct bpf_tramp_image *im,
431 static void bpf_tramp_image_put(struct bpf_tramp_image *im);
451 static int modify_fentry(struct bpf_trampoline *tr, u32 orig_flags, struct bpf_tramp_image *im,
455 void *new_addr = im->image;
469 tr->cur_image = im;
474 static int register_fentry(struct bpf_trampoline *tr, struct bpf_tramp_image *im,
477 void *new_addr = im->image;
498 tr->cur_image = im;
563 static void bpf_tramp_image_free(struct bpf_tramp_image *im)
565 bpf_image_ksym_del(&im->ksym);
566 arch_free_bpf_trampoline(im->image, im->size);
567 bpf_jit_uncharge_modmem(im->size);
568 percpu_ref_exit(&im->pcref);
569 kfree(im->skips);
570 kfree_rcu(im, rcu);
575 struct bpf_tramp_image *im;
578 im = container_of(work, struct bpf_tramp_image, work);
579 tr = im->tr;
581 list_del(&im->list);
583 bpf_tramp_image_free(im);
590 struct bpf_tramp_image *im;
592 im = container_of(rcu, struct bpf_tramp_image, rcu);
593 INIT_WORK(&im->work, __bpf_tramp_image_put_deferred);
594 schedule_work(&im->work);
600 struct bpf_tramp_image *im;
602 im = container_of(pcref, struct bpf_tramp_image, pcref);
603 call_rcu_tasks(&im->rcu, __bpf_tramp_image_put_rcu);
609 struct bpf_tramp_image *im;
611 im = container_of(rcu, struct bpf_tramp_image, rcu);
612 if (im->call_orig)
614 percpu_ref_kill(&im->pcref);
617 call_rcu_tasks(&im->rcu, __bpf_tramp_image_put_rcu);
620 static void bpf_tramp_image_put(struct bpf_tramp_image *im)
648 if (im->call_orig) {
650 call_rcu_tasks(&im->rcu, __bpf_tramp_image_put_rcu_tasks);
652 percpu_ref_kill(&im->pcref);
662 call_rcu_tasks_trace(&im->rcu, __bpf_tramp_image_put_rcu_tasks);
667 struct bpf_tramp_image *im;
672 im = kzalloc_obj(*im);
673 if (!im)
676 im->skips = kzalloc_objs(*im->skips, nr_progs);
677 if (!im->skips)
683 im->size = size;
686 im->image = image = arch_alloc_bpf_trampoline(size);
690 err = percpu_ref_init(&im->pcref, __bpf_tramp_image_release, 0, GFP_KERNEL);
694 ksym = &im->ksym;
699 return im;
702 arch_free_bpf_trampoline(im->image, im->size);
706 kfree(im->skips);
707 kfree(im);
722 struct bpf_tramp_image *im;
783 im = bpf_tramp_image_alloc(tr->key, size, total);
784 if (IS_ERR(im)) {
785 err = PTR_ERR(im);
788 im->call_orig = tr->flags & BPF_TRAMP_F_CALL_ORIG;
790 err = arch_prepare_bpf_trampoline(im, im->image, im->image + size,
796 err = arch_protect_bpf_trampoline(im->image, im->size);
802 err = ops->modify_fentry(tr, orig_flags, im, lock_direct_mutex, data);
805 err = ops->register_fentry(tr, im, data);
813 bpf_tramp_image_free(im);
820 bpf_tramp_image_free(im);
824 im->tr = tr;
825 list_add(&im->list, &tr->images);
958 struct bpf_tramp_image *im;
961 list_for_each_entry(im, &tr->images, list) {
962 for (i = 0; i < im->nr_skips; i++) {
963 struct bpf_tramp_skip *skip = &im->skips[i];
1530 arch_prepare_bpf_trampoline(struct bpf_tramp_image *im, void *image, void *image_end,
1628 static int register_fentry_multi(struct bpf_trampoline *tr, struct bpf_tramp_image *im, void *ptr)
1630 unsigned long addr = (unsigned long) im->image;
1639 tr->cur_image = im;
1657 static int modify_fentry_multi(struct bpf_trampoline *tr, u32 orig_flags, struct bpf_tramp_image *im,
1660 unsigned long addr = (unsigned long) im->image;
1668 tr->cur_image = im;