Re: [PATCH net-next] virito-net: set queues after reset during xdp_set

From: Jason Wang
Date: Sun Feb 19 2017 - 22:48:11 EST

On 2017å02æ19æ 13:08, Michael S. Tsirkin wrote:
- oxdp_qp = vi->xdp_queue_pairs;
/* Changing the headroom in buffers is a disruptive operation because
* existing buffers must be flushed and reallocated. This will happen
* when a xdp program is initially added or xdp is disabled by removing
* the xdp program resulting in number of XDP queues changing.
if (vi->xdp_queue_pairs != xdp_qp) {
- vi->xdp_queue_pairs = xdp_qp;
err = virtnet_reset(vi);
- if (err)
+ if (err) {
+ dev_warn(&dev->dev, "XDP reset failure.\n");
goto virtio_reset_err;
+ }
+ vi->xdp_queue_pairs = xdp_qp;
But xdp_queue_pairs is being used to detect if we should allocate the XDP
headroom. If we move it here do we have a set of buffers in the ring without
the proper headroom when we assign the xdp program below?
Right, so how about passing xdp_queue_pairs as a parameter to
virtnet_reset(). Then virtnet_reset() can set it after _remove_vq_common()
but before virtnet_restore_up()?

Jason, wouldn't you say it's cleaner to avoid resets?
Would you be interested in completing this work:


Yes, but this seems still need drop packets, is this acceptable?