ixgbe, xsk: clean up the resources in ixgbe_xsk_pool_enable error path
[ Upstream commit 1b80fec7b043552e01609bae7d0aad07aa742adc ] In ixgbe_xsk_pool_enable(), if ixgbe_xsk_wakeup() fails, We should restore the previous state and clean up the resources. Add the missing clear af_xdp_zc_qps and unmap dma to fix this bug. Fixes:d49e286d35
("ixgbe: add tracking of AF_XDP zero-copy state for each queue pair") Fixes:4a9b32f30f
("ixgbe: fix potential RX buffer starvation for AF_XDP") Signed-off-by: Wang Hai <wanghai38@huawei.com> Acked-by: Magnus Karlsson <magnus.karlsson@intel.com> Tested-by: Sandeep Penigalapati <sandeep.penigalapati@intel.com> Signed-off-by: Tony Nguyen <anthony.l.nguyen@intel.com> Link: https://lore.kernel.org/r/20210817203736.3529939-1-anthony.l.nguyen@intel.com Signed-off-by: Jakub Kicinski <kuba@kernel.org> Signed-off-by: Sasha Levin <sashal@kernel.org>
This commit is contained in:
@@ -52,9 +52,12 @@ static int ixgbe_xsk_pool_enable(struct ixgbe_adapter *adapter,
|
|||||||
|
|
||||||
/* Kick start the NAPI context so that receiving will start */
|
/* Kick start the NAPI context so that receiving will start */
|
||||||
err = ixgbe_xsk_wakeup(adapter->netdev, qid, XDP_WAKEUP_RX);
|
err = ixgbe_xsk_wakeup(adapter->netdev, qid, XDP_WAKEUP_RX);
|
||||||
if (err)
|
if (err) {
|
||||||
|
clear_bit(qid, adapter->af_xdp_zc_qps);
|
||||||
|
xsk_pool_dma_unmap(pool, IXGBE_RX_DMA_ATTR);
|
||||||
return err;
|
return err;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user