mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2026-05-10 20:02:10 -04:00
octeontx2-pf: Reconfigure RSS table after enabling AF_XDP zerocopy on rx queue
RSS table needs to be reconfigured once a rx queue is enabled or disabled for AF_XDP zerocopy support. After enabling UMEM on a rx queue, that queue should not be part of RSS queue selection algorithm. Similarly the queue should be considered again after UMEM is disabled. Signed-off-by: Suman Ghosh <sumang@marvell.com> Signed-off-by: Paolo Abeni <pabeni@redhat.com>
This commit is contained in:
@@ -331,6 +331,10 @@ int otx2_set_rss_table(struct otx2_nic *pfvf, int ctx_id)
|
||||
rss_ctx = rss->rss_ctx[ctx_id];
|
||||
/* Get memory to put this msg */
|
||||
for (idx = 0; idx < rss->rss_size; idx++) {
|
||||
/* Ignore the queue if AF_XDP zero copy is enabled */
|
||||
if (test_bit(rss_ctx->ind_tbl[idx], pfvf->af_xdp_zc_qidx))
|
||||
continue;
|
||||
|
||||
aq = otx2_mbox_alloc_msg_nix_aq_enq(mbox);
|
||||
if (!aq) {
|
||||
/* The shared memory buffer can be full.
|
||||
|
||||
@@ -910,8 +910,12 @@ static int otx2_get_rxfh(struct net_device *dev,
|
||||
return -ENOENT;
|
||||
|
||||
if (indir) {
|
||||
for (idx = 0; idx < rss->rss_size; idx++)
|
||||
for (idx = 0; idx < rss->rss_size; idx++) {
|
||||
/* Ignore if the rx queue is AF_XDP zero copy enabled */
|
||||
if (test_bit(rss_ctx->ind_tbl[idx], pfvf->af_xdp_zc_qidx))
|
||||
continue;
|
||||
indir[idx] = rss_ctx->ind_tbl[idx];
|
||||
}
|
||||
}
|
||||
if (rxfh->key)
|
||||
memcpy(rxfh->key, rss->key, sizeof(rss->key));
|
||||
|
||||
@@ -130,6 +130,8 @@ int otx2_xsk_pool_enable(struct otx2_nic *pf, struct xsk_buff_pool *pool, u16 qi
|
||||
|
||||
set_bit(qidx, pf->af_xdp_zc_qidx);
|
||||
otx2_clean_up_rq(pf, qidx);
|
||||
/* Reconfigure RSS table as 'qidx' cannot be part of RSS now */
|
||||
otx2_set_rss_table(pf, DEFAULT_RSS_CONTEXT_GROUP);
|
||||
/* Kick start the NAPI context so that receiving will start */
|
||||
return otx2_xsk_wakeup(pf->netdev, qidx, XDP_WAKEUP_RX);
|
||||
}
|
||||
@@ -146,6 +148,8 @@ int otx2_xsk_pool_disable(struct otx2_nic *pf, u16 qidx)
|
||||
otx2_clean_up_rq(pf, qidx);
|
||||
clear_bit(qidx, pf->af_xdp_zc_qidx);
|
||||
xsk_pool_dma_unmap(pool, DMA_ATTR_SKIP_CPU_SYNC | DMA_ATTR_WEAK_ORDERING);
|
||||
/* Reconfigure RSS table as 'qidx' now need to be part of RSS now */
|
||||
otx2_set_rss_table(pf, DEFAULT_RSS_CONTEXT_GROUP);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user