> -----Original Message----- > From: Ananyev, Konstantin <konstantin.anan...@intel.com> > Sent: Monday, August 12, 2019 5:08 PM > To: Jerin Jacob Kollanukkaran <jer...@marvell.com>; dev@dpdk.org > Cc: tho...@monjalon.net; sta...@dpdk.org > Subject: [EXT] RE: [dpdk-dev] [PATCH] bpf: fix to allow ptr stack program > type > > External Email > > ---------------------------------------------------------------------- > > > > Hi Jerin, > > > > Hi Konstantin, > > > > > > > > > > > > > bpf_validate does not allow to execute RTE_BPF_ARG_PTR_STACK for > > > > no reason. > > > > > > I believe there is a reason, > > > ARG_PTR_STACK is reserved for memory within BPF program internal > > > stack only. > > > User that calls BPF program should never pass parameter with that type. > > > > OK. > > Shouldn't we remove that from public header file > > (lib/librte_bpf/rte_bpf.h) then ? > > Probably... or might be just put extra comments to mark it as internal? > The reason I left it here, so we can add new public values for enum here, > before RTE_BPF_ARG_PTR_STACK. > Of course in theory we can use for RTE_BPF_ARG_PTR_STACK some > reserved value instead. > > > > > > If the user allocates parameter for bpf function on the stack, he > > > can still use RTE_BPF_ARG_PTR for it. > > > > I see the _stack_ is only allocated under RTE_BPF_ARG_PTR_STACK checks > in bpf_validate.c. > > Can you check? I agree that stack should be allocated for > RTE_BPF_ARG_PTR as well. > > Not sure I understand your query here... > Each BPF program can use up to MAX_BPF_STACK_SIZE bytes for stack. > Though to avoid JIT to allocate unused space for the stack, in bpf_validate.c > we figure out does given BPF program really allocate things on the stack and > if yes, how many bytes is needed. > This info is stored in rte_bpf.stack_sz and can be used later by the JIT. > Let say for x86 jit is used in emit_prolog().
I thought, stack will be allocated only when user gives RTE_BPF_ARG_PTR_STACK. I tested following program with RTE_BPF_ARG_PTR. It allocates stacks Properly. So everything is good. stdw [r10-64], 0xab mov r0, 0 exit I will modify this patch to following to avoid any confusion to user: 1) Change RTE_BPF_ARG_PTR_STACK to RTE_BPF_ARG_RESERVED in public header file 2) In the implementation #define RTE_BPF_ARG_RESERVED BPF_ARG_PTR_STACK Is it OK?