On Wed, 13 Dec 2017 14:42:25 +0200 Tariq Toukan <tar...@mellanox.com> wrote:
> > @@ -650,6 +658,7 @@ int mlx4_en_process_rx_cq(struct net_device *dev, > > struct mlx4_en_cq *cq, int bud > > int cq_ring = cq->ring; > > bool doorbell_pending; > > struct mlx4_cqe *cqe; > > + struct xdp_buff xdp; > > int polled = 0; > > int index; > > > > @@ -664,6 +673,7 @@ int mlx4_en_process_rx_cq(struct net_device *dev, > > struct mlx4_en_cq *cq, int bud > > /* Protect accesses to: ring->xdp_prog, priv->mac_hash list */ > > rcu_read_lock(); > > xdp_prog = rcu_dereference(ring->xdp_prog); > > + xdp.rxq = &ring->xdp_rxq; > > You moved this to update it only once, and not per packet. Right? > This is because all fields of struct xdp_buff used to be specific > per-packet and filled in every iteration. Now you introduce a new field > which holds a context. > > Well, I still need to go over the infrastructure in your other patches, > but from first glance it seems that we can use two separated structs: > one for context, and one for per-packet info. This are two separate structs. I guess, what you are suggesting is passing them as separate structs to bpf_prog_run_xdp() ? The reason I like/want to have xdp_buff point to xdp_rxq_info, is that I want this information transferred through to the XDP_REDIRECT calls. The plan (after this patchset) is to implement a kfree_xdp_buff() that can free/return xdp frames directly to the driver (needed in err cases in redirect code) by checking if the rxq->dev have defined an ndo_xdp_return() function. -- Best regards, Jesper Dangaard Brouer MSc.CS, Principal Kernel Engineer at Red Hat LinkedIn: http://www.linkedin.com/in/brouer