On Wed, Mar 01, 2023 at 08:28:40PM -0800, Joanne Koong wrote: > On Wed, Mar 1, 2023 at 10:08 AM Alexei Starovoitov > <alexei.starovoitov@xxxxxxxxx> wrote: > > > > On Wed, Mar 1, 2023 at 7:51 AM Joanne Koong <joannelkoong@xxxxxxxxx> wrote: > > > > > > 5) progs/dynptr_success.c > > > * Add test case "test_skb_readonly" for testing attempts at writes > > > on a prog type with read-only skb ctx. > > > * Add "test_dynptr_skb_data" for testing that bpf_dynptr_data isn't > > > supported for skb progs. > > > > I added > > +dynptr/test_dynptr_skb_data > > +dynptr/test_skb_readonly > > to DENYLIST.s390x and applied. > > Thanks, I'm still not sure why s390x cannot load these programs. It is > being loaded in the same way as other tests like > test_parse_tcp_hdr_opt() are loading programs. I will keep looking > some more into this Hi, I believe the culprit is: insn->imm = BPF_CALL_IMM(bpf_dynptr_from_skb_rdonly); s390x needs to know the kfunc model in order to emit the call (like i386), but after this assignment it's no longer possible to look it up in kfunc_tab by insn->imm. x86_64 does not need this, because its ABI is exactly the same as BPF ABI. The simplest solution seems to be adding an artificial kfunc_desc like this: { .func_model = desc->func_model, /* model must be compatible */ .func_id = 0, /* unused at this point */ .imm = insn->imm, /* new target */ .offset = 0, /* unused at this point */ } here and also after this assignment: insn->imm = BPF_CALL_IMM(xdp_kfunc); What do you think? [...] Best regards, Ilya