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

Reply via email to