examples/ip_frag: fix use of ethdev internal device array
[dpdk.git] / drivers / net / mlx4 / mlx4.c
index 2c33fcb..2e169b0 100644 (file)
@@ -697,6 +697,7 @@ mlx4_init_once(void)
 {
        struct mlx4_shared_data *sd;
        struct mlx4_local_data *ld = &mlx4_local_data;
+       int ret = 0;
 
        if (mlx4_init_shared_data())
                return -rte_errno;
@@ -711,21 +712,26 @@ mlx4_init_once(void)
                rte_rwlock_init(&sd->mem_event_rwlock);
                rte_mem_event_callback_register("MLX4_MEM_EVENT_CB",
                                                mlx4_mr_mem_event_cb, NULL);
-               mlx4_mp_init_primary();
-               sd->init_done = true;
+               ret = mlx4_mp_init_primary();
+               if (ret)
+                       goto out;
+               sd->init_done = 1;
                break;
        case RTE_PROC_SECONDARY:
                if (ld->init_done)
                        break;
-               mlx4_mp_init_secondary();
+               ret = mlx4_mp_init_secondary();
+               if (ret)
+                       goto out;
                ++sd->secondary_cnt;
-               ld->init_done = true;
+               ld->init_done = 1;
                break;
        default:
                break;
        }
+out:
        rte_spinlock_unlock(&sd->lock);
-       return 0;
+       return ret;
 }
 
 /**
@@ -1136,8 +1142,8 @@ static struct rte_pci_driver mlx4_driver = {
        },
        .id_table = mlx4_pci_id_map,
        .probe = mlx4_pci_probe,
-       .drv_flags = RTE_PCI_DRV_INTR_LSC |
-                    RTE_PCI_DRV_INTR_RMV,
+       .drv_flags = RTE_PCI_DRV_INTR_LSC | RTE_PCI_DRV_INTR_RMV |
+                    RTE_PCI_DRV_IOVA_AS_VA,
 };
 
 #ifdef RTE_IBVERBS_LINK_DLOPEN