igb: refactor XDP registration
On changing the RX ring parameters igb uses a hack to avoid a warning when calling xdp_rxq_info_reg via igb_setup_rx_resources. It just clears the struct xdp_rxq_info content. Instead, change this to unregister if we're already registered. Align code to the igc code. Fixes: 9cbc948b5a20c ("igb: add XDP support") Signed-off-by: Corinna Vinschen <vinschen@redhat.com> Acked-by: Vinicius Costa Gomes <vinicius.gomes@intel.com> Tested-by: Sandeep Penigalapati <sandeep.penigalapati@intel.com> Signed-off-by: Tony Nguyen <anthony.l.nguyen@intel.com>
This commit is contained in:
parent
453307b569
commit
e62ad74aa5
@ -965,10 +965,6 @@ static int igb_set_ringparam(struct net_device *netdev,
|
||||
memcpy(&temp_ring[i], adapter->rx_ring[i],
|
||||
sizeof(struct igb_ring));
|
||||
|
||||
/* Clear copied XDP RX-queue info */
|
||||
memset(&temp_ring[i].xdp_rxq, 0,
|
||||
sizeof(temp_ring[i].xdp_rxq));
|
||||
|
||||
temp_ring[i].count = new_rx_count;
|
||||
err = igb_setup_rx_resources(&temp_ring[i]);
|
||||
if (err) {
|
||||
|
@ -4345,7 +4345,18 @@ int igb_setup_rx_resources(struct igb_ring *rx_ring)
|
||||
{
|
||||
struct igb_adapter *adapter = netdev_priv(rx_ring->netdev);
|
||||
struct device *dev = rx_ring->dev;
|
||||
int size;
|
||||
int size, res;
|
||||
|
||||
/* XDP RX-queue info */
|
||||
if (xdp_rxq_info_is_reg(&rx_ring->xdp_rxq))
|
||||
xdp_rxq_info_unreg(&rx_ring->xdp_rxq);
|
||||
res = xdp_rxq_info_reg(&rx_ring->xdp_rxq, rx_ring->netdev,
|
||||
rx_ring->queue_index, 0);
|
||||
if (res < 0) {
|
||||
dev_err(dev, "Failed to register xdp_rxq index %u\n",
|
||||
rx_ring->queue_index);
|
||||
return res;
|
||||
}
|
||||
|
||||
size = sizeof(struct igb_rx_buffer) * rx_ring->count;
|
||||
|
||||
@ -4368,14 +4379,10 @@ int igb_setup_rx_resources(struct igb_ring *rx_ring)
|
||||
|
||||
rx_ring->xdp_prog = adapter->xdp_prog;
|
||||
|
||||
/* XDP RX-queue info */
|
||||
if (xdp_rxq_info_reg(&rx_ring->xdp_rxq, rx_ring->netdev,
|
||||
rx_ring->queue_index, 0) < 0)
|
||||
goto err;
|
||||
|
||||
return 0;
|
||||
|
||||
err:
|
||||
xdp_rxq_info_unreg(&rx_ring->xdp_rxq);
|
||||
vfree(rx_ring->rx_buffer_info);
|
||||
rx_ring->rx_buffer_info = NULL;
|
||||
dev_err(dev, "Unable to allocate memory for the Rx descriptor ring\n");
|
||||
|
Loading…
x
Reference in New Issue
Block a user