[dpdk-dev] [PATCH] net/pcap: fix registration of timestamp dynamic field
Olivier Matz
olivier.matz at 6wind.com
Fri Nov 13 11:39:57 CET 2020
In pcap pmd, the timestamp mbuf dynamic field is mandatory. When the
pcap pmd is created in a secondary process (this is the case for pdump),
it cannot be registered because this is not allowed from a secondary
process.
To ensure that the field is properly registered, do it from probe()
instead of configure(). Indeed, probe() is invoked on the primary
process when a device is created in a secondary.
Bugzilla ID: 571
Fixes: d23d73d088c1 ("net/pcap: switch Rx timestamp to dynamic mbuf field")
Signed-off-by: Olivier Matz <olivier.matz at 6wind.com>
---
drivers/net/pcap/rte_eth_pcap.c | 16 +++++++---------
1 file changed, 7 insertions(+), 9 deletions(-)
diff --git a/drivers/net/pcap/rte_eth_pcap.c b/drivers/net/pcap/rte_eth_pcap.c
index 4e6d49370e..4930d7d382 100644
--- a/drivers/net/pcap/rte_eth_pcap.c
+++ b/drivers/net/pcap/rte_eth_pcap.c
@@ -661,15 +661,6 @@ eth_dev_stop(struct rte_eth_dev *dev)
static int
eth_dev_configure(struct rte_eth_dev *dev __rte_unused)
{
- int ret;
-
- ret = rte_mbuf_dyn_rx_timestamp_register(×tamp_dynfield_offset,
- ×tamp_rx_dynflag);
- if (ret != 0) {
- PMD_LOG(ERR, "Failed to register Rx timestamp field/flag");
- return -rte_errno;
- }
-
return 0;
}
@@ -1387,6 +1378,13 @@ pmd_pcap_probe(struct rte_vdev_device *dev)
start_cycles = rte_get_timer_cycles();
hz = rte_get_timer_hz();
+ ret = rte_mbuf_dyn_rx_timestamp_register(×tamp_dynfield_offset,
+ ×tamp_rx_dynflag);
+ if (ret != 0) {
+ PMD_LOG(ERR, "Failed to register Rx timestamp field/flag");
+ return -1;
+ }
+
if (rte_eal_process_type() == RTE_PROC_SECONDARY) {
eth_dev = rte_eth_dev_attach_secondary(name);
if (!eth_dev) {
--
2.25.1
More information about the dev
mailing list