On Fri, Jan 06, 2023 at 11:23:29AM +0100, Benjamin Tissoires wrote: > > +static void hid_bpf_link_release(struct bpf_link *link) > +{ > + struct hid_bpf_link *hid_link = > + container_of(link, struct hid_bpf_link, link); > + > + __clear_bit(hid_link->index, jmp_table.enabled); > + schedule_work(&release_work); > +} ... > + link->index = prog_idx; I was super confused that you use prog_idx as a bit in jmp_table and had to look into your tree what hid_bpf_jmp_table.c is doing. Looks like it's not prog_id (which is prog->aux->id) that we know. It's hid specific prog idx in that jmp table. Maybe would be good to rename your prog_idx to something with 'hid' suffix or prefix? or 'table' suffix or prefix ? prog_table_idx ? Other than that the patch set looking great. I'm assuming removing call_hid_bpf_prog_put_deferred() and everything related comes in the next set?