X-Git-Url: http://git.droids-corp.org/?a=blobdiff_plain;f=drivers%2Fnet%2Fmlx4%2Fmlx4.c;h=cccc71f7572f77efbd7939e4fa34d25db1084584;hb=46c6714ffd4326cd9ea884a9812a459a444f464a;hp=7cd35cd3cab5b8dac26b8b2cf2d0c452a7af325b;hpb=eeded2044af5bbe88220120b14933536cbb3edb6;p=dpdk.git diff --git a/drivers/net/mlx4/mlx4.c b/drivers/net/mlx4/mlx4.c index 7cd35cd3ca..cccc71f757 100644 --- a/drivers/net/mlx4/mlx4.c +++ b/drivers/net/mlx4/mlx4.c @@ -201,6 +201,7 @@ mlx4_proc_priv_init(struct rte_eth_dev *dev) struct mlx4_proc_priv *ppriv; size_t ppriv_size; + mlx4_proc_priv_uninit(dev); /* * UAR register table follows the process private structure. BlueFlame * registers for Tx queues are stored in the table. @@ -390,9 +391,9 @@ mlx4_dev_close(struct rte_eth_dev *dev) mlx4_flow_clean(priv); mlx4_rss_deinit(priv); for (i = 0; i != dev->data->nb_rx_queues; ++i) - mlx4_rx_queue_release(dev->data->rx_queues[i]); + mlx4_rx_queue_release(dev, i); for (i = 0; i != dev->data->nb_tx_queues; ++i) - mlx4_tx_queue_release(dev->data->tx_queues[i]); + mlx4_tx_queue_release(dev, i); mlx4_proc_priv_uninit(dev); mlx4_mr_release(dev); if (priv->pd != NULL) { @@ -1013,11 +1014,8 @@ err_secondary: " (error: %s)", strerror(err)); goto port_error; } - INFO("port %u MAC address is %02x:%02x:%02x:%02x:%02x:%02x", - priv->port, - mac.addr_bytes[0], mac.addr_bytes[1], - mac.addr_bytes[2], mac.addr_bytes[3], - mac.addr_bytes[4], mac.addr_bytes[5]); + INFO("port %u MAC address is " RTE_ETHER_ADDR_PRT_FMT, + priv->port, RTE_ETHER_ADDR_BYTES(&mac)); /* Register MAC address. */ priv->mac[0] = mac; @@ -1044,9 +1042,19 @@ err_secondary: rte_eth_copy_pci_info(eth_dev, pci_dev); eth_dev->data->dev_flags |= RTE_ETH_DEV_AUTOFILL_QUEUE_XSTATS; /* Initialize local interrupt handle for current port. */ - memset(&priv->intr_handle, 0, sizeof(struct rte_intr_handle)); - priv->intr_handle.fd = -1; - priv->intr_handle.type = RTE_INTR_HANDLE_EXT; + priv->intr_handle = + rte_intr_instance_alloc(RTE_INTR_INSTANCE_F_SHARED); + if (priv->intr_handle == NULL) { + RTE_LOG(ERR, EAL, "Fail to allocate intr_handle\n"); + goto port_error; + } + + if (rte_intr_fd_set(priv->intr_handle, -1)) + goto port_error; + + if (rte_intr_type_set(priv->intr_handle, RTE_INTR_HANDLE_EXT)) + goto port_error; + /* * Override ethdev interrupt handle pointer with private * handle instead of that of the parent PCI device used by @@ -1059,7 +1067,7 @@ err_secondary: * besides setting up eth_dev->intr_handle, the rest is * handled by rte_intr_rx_ctl(). */ - eth_dev->intr_handle = &priv->intr_handle; + eth_dev->intr_handle = priv->intr_handle; priv->dev_data = eth_dev->data; eth_dev->dev_ops = &mlx4_dev_ops; #ifdef HAVE_IBV_MLX4_BUF_ALLOCATORS @@ -1104,6 +1112,7 @@ err_secondary: prev_dev = eth_dev; continue; port_error: + rte_intr_instance_free(priv->intr_handle); rte_free(priv); if (eth_dev != NULL) eth_dev->data->dev_private = NULL;