vdpa/mlx5: add task ring for multi-thread management
[dpdk.git] / drivers / vdpa / sfc / sfc_vdpa_hw.c
index 7911c5d..a7018b1 100644 (file)
@@ -25,21 +25,30 @@ sfc_vdpa_dma_alloc(struct sfc_vdpa_adapter *sva, const char *name,
 {
        uint64_t mcdi_iova;
        size_t mcdi_buff_size;
+       char mz_name[RTE_MEMZONE_NAMESIZE];
        const struct rte_memzone *mz = NULL;
        int numa_node = sva->pdev->device.numa_node;
        int ret;
 
        mcdi_buff_size = RTE_ALIGN_CEIL(len, PAGE_SIZE);
+       ret = snprintf(mz_name, RTE_MEMZONE_NAMESIZE, "%s_%s",
+                      sva->pdev->name, name);
+       if (ret < 0 || ret >= RTE_MEMZONE_NAMESIZE) {
+               sfc_vdpa_err(sva, "%s_%s too long to fit in mz_name",
+                            sva->pdev->name, name);
+               return -EINVAL;
+       }
 
-       sfc_vdpa_log_init(sva, "name=%s, len=%zu", name, len);
+       sfc_vdpa_log_init(sva, "name=%s, len=%zu", mz_name, len);
 
-       mz = rte_memzone_reserve_aligned(name, mcdi_buff_size,
+       mz = rte_memzone_reserve_aligned(mz_name, mcdi_buff_size,
                                         numa_node,
                                         RTE_MEMZONE_IOVA_CONTIG,
                                         PAGE_SIZE);
        if (mz == NULL) {
                sfc_vdpa_err(sva, "cannot reserve memory for %s: len=%#x: %s",
-                            name, (unsigned int)len, rte_strerror(rte_errno));
+                            mz_name, (unsigned int)len,
+                            rte_strerror(rte_errno));
                return -ENOMEM;
        }
 
@@ -352,10 +361,20 @@ sfc_vdpa_hw_init(struct sfc_vdpa_adapter *sva)
                goto fail_virtio_init;
        }
 
+       sfc_vdpa_log_init(sva, "init filter");
+       rc = efx_filter_init(enp);
+       if (rc != 0) {
+               sfc_vdpa_err(sva, "filter init failed: %s", rte_strerror(rc));
+               goto fail_filter_init;
+       }
+
        sfc_vdpa_log_init(sva, "done");
 
        return 0;
 
+fail_filter_init:
+       efx_virtio_fini(enp);
+
 fail_virtio_init:
        efx_nic_fini(enp);