Commit 25b07c1a authored by Suman Ghosh's avatar Suman Ghosh Committed by Paolo Abeni
Browse files

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: default avatarSuman Ghosh <sumang@marvell.com>
Signed-off-by: default avatarPaolo Abeni <pabeni@redhat.com>
parent efabce29
Loading
Loading
Loading
Loading
+4 −0
Original line number Diff line number Diff line
@@ -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.
+5 −1
Original line number Diff line number Diff line
@@ -910,9 +910,13 @@ 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));

+4 −0
Original line number Diff line number Diff line
@@ -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;
}