From: Zhang Tengfei <zhtfdev@gmail.com>
To: Anatoly Burakov <anatoly.burakov@intel.com>,
Vladimir Medvedkin <vladimir.medvedkin@intel.com>,
Bruce Richardson <bruce.richardson@intel.com>
Cc: dev@dpdk.org, Zhang Tengfei <zhtfdev@gmail.com>
Subject: [PATCH] net/ixgbe: add FDIR pballoc devarg
Date: Tue, 8 Sep 2026 23:58:57 +0800 [thread overview]
Message-ID: <20260908155858.126042-1-zhtfdev@gmail.com> (raw)
Flow Director table memory is taken from the Rx packet buffer according
to fdir_conf.pballoc. After the legacy rte_eth_conf.fdir_conf API was
removed, pballoc stayed at the zero-initialized 64K default.
Parse fdir_pballoc=<64k|128k|256k> at probe time so applications that
need a larger table can opt in. The default remains 64K.
Signed-off-by: Zhang Tengfei <zhtfdev@gmail.com>
---
doc/guides/nics/ixgbe.rst | 26 ++++++++++++
doc/guides/rel_notes/release_26_11.rst | 5 +++
drivers/net/intel/ixgbe/ixgbe_ethdev.c | 56 ++++++++++++++++++++++----
3 files changed, 80 insertions(+), 7 deletions(-)
diff --git a/doc/guides/nics/ixgbe.rst b/doc/guides/nics/ixgbe.rst
index f075ef6f6f..18b685f441 100644
--- a/doc/guides/nics/ixgbe.rst
+++ b/doc/guides/nics/ixgbe.rst
@@ -164,6 +164,32 @@ be passed as part of EAL arguments. For example,
This option informs the driver that in this case, SDP3 is not to be
used as a check for link up by testing for laser on/off.
+PF Runtime Options
+^^^^^^^^^^^^^^^^^^
+
+The following ``devargs`` option can be enabled at probe time.
+It must be passed as part of EAL arguments. For example,
+
+.. code-block:: console
+
+ dpdk-testpmd -a 81:00.0,fdir_pballoc=256k -- -i
+
+- ``fdir_pballoc`` (default **64k**)
+
+ Memory allocated from the Rx packet buffer for Flow Director filters.
+ Valid values are ``64k``, ``128k`` and ``256k``.
+
+ Larger values increase the number of hardware filter entries
+ (perfect mode: 2K / 4K / 8K; signature mode: 8K / 16K / 32K)
+ and reduce Rx packet buffer space by the same amount.
+ On 82599 the Rx packet buffer is 512KB, so ``256k`` takes half of it.
+
+ This value is read only at probe time. Changing it requires restarting
+ the process with a new EAL argument.
+
+ Using Flow Director together with DCB is not supported:
+ Flow Director rewrites Rx packet buffer sizing after DCB configuration.
+
VF Runtime Options
^^^^^^^^^^^^^^^^^^
diff --git a/doc/guides/rel_notes/release_26_11.rst b/doc/guides/rel_notes/release_26_11.rst
index 87c7e81bde..ba3669b9da 100644
--- a/doc/guides/rel_notes/release_26_11.rst
+++ b/doc/guides/rel_notes/release_26_11.rst
@@ -55,6 +55,11 @@ New Features
Also, make sure to start the actual text at the margin.
=======================================================
+* **Updated Intel ixgbe driver.**
+
+ Added ``fdir_pballoc`` devarg to select the Flow Director table size
+ (``64k``, ``128k`` or ``256k``) at probe time. The default remains ``64k``.
+
Removed Items
-------------
diff --git a/drivers/net/intel/ixgbe/ixgbe_ethdev.c b/drivers/net/intel/ixgbe/ixgbe_ethdev.c
index c5010f623c..fef596460c 100644
--- a/drivers/net/intel/ixgbe/ixgbe_ethdev.c
+++ b/drivers/net/intel/ixgbe/ixgbe_ethdev.c
@@ -128,9 +128,11 @@
#define IXGBE_DMATXCTL_VT_MASK 0xFFFF0000
#define IXGBE_DEVARG_FIBER_SDP3_NOT_TX_DISABLE "fiber_sdp3_no_tx_disable"
+#define IXGBE_DEVARG_FDIR_PBALLOC "fdir_pballoc"
static const char * const ixgbe_valid_arguments[] = {
IXGBE_DEVARG_FIBER_SDP3_NOT_TX_DISABLE,
+ IXGBE_DEVARG_FDIR_PBALLOC,
NULL
};
@@ -1054,19 +1056,45 @@ ixgbe_swfw_lock_reset(struct ixgbe_hw *hw)
ixgbe_release_swfw_semaphore(hw, mask);
}
-static void
+static int
+devarg_handle_fdir_pballoc(const char *key, const char *value, void *extra_args)
+{
+ enum rte_eth_fdir_pballoc_type *pballoc = extra_args;
+
+ if (value == NULL || extra_args == NULL)
+ return -EINVAL;
+
+ if (strcmp(value, "64k") == 0)
+ *pballoc = RTE_ETH_FDIR_PBALLOC_64K;
+ else if (strcmp(value, "128k") == 0)
+ *pballoc = RTE_ETH_FDIR_PBALLOC_128K;
+ else if (strcmp(value, "256k") == 0)
+ *pballoc = RTE_ETH_FDIR_PBALLOC_256K;
+ else {
+ PMD_INIT_LOG(ERR,
+ "invalid %s='%s', use 64k, 128k or 256k",
+ key, value);
+ return -EINVAL;
+ }
+
+ return 0;
+}
+
+static int
ixgbe_parse_devargs(struct ixgbe_adapter *adapter,
- struct rte_devargs *devargs)
+ struct rte_devargs *devargs)
{
struct rte_kvargs *kvlist;
uint16_t sdp3_no_tx_disable;
+ enum rte_eth_fdir_pballoc_type pballoc;
+ int ret = 0;
if (devargs == NULL)
- return;
+ return 0;
kvlist = rte_kvargs_parse(devargs->args, ixgbe_valid_arguments);
if (kvlist == NULL)
- return;
+ return 0;
if (rte_kvargs_count(kvlist, IXGBE_DEVARG_FIBER_SDP3_NOT_TX_DISABLE) == 1 &&
rte_kvargs_process(kvlist, IXGBE_DEVARG_FIBER_SDP3_NOT_TX_DISABLE,
@@ -1074,7 +1102,17 @@ ixgbe_parse_devargs(struct ixgbe_adapter *adapter,
sdp3_no_tx_disable == 1)
adapter->sdp3_no_tx_disable = 1;
+ if (rte_kvargs_count(kvlist, IXGBE_DEVARG_FDIR_PBALLOC) != 0) {
+ if (rte_kvargs_process(kvlist, IXGBE_DEVARG_FDIR_PBALLOC,
+ devarg_handle_fdir_pballoc,
+ &pballoc) != 0)
+ ret = -EINVAL;
+ else
+ adapter->fdir_conf.pballoc = pballoc;
+ }
+
rte_kvargs_free(kvlist);
+ return ret;
}
/*
@@ -1141,8 +1179,11 @@ eth_ixgbe_dev_init(struct rte_eth_dev *eth_dev, void *init_params __rte_unused)
/* NOTE: review for potential ordering optimization */
rte_atomic_store_explicit(&ad->link_thread_running, 0, rte_memory_order_seq_cst);
- ixgbe_parse_devargs(eth_dev->data->dev_private,
- pci_dev->device.devargs);
+ ret = ixgbe_parse_devargs(eth_dev->data->dev_private,
+ pci_dev->device.devargs);
+ if (ret != 0)
+ return ret;
+
rte_eth_copy_pci_info(eth_dev, pci_dev);
eth_dev->data->dev_flags |= RTE_ETH_DEV_AUTOFILL_QUEUE_XSTATS;
@@ -8665,7 +8706,8 @@ RTE_PMD_REGISTER_PCI(net_ixgbe, rte_ixgbe_pmd);
RTE_PMD_REGISTER_PCI_TABLE(net_ixgbe, pci_id_ixgbe_map);
RTE_PMD_REGISTER_KMOD_DEP(net_ixgbe, "* igb_uio | uio_pci_generic | vfio-pci");
RTE_PMD_REGISTER_PARAM_STRING(net_ixgbe,
- IXGBE_DEVARG_FIBER_SDP3_NOT_TX_DISABLE "=<0|1>");
+ IXGBE_DEVARG_FIBER_SDP3_NOT_TX_DISABLE "=<0|1>"
+ IXGBE_DEVARG_FDIR_PBALLOC "=<64k|128k|256k>");
RTE_PMD_REGISTER_PCI(net_ixgbe_vf, rte_ixgbevf_pmd);
RTE_PMD_REGISTER_PCI_TABLE(net_ixgbe_vf, pci_id_ixgbevf_map);
RTE_PMD_REGISTER_KMOD_DEP(net_ixgbe_vf, "* igb_uio | vfio-pci");
--
2.55.0
next reply other threads:[~2026-09-08 16:00 UTC|newest]
Thread overview: 5+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-09-08 15:58 Zhang Tengfei [this message]
2026-09-10 13:47 ` [PATCH] net/ixgbe: add FDIR pballoc devarg Bruce Richardson
2026-09-10 15:58 ` [PATCH v2] net/ixgbe: add fdir_buffer_size devarg Zhang Tengfei
2026-09-11 15:21 ` Bruce Richardson
2026-09-11 15:38 ` Bruce Richardson
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20260908155858.126042-1-zhtfdev@gmail.com \
--to=zhtfdev@gmail.com \
--cc=anatoly.burakov@intel.com \
--cc=bruce.richardson@intel.com \
--cc=dev@dpdk.org \
--cc=vladimir.medvedkin@intel.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox