On Fri, 29 Sep 2017 20:06:09 -0700
Alexei Starovoitov <alexei.starovoi...@gmail.com> wrote:

> > +/*** Trace point code ***/
> > +
> > +/* Tracepoint format: 
> > /sys/kernel/debug/tracing/events/xdp/xdp_redirect/format
> > + * Code in:                kernel/include/trace/events/xdp.h
> > + */
> > +struct xdp_redirect_ctx {
> > +   unsigned short common_type;     //      offset:0;  size:2; signed:0;
> > +   unsigned char common_flags;     //      offset:2;  size:1; signed:0;
> > +   unsigned char common_preempt_count;//   offset:3;  size:1; signed:0;
> > +   int common_pid;                 //      offset:4;  size:4; signed:1;  
> 
> this part is not right. First 8 bytes are not accessible by bpf code.
> Please use __u64 pad; or similar here.

I've corrected this in V3.

Can you explain why BPF cannot access these (first 8 bytes) struct members?


> Just noticed that samples/bpf/xdp_monitor_kern.c has the same problem.
> 
> > +
> > +   int prog_id;                    //      offset:8;  size:4; signed:1;
> > +   u32 act;                        //      offset:12  size:4; signed:0;
> > +   int ifindex;                    //      offset:16  size:4; signed:1;
> > +   int err;                        //      offset:20  size:4; signed:1;
> > +   int to_ifindex;                 //      offset:24  size:4; signed:1;
> > +   u32 map_id;                     //      offset:28  size:4; signed:0;
> > +   int map_index;                  //      offset:32  size:4; signed:1;
> > +};                                 //      offset:36  
> 
> the second part of fields is correct.


-- 
Best regards,
  Jesper Dangaard Brouer
  MSc.CS, Principal Kernel Engineer at Red Hat
  LinkedIn: http://www.linkedin.com/in/brouer

Reply via email to