On Tue, May 9, 2023 at 7:39 PM Yafang Shao <laoar.shao@xxxxxxxxx> wrote: > > On Wed, May 10, 2023 at 1:41 AM Song Liu <song@xxxxxxxxxx> wrote: [...] > > > +static void bpf_tramp_image_free(struct bpf_tramp_image *im) > > > +{ > > > + bpf_image_ksym_del(&im->ksym); > > > + bpf_jit_free_exec(im->image); > > > + bpf_jit_uncharge_modmem(PAGE_SIZE); > > > + percpu_ref_exit(&im->pcref); > > > + kfree(im); > > > +} > > > > Can we share some of this function with __bpf_tramp_image_put_deferred? > > > > It seems we can introduce a generic helper as follows, > static void __bpf_tramp_image_free(struct bpf_tramp_image *im) > { > bpf_image_ksym_del(&im->ksym); > bpf_jit_free_exec(im->image); > bpf_jit_uncharge_modmem(PAGE_SIZE); > percpu_ref_exit(&im->pcref); > } > > And then use it in both bpf_tramp_image_free() and > __bpf_tramp_image_put_deferred(). > WDYT? How about we also use kfree_rcu() in bpf_tramp_image_free()? Thanks, Song