X-Git-Url: http://git.droids-corp.org/?a=blobdiff_plain;ds=sidebyside;f=drivers%2Fnet%2Fvhost%2Frte_eth_vhost.c;h=c3ba602767e484a5e7fd1c08cb61f1de93f75622;hb=fcba820d9b9e34007223590d4c75417ed42563c1;hp=774774b94536dfc4d03f5fde732c7840042f7745;hpb=538da7a1cad25fbdffe298c8ca76fc4dbd262d1b;p=dpdk.git diff --git a/drivers/net/vhost/rte_eth_vhost.c b/drivers/net/vhost/rte_eth_vhost.c index 774774b945..c3ba602767 100644 --- a/drivers/net/vhost/rte_eth_vhost.c +++ b/drivers/net/vhost/rte_eth_vhost.c @@ -216,7 +216,7 @@ static const struct vhost_xstats_name_off vhost_txport_stat_strings[] = { #define VHOST_NB_XSTATS_TXPORT (sizeof(vhost_txport_stat_strings) / \ sizeof(vhost_txport_stat_strings[0])) -static void +static int vhost_dev_xstats_reset(struct rte_eth_dev *dev) { struct vhost_queue *vq = NULL; @@ -234,6 +234,8 @@ vhost_dev_xstats_reset(struct rte_eth_dev *dev) continue; memset(&vq->stats, 0, sizeof(vq->stats)); } + + return 0; } static int @@ -1005,6 +1007,9 @@ eth_dev_close(struct rte_eth_dev *dev) 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 @@ -1051,7 +1056,7 @@ eth_tx_queue_setup(struct rte_eth_dev *dev, uint16_t tx_queue_id, return 0; } -static void +static int eth_dev_info(struct rte_eth_dev *dev, struct rte_eth_dev_info *dev_info) { @@ -1060,7 +1065,7 @@ eth_dev_info(struct rte_eth_dev *dev, internal = dev->data->dev_private; if (internal == NULL) { VHOST_LOG(ERR, "Invalid device specified\n"); - return; + return -ENODEV; } dev_info->max_mac_addrs = 1; @@ -1072,13 +1077,15 @@ eth_dev_info(struct rte_eth_dev *dev, dev_info->tx_offload_capa = DEV_TX_OFFLOAD_MULTI_SEGS | DEV_TX_OFFLOAD_VLAN_INSERT; dev_info->rx_offload_capa = DEV_RX_OFFLOAD_VLAN_STRIP; + + return 0; } static int eth_stats_get(struct rte_eth_dev *dev, struct rte_eth_stats *stats) { unsigned i; - unsigned long rx_total = 0, tx_total = 0, tx_missed_total = 0; + unsigned long rx_total = 0, tx_total = 0; unsigned long rx_total_bytes = 0, tx_total_bytes = 0; struct vhost_queue *vq; @@ -1100,7 +1107,6 @@ eth_stats_get(struct rte_eth_dev *dev, struct rte_eth_stats *stats) continue; vq = dev->data->tx_queues[i]; stats->q_opackets[i] = vq->stats.pkts; - tx_missed_total += vq->stats.missed_pkts; tx_total += stats->q_opackets[i]; stats->q_obytes[i] = vq->stats.bytes; @@ -1109,14 +1115,13 @@ eth_stats_get(struct rte_eth_dev *dev, struct rte_eth_stats *stats) stats->ipackets = rx_total; stats->opackets = tx_total; - stats->oerrors = tx_missed_total; stats->ibytes = rx_total_bytes; stats->obytes = tx_total_bytes; return 0; } -static void +static int eth_stats_reset(struct rte_eth_dev *dev) { struct vhost_queue *vq; @@ -1137,6 +1142,8 @@ eth_stats_reset(struct rte_eth_dev *dev) vq->stats.bytes = 0; vq->stats.missed_pkts = 0; } + + return 0; } static void @@ -1196,8 +1203,6 @@ static const struct eth_dev_ops ops = { .rx_queue_intr_disable = eth_rxq_intr_disable, }; -static struct rte_vdev_driver pmd_vhost_drv; - static int eth_dev_vhost_create(struct rte_vdev_device *dev, char *iface_name, int16_t queues, const unsigned int numa_node, uint64_t flags) @@ -1261,7 +1266,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; @@ -1442,16 +1447,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;