examples/performance-thread: fix crash with gcc 5
[dpdk.git] / drivers / net / vhost / rte_eth_vhost.c
index 4cc6bec..310cbef 100644 (file)
@@ -229,6 +229,9 @@ new_device(struct virtio_net *dev)
        struct pmd_internal *internal;
        struct vhost_queue *vq;
        unsigned i;
+#ifdef RTE_LIBRTE_VHOST_NUMA
+       int newnode, ret;
+#endif
 
        if (dev == NULL) {
                RTE_LOG(INFO, PMD, "Invalid argument\n");
@@ -244,6 +247,17 @@ new_device(struct virtio_net *dev)
        eth_dev = list->eth_dev;
        internal = eth_dev->data->dev_private;
 
+#ifdef RTE_LIBRTE_VHOST_NUMA
+       ret  = get_mempolicy(&newnode, NULL, 0, dev,
+                       MPOL_F_NODE | MPOL_F_ADDR);
+       if (ret < 0) {
+               RTE_LOG(ERR, PMD, "Unknown numa node\n");
+               return -1;
+       }
+
+       eth_dev->data->numa_node = newnode;
+#endif
+
        for (i = 0; i < eth_dev->data->nb_rx_queues; i++) {
                vq = eth_dev->data->rx_queues[i];
                if (vq == NULL)
@@ -251,7 +265,6 @@ new_device(struct virtio_net *dev)
                vq->device = dev;
                vq->internal = internal;
                vq->port = eth_dev->data->port_id;
-               rte_vhost_enable_guest_notification(dev, vq->virtqueue_id, 0);
        }
        for (i = 0; i < eth_dev->data->nb_tx_queues; i++) {
                vq = eth_dev->data->tx_queues[i];
@@ -260,9 +273,11 @@ new_device(struct virtio_net *dev)
                vq->device = dev;
                vq->internal = internal;
                vq->port = eth_dev->data->port_id;
-               rte_vhost_enable_guest_notification(dev, vq->virtqueue_id, 0);
        }
 
+       for (i = 0; i < dev->virt_qp_nb * VIRTIO_QNUM; i++)
+               rte_vhost_enable_guest_notification(dev, i, 0);
+
        dev->flags |= VIRTIO_DEV_RUNNING;
        dev->priv = eth_dev;
        eth_dev->data->dev_link.link_status = ETH_LINK_UP;
@@ -352,9 +367,6 @@ vring_state_changed(struct virtio_net *dev, uint16_t vring, int enable)
        struct rte_vhost_vring_state *state;
        struct rte_eth_dev *eth_dev;
        struct internal_list *list;
-#ifdef RTE_LIBRTE_VHOST_NUMA
-       int newnode, ret;
-#endif
 
        if (dev == NULL) {
                RTE_LOG(ERR, PMD, "Invalid argument\n");
@@ -370,17 +382,6 @@ vring_state_changed(struct virtio_net *dev, uint16_t vring, int enable)
        eth_dev = list->eth_dev;
        /* won't be NULL */
        state = vring_states[eth_dev->data->port_id];
-
-#ifdef RTE_LIBRTE_VHOST_NUMA
-       ret  = get_mempolicy(&newnode, NULL, 0, dev,
-                       MPOL_F_NODE | MPOL_F_ADDR);
-       if (ret < 0) {
-               RTE_LOG(ERR, PMD, "Unknown numa node\n");
-               return -1;
-       }
-
-       eth_dev->data->numa_node = newnode;
-#endif
        rte_spinlock_lock(&state->lock);
        state->cur[vring] = enable;
        state->max_vring = RTE_MAX(vring, state->max_vring);