X-Git-Url: http://git.droids-corp.org/?a=blobdiff_plain;f=drivers%2Fnet%2Fvhost%2Frte_eth_vhost.c;h=0b61e37a19955434e3e0582b2d9068b566cc53ad;hb=cbd5710db48d8ab45c7c8f549e6a7556fab62583;hp=b38a4b6b14845360ff09a993f6bc32d53178c49e;hpb=662dbc322d0467e0dcdcbbb2b2283a43a5b849e7;p=dpdk.git diff --git a/drivers/net/vhost/rte_eth_vhost.c b/drivers/net/vhost/rte_eth_vhost.c index b38a4b6b14..0b61e37a19 100644 --- a/drivers/net/vhost/rte_eth_vhost.c +++ b/drivers/net/vhost/rte_eth_vhost.c @@ -43,7 +43,7 @@ static const char *valid_arguments[] = { NULL }; -static struct ether_addr base_eth_addr = { +static struct rte_ether_addr base_eth_addr = { .addr_bytes = { 0x56 /* V */, 0x48 /* H */, @@ -325,12 +325,12 @@ static inline void vhost_count_multicast_broadcast(struct vhost_queue *vq, struct rte_mbuf *mbuf) { - struct ether_addr *ea = NULL; + struct rte_ether_addr *ea = NULL; struct vhost_stats *pstats = &vq->stats; - ea = rte_pktmbuf_mtod(mbuf, struct ether_addr *); - if (is_multicast_ether_addr(ea)) { - if (is_broadcast_ether_addr(ea)) + ea = rte_pktmbuf_mtod(mbuf, struct rte_ether_addr *); + if (rte_is_multicast_ether_addr(ea)) { + if (rte_is_broadcast_ether_addr(ea)) pstats->xstats[VHOST_BROADCAST_PKT]++; else pstats->xstats[VHOST_MULTICAST_PKT]++; @@ -1000,12 +1000,14 @@ eth_dev_close(struct rte_eth_dev *dev) for (i = 0; i < dev->data->nb_tx_queues; i++) rte_free(dev->data->tx_queues[i]); - rte_free(dev->data->mac_addrs); free(internal->dev_name); free(internal->iface_name); rte_free(internal); dev->data->dev_private = NULL; + + rte_free(vring_states[dev->data->port_id]); + vring_states[dev->data->port_id] = NULL; } static int @@ -1207,7 +1209,7 @@ eth_dev_vhost_create(struct rte_vdev_device *dev, char *iface_name, struct rte_eth_dev_data *data; struct pmd_internal *internal = NULL; struct rte_eth_dev *eth_dev = NULL; - struct ether_addr *eth_addr = NULL; + struct rte_ether_addr *eth_addr = NULL; struct rte_vhost_vring_state *vring_state = NULL; struct internal_list *list = NULL; @@ -1262,7 +1264,7 @@ eth_dev_vhost_create(struct rte_vdev_device *dev, char *iface_name, internal->max_queues = queues; internal->vid = -1; data->dev_link = pmd_link; - data->dev_flags = RTE_ETH_DEV_INTR_LSC; + data->dev_flags = RTE_ETH_DEV_INTR_LSC | RTE_ETH_DEV_CLOSE_REMOVE; eth_dev->dev_ops = &ops; @@ -1443,16 +1445,13 @@ rte_pmd_vhost_remove(struct rte_vdev_device *dev) /* find an ethdev entry */ eth_dev = rte_eth_dev_allocated(name); if (eth_dev == NULL) - return -ENODEV; + return 0; if (rte_eal_process_type() != RTE_PROC_PRIMARY) return rte_eth_dev_release_port(eth_dev); eth_dev_close(eth_dev); - rte_free(vring_states[eth_dev->data->port_id]); - vring_states[eth_dev->data->port_id] = NULL; - rte_eth_dev_release_port(eth_dev); return 0; @@ -1467,7 +1466,11 @@ RTE_PMD_REGISTER_VDEV(net_vhost, pmd_vhost_drv); RTE_PMD_REGISTER_ALIAS(net_vhost, eth_vhost); RTE_PMD_REGISTER_PARAM_STRING(net_vhost, "iface= " - "queues="); + "queues= " + "client=<0|1> " + "dequeue-zero-copy=<0|1> " + "iommu-support=<0|1> " + "postcopy-support=<0|1>"); RTE_INIT(vhost_init_log) {