From 28b987c442d5746f75d20f734bfac1f83f52797f Mon Sep 17 00:00:00 2001 From: Olivier Matz Date: Fri, 13 Nov 2020 11:39:57 +0100 Subject: [PATCH] net/pcap: fix registration of timestamp dynamic field 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 first invoked on the primary process when a device is created in a secondary, this enables registering dynfield from secondary process. Bugzilla ID: 571 Fixes: d23d73d088c1 ("net/pcap: switch Rx timestamp to dynamic mbuf field") Signed-off-by: Olivier Matz Reviewed-by: Ferruh Yigit --- 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 @@ status_down: 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.20.1