Skip to content

Commit

Permalink
virtio_net: Factor out the logic to determine xdp sq
Browse files Browse the repository at this point in the history
Make sure to use the same logic in all places to determine xdp sq. This
is useful for xdp counters which the following commit will introduce as
well.

Signed-off-by: Toshiaki Makita <makita.toshiaki@lab.ntt.co.jp>
Signed-off-by: David S. Miller <davem@davemloft.net>
  • Loading branch information
Toshiaki Makita authored and David S. Miller committed Jul 25, 2018
1 parent 2c4a2f7 commit 2a43565
Showing 1 changed file with 12 additions and 10 deletions.
22 changes: 12 additions & 10 deletions drivers/net/virtio_net.c
Original file line number Diff line number Diff line change
Expand Up @@ -457,16 +457,22 @@ static int __virtnet_xdp_xmit_one(struct virtnet_info *vi,
return 0;
}

static struct send_queue *virtnet_xdp_sq(struct virtnet_info *vi)
{
unsigned int qp;

qp = vi->curr_queue_pairs - vi->xdp_queue_pairs + smp_processor_id();
return &vi->sq[qp];
}

static int __virtnet_xdp_tx_xmit(struct virtnet_info *vi,
struct xdp_frame *xdpf)
{
struct xdp_frame *xdpf_sent;
struct send_queue *sq;
unsigned int len;
unsigned int qp;

qp = vi->curr_queue_pairs - vi->xdp_queue_pairs + smp_processor_id();
sq = &vi->sq[qp];
sq = virtnet_xdp_sq(vi);

/* Free up any pending old buffers before queueing new ones. */
while ((xdpf_sent = virtqueue_get_buf(sq->vq, &len)) != NULL)
Expand All @@ -484,16 +490,14 @@ static int virtnet_xdp_xmit(struct net_device *dev,
struct bpf_prog *xdp_prog;
struct send_queue *sq;
unsigned int len;
unsigned int qp;
int drops = 0;
int err;
int i;

if (unlikely(flags & ~XDP_XMIT_FLAGS_MASK))
return -EINVAL;

qp = vi->curr_queue_pairs - vi->xdp_queue_pairs + smp_processor_id();
sq = &vi->sq[qp];
sq = virtnet_xdp_sq(vi);

/* Only allow ndo_xdp_xmit if XDP is loaded on dev, as this
* indicate XDP resources have been successfully allocated.
Expand Down Expand Up @@ -1349,7 +1353,7 @@ static int virtnet_poll(struct napi_struct *napi, int budget)
container_of(napi, struct receive_queue, napi);
struct virtnet_info *vi = rq->vq->vdev->priv;
struct send_queue *sq;
unsigned int received, qp;
unsigned int received;
unsigned int xdp_xmit = 0;

virtnet_poll_cleantx(rq);
Expand All @@ -1364,9 +1368,7 @@ static int virtnet_poll(struct napi_struct *napi, int budget)
xdp_do_flush_map();

if (xdp_xmit & VIRTIO_XDP_TX) {
qp = vi->curr_queue_pairs - vi->xdp_queue_pairs +
smp_processor_id();
sq = &vi->sq[qp];
sq = virtnet_xdp_sq(vi);
virtqueue_kick(sq->vq);
}

Expand Down

0 comments on commit 2a43565

Please sign in to comment.