On 04/02/2018 01:46 PM, Zhihong Wang wrote:
+int
+rte_vdpa_register_device(struct rte_vdpa_dev_addr *addr,
+               struct rte_vdpa_dev_ops *ops)
+{
+       struct rte_vdpa_device *dev;
+       char device_name[MAX_VDPA_NAME_LEN];
+       int i;
+
+       if (vdpa_device_num >= MAX_VHOST_DEVICE)
+               return -1;
+
+       for (i = 0; i < MAX_VHOST_DEVICE; i++) {
+               if (vdpa_devices[i] && is_same_vdpa_device(addr,
+                                       &vdpa_devices[i]->addr))
+                       return -1;
+       }

For consistency, I changed above check to look like same one in _find_device_id:

        for (i = 0; i < MAX_VHOST_DEVICE; i++) {
                dev = vdpa_devices[i];
                if (dev && is_same_vdpa_device(&dev->addr, addr))
                        return -1;
        }

+
+       for (i = 0; i < MAX_VHOST_DEVICE; i++) {
+               if (vdpa_devices[i] == NULL)
+                       break;
+       }
+
+       sprintf(device_name, "vdpa-dev-%d", i);
+       dev = rte_zmalloc(device_name, sizeof(struct rte_vdpa_device),
+                       RTE_CACHE_LINE_SIZE);
+       if (!dev)
+               return -1;
+
+       memcpy(&dev->addr, addr, sizeof(struct rte_vdpa_dev_addr));
+       dev->ops = ops;
+       vdpa_devices[i] = dev;
+       vdpa_device_num++;
+
+       return i;
+}
+
+int
+rte_vdpa_unregister_device(int did)
+{
+       if (did < 0 || did >= MAX_VHOST_DEVICE || vdpa_devices[did] == NULL)
+               return -1;
+
+       rte_free(vdpa_devices[did]);
+       vdpa_devices[did] = NULL;
+       vdpa_device_num--;
+
+       return did;
+}
+
+int
+rte_vdpa_find_device_id(struct rte_vdpa_dev_addr *addr)
+{
+       struct rte_vdpa_device *dev;
+       int i;
+
+       for (i = 0; i < MAX_VHOST_DEVICE; ++i) {
+               dev = vdpa_devices[i];
+               if (dev && is_same_vdpa_device(&dev->addr, addr) == 0)
+                       return i;
+       }
+
+       return -1;
+}
+

Reply via email to