MCPcopy Create free account
hub / github.com/F-Stack/f-stack / vhost_driver_setup

Function vhost_driver_setup

dpdk/drivers/net/vhost/rte_eth_vhost.c:976–1045  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

974};
975
976static int
977vhost_driver_setup(struct rte_eth_dev *eth_dev)
978{
979 struct pmd_internal *internal = eth_dev->data->dev_private;
980 struct internal_list *list = NULL;
981 struct rte_vhost_vring_state *vring_state = NULL;
982 unsigned int numa_node = eth_dev->device->numa_node;
983 const char *name = eth_dev->device->name;
984
985 /* Don't try to setup again if it has already been done. */
986 list = find_internal_resource(internal->iface_name);
987 if (list)
988 return 0;
989
990 list = rte_zmalloc_socket(name, sizeof(*list), 0, numa_node);
991 if (list == NULL)
992 return -1;
993
994 vring_state = rte_zmalloc_socket(name, sizeof(*vring_state),
995 0, numa_node);
996 if (vring_state == NULL)
997 goto free_list;
998
999 list->eth_dev = eth_dev;
1000 pthread_mutex_lock(&internal_list_lock);
1001 TAILQ_INSERT_TAIL(&internal_list, list, next);
1002 pthread_mutex_unlock(&internal_list_lock);
1003
1004 rte_spinlock_init(&vring_state->lock);
1005 vring_states[eth_dev->data->port_id] = vring_state;
1006
1007 if (rte_vhost_driver_register(internal->iface_name, internal->flags))
1008 goto list_remove;
1009
1010 if (internal->disable_flags) {
1011 if (rte_vhost_driver_disable_features(internal->iface_name,
1012 internal->disable_flags))
1013 goto drv_unreg;
1014 }
1015
1016 if (rte_vhost_driver_set_max_queue_num(internal->iface_name, internal->max_queues))
1017 goto drv_unreg;
1018
1019 if (rte_vhost_driver_callback_register(internal->iface_name,
1020 &vhost_ops) < 0) {
1021 VHOST_LOG(ERR, "Can't register callbacks\n");
1022 goto drv_unreg;
1023 }
1024
1025 if (rte_vhost_driver_start(internal->iface_name) < 0) {
1026 VHOST_LOG(ERR, "Failed to start driver for %s\n",
1027 internal->iface_name);
1028 goto drv_unreg;
1029 }
1030
1031 return 0;
1032
1033drv_unreg:

Callers 1

eth_dev_configureFunction · 0.85

Calls 12

rte_zmalloc_socketFunction · 0.85
pthread_mutex_lockFunction · 0.85
pthread_mutex_unlockFunction · 0.85
rte_spinlock_initFunction · 0.85
rte_vhost_driver_startFunction · 0.85
rte_freeFunction · 0.85
find_internal_resourceFunction · 0.70

Tested by

no test coverage detected