The ring PMD uses special eth_dev allocators, which cannot be updated to
accept an rte_vdev_device.
Circumvent the limitation and store the rte_device handle in the
rte_eth_dev structure.

Fixes: 050fe6e9ff97 ("drivers/net: use ethdev allocation helper for
vdev")
Cc: sta...@dpdk.org

Signed-off-by: Gaetan Rivet <gaetan.ri...@6wind.com>
---
 drivers/net/ring/rte_eth_ring.c | 7 +++++++
 1 file changed, 7 insertions(+)

diff --git a/drivers/net/ring/rte_eth_ring.c b/drivers/net/ring/rte_eth_ring.c
index d4dce95..2cd32a9 100644
--- a/drivers/net/ring/rte_eth_ring.c
+++ b/drivers/net/ring/rte_eth_ring.c
@@ -515,6 +515,8 @@ rte_pmd_ring_probe(struct rte_vdev_device *dev)
        RTE_LOG(INFO, PMD, "Initializing pmd_ring for %s\n", name);
 
        if (params == NULL || params[0] == '\0') {
+               struct rte_eth_dev *eth_dev;
+
                ret = eth_dev_ring_create(name, rte_socket_id(), DEV_CREATE);
                if (ret == -1) {
                        RTE_LOG(INFO, PMD,
@@ -522,6 +524,11 @@ rte_pmd_ring_probe(struct rte_vdev_device *dev)
                        ret = eth_dev_ring_create(name, rte_socket_id(),
                                                  DEV_ATTACH);
                }
+               /* find an ethdev entry */
+               eth_dev = rte_eth_dev_allocated(name);
+               if (eth_dev == NULL)
+                       return -ENODEV;
+               eth_dev->device = &dev->device;
        }
        else {
                kvlist = rte_kvargs_parse(params, valid_arguments);
-- 
2.1.4

Reply via email to