[dpdk-dev] Failed to hotplug add a device from secondary process

Ogawa Yasufumi yasufum.o at gmail.com
Thu Jul 11 14:57:50 CEST 2019


Hi all,

I have developed a multi-process app and am struggling to fix an error
while adding PMD from secondary process with hotplug feature. As we
reported in [1], I think it is because initializing hogplugged device is
changed to be done by primary first, then secondary. However,
initialization in secondary might work properly, so `rx_pkt_burst` and
`tx_pkt_burst` are NULL.

[1] https://bugs.dpdk.org/show_bug.cgi?id=194

It might happen other than vhost. I confirmed that ring and pcap PMD work
fine, but failed to run null PMD. I've got realized there is a bug in probe
function, such as rte_pmd_vhsot_probe() in
drivers/net/vhost/rte_eth_vhost.c, called from secondary.

I have fixed the issue in nullpmd by simply adding burst functions as
following. However, I'm not sure if it is correct way. In addition, cannot
fix for vhost because there are still some variables shold be setup in
secondary.

diff --git a/drivers/net/null/rte_eth_null.c
b/drivers/net/null/rte_eth_null.c
index 159c1c1fd..5e5b719c0 100644
--- a/drivers/net/null/rte_eth_null.c
+++ b/drivers/net/null/rte_eth_null.c
@@ -623,6 +623,13 @@ rte_pmd_null_probe(struct rte_vdev_device *dev)
                /* TODO: request info from primary to set up Rx and Tx */
                eth_dev->dev_ops = &ops;
                eth_dev->device = &dev->device;
+               if (packet_copy) {
+                       eth_dev->rx_pkt_burst = eth_null_copy_rx;
+                       eth_dev->tx_pkt_burst = eth_null_copy_tx;
+               } else {
+                       eth_dev->rx_pkt_burst = eth_null_rx;
+                       eth_dev->tx_pkt_burst = eth_null_tx;
+               }
                rte_eth_dev_probing_finish(eth_dev);
                return 0;


Could anyone help us for fixing the issue, or give us some advice?

Regards,
Yasufumi


More information about the dev mailing list