From patchwork Mon Sep 18 14:36:14 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Xueming Li X-Patchwork-Id: 28849 X-Patchwork-Delegate: ferruh.yigit@amd.com Return-Path: X-Original-To: patchwork@dpdk.org Delivered-To: patchwork@dpdk.org Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id 4EDA11B19A; Mon, 18 Sep 2017 16:40:43 +0200 (CEST) Received: from mellanox.co.il (mail-il-dmz.mellanox.com [193.47.165.129]) by dpdk.org (Postfix) with ESMTP id 8CB111B1AF for ; Mon, 18 Sep 2017 16:40:40 +0200 (CEST) Received: from Internal Mail-Server by MTLPINE1 (envelope-from xuemingl@mellanox.com) with ESMTPS (AES256-SHA encrypted); 18 Sep 2017 17:40:38 +0300 Received: from dev-r630-06.mtbc.labs.mlnx (dev-r630-06.mtbc.labs.mlnx [10.12.205.180]) by labmailer.mlnx (8.13.8/8.13.8) with ESMTP id v8IEeRiv015498; Mon, 18 Sep 2017 17:40:37 +0300 Received: from dev-r630-06.mtbc.labs.mlnx (localhost [127.0.0.1]) by dev-r630-06.mtbc.labs.mlnx (8.14.7/8.14.7) with ESMTP id v8IEaVho177476; Mon, 18 Sep 2017 22:36:31 +0800 Received: (from xuemingl@localhost) by dev-r630-06.mtbc.labs.mlnx (8.14.7/8.14.7/Submit) id v8IEaVmv177475; Mon, 18 Sep 2017 22:36:31 +0800 From: Xueming Li To: Nelio Laranjeiro , Adrien Mazarguil Cc: Xueming Li , dev@dpdk.org Date: Mon, 18 Sep 2017 22:36:14 +0800 Message-Id: <20170918143619.177422-2-xuemingl@mellanox.com> X-Mailer: git-send-email 2.13.3 In-Reply-To: <20170918143619.177422-1-xuemingl@mellanox.com> References: <20170918143619.177422-1-xuemingl@mellanox.com> In-Reply-To: <20170824140341.95471-1-xuemingl@mellanox.com> References: <20170824140341.95471-1-xuemingl@mellanox.com> Subject: [dpdk-dev] [PATCH v3 1/6] net/mlx5: change eth device reference for secondary process X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org Sender: "dev" rte_eth_dev created by primary process were not available in secondary process, it was not possible to use the primary process local memory object from a secondary process. This patch modify the reference of primary rte_eth_dev object, use local rte_eth_dev secondary process instead. Signed-off-by: Xueming Li Acked-by: Nelio Laranjeiro --- drivers/net/mlx5/mlx5.h | 6 +++--- drivers/net/mlx5/mlx5_ethdev.c | 47 ++++++++++++++++++++++++----------------- drivers/net/mlx5/mlx5_fdir.c | 2 ++ drivers/net/mlx5/mlx5_rss.c | 1 + drivers/net/mlx5/mlx5_rxq.c | 1 + drivers/net/mlx5/mlx5_trigger.c | 4 ++-- 6 files changed, 37 insertions(+), 24 deletions(-) diff --git a/drivers/net/mlx5/mlx5.h b/drivers/net/mlx5/mlx5.h index ab03fe0..78b27ed 100644 --- a/drivers/net/mlx5/mlx5.h +++ b/drivers/net/mlx5/mlx5.h @@ -87,7 +87,7 @@ struct mlx5_xstats_ctrl { }; struct priv { - struct rte_eth_dev *dev; /* Ethernet device. */ + struct rte_eth_dev *dev; /* Ethernet device of master process. */ struct ibv_context *ctx; /* Verbs context. */ struct ibv_device_attr_ex device_attr; /* Device properties. */ struct ibv_pd *pd; /* Protection Domain. */ @@ -208,8 +208,8 @@ int mlx5_ibv_device_to_pci_addr(const struct ibv_device *, void priv_dev_interrupt_handler_install(struct priv *, struct rte_eth_dev *); int mlx5_set_link_down(struct rte_eth_dev *dev); int mlx5_set_link_up(struct rte_eth_dev *dev); -void priv_select_tx_function(struct priv *); -void priv_select_rx_function(struct priv *); +void priv_dev_select_tx_function(struct priv *priv, struct rte_eth_dev *dev); +void priv_dev_select_rx_function(struct priv *priv, struct rte_eth_dev *dev); /* mlx5_mac.c */ diff --git a/drivers/net/mlx5/mlx5_ethdev.c b/drivers/net/mlx5/mlx5_ethdev.c index 6f17a95..c1affba 100644 --- a/drivers/net/mlx5/mlx5_ethdev.c +++ b/drivers/net/mlx5/mlx5_ethdev.c @@ -1260,7 +1260,9 @@ struct priv * * Change the link state (UP / DOWN). * * @param priv - * Pointer to Ethernet device structure. + * Pointer to private data structure. + * @param dev + * Pointer to rte_eth_dev structure. * @param up * Nonzero for link up, otherwise link down. * @@ -1268,17 +1270,16 @@ struct priv * * 0 on success, errno value on failure. */ static int -priv_set_link(struct priv *priv, int up) +priv_dev_set_link(struct priv *priv, struct rte_eth_dev *dev, int up) { - struct rte_eth_dev *dev = priv->dev; int err; if (up) { err = priv_set_flags(priv, ~IFF_UP, IFF_UP); if (err) return err; - priv_select_tx_function(priv); - priv_select_rx_function(priv); + priv_dev_select_tx_function(priv, dev); + priv_dev_select_rx_function(priv, dev); } else { err = priv_set_flags(priv, ~IFF_UP, ~IFF_UP); if (err) @@ -1305,7 +1306,7 @@ struct priv * int err; priv_lock(priv); - err = priv_set_link(priv, 0); + err = priv_dev_set_link(priv, dev, 0); priv_unlock(priv); return err; } @@ -1326,7 +1327,7 @@ struct priv * int err; priv_lock(priv); - err = priv_set_link(priv, 1); + err = priv_dev_set_link(priv, dev, 1); priv_unlock(priv); return err; } @@ -1335,29 +1336,33 @@ struct priv * * Configure the TX function to use. * * @param priv - * Pointer to private structure. + * Pointer to private data structure. + * @param dev + * Pointer to rte_eth_dev structure. */ void -priv_select_tx_function(struct priv *priv) +priv_dev_select_tx_function(struct priv *priv, struct rte_eth_dev *dev) { - priv->dev->tx_pkt_burst = mlx5_tx_burst; + assert(priv != NULL); + assert(dev != NULL); + dev->tx_pkt_burst = mlx5_tx_burst; /* Select appropriate TX function. */ if (priv->mps == MLX5_MPW_ENHANCED) { if (priv_check_vec_tx_support(priv) > 0) { if (priv_check_raw_vec_tx_support(priv) > 0) - priv->dev->tx_pkt_burst = mlx5_tx_burst_raw_vec; + dev->tx_pkt_burst = mlx5_tx_burst_raw_vec; else - priv->dev->tx_pkt_burst = mlx5_tx_burst_vec; + dev->tx_pkt_burst = mlx5_tx_burst_vec; DEBUG("selected Enhanced MPW TX vectorized function"); } else { - priv->dev->tx_pkt_burst = mlx5_tx_burst_empw; + dev->tx_pkt_burst = mlx5_tx_burst_empw; DEBUG("selected Enhanced MPW TX function"); } } else if (priv->mps && priv->txq_inline) { - priv->dev->tx_pkt_burst = mlx5_tx_burst_mpw_inline; + dev->tx_pkt_burst = mlx5_tx_burst_mpw_inline; DEBUG("selected MPW inline TX function"); } else if (priv->mps) { - priv->dev->tx_pkt_burst = mlx5_tx_burst_mpw; + dev->tx_pkt_burst = mlx5_tx_burst_mpw; DEBUG("selected MPW TX function"); } } @@ -1366,15 +1371,19 @@ struct priv * * Configure the RX function to use. * * @param priv - * Pointer to private structure. + * Pointer to private data structure. + * @param dev + * Pointer to rte_eth_dev structure. */ void -priv_select_rx_function(struct priv *priv) +priv_dev_select_rx_function(struct priv *priv, struct rte_eth_dev *dev) { + assert(priv != NULL); + assert(dev != NULL); if (priv_check_vec_rx_support(priv) > 0) { - priv->dev->rx_pkt_burst = mlx5_rx_burst_vec; + dev->rx_pkt_burst = mlx5_rx_burst_vec; DEBUG("selected RX vectorized function"); } else { - priv->dev->rx_pkt_burst = mlx5_rx_burst; + dev->rx_pkt_burst = mlx5_rx_burst; } } diff --git a/drivers/net/mlx5/mlx5_fdir.c b/drivers/net/mlx5/mlx5_fdir.c index acae668..66e3818 100644 --- a/drivers/net/mlx5/mlx5_fdir.c +++ b/drivers/net/mlx5/mlx5_fdir.c @@ -1068,6 +1068,8 @@ struct mlx5_fdir_filter { int ret = EINVAL; struct priv *priv = dev->data->dev_private; + if (mlx5_is_secondary()) + return -E_RTE_SECONDARY; switch (filter_type) { case RTE_ETH_FILTER_GENERIC: if (filter_op != RTE_ETH_FILTER_GET) diff --git a/drivers/net/mlx5/mlx5_rss.c b/drivers/net/mlx5/mlx5_rss.c index 1249943..d3d2603 100644 --- a/drivers/net/mlx5/mlx5_rss.c +++ b/drivers/net/mlx5/mlx5_rss.c @@ -350,6 +350,7 @@ int ret; struct priv *priv = dev->data->dev_private; + assert(!mlx5_is_secondary()); mlx5_dev_stop(dev); priv_lock(priv); ret = priv_dev_rss_reta_update(priv, reta_conf, reta_size); diff --git a/drivers/net/mlx5/mlx5_rxq.c b/drivers/net/mlx5/mlx5_rxq.c index 22448c9..b71f72f 100644 --- a/drivers/net/mlx5/mlx5_rxq.c +++ b/drivers/net/mlx5/mlx5_rxq.c @@ -1250,6 +1250,7 @@ unsigned int count = 0; struct rte_intr_handle *intr_handle = priv->dev->intr_handle; + assert(!mlx5_is_secondary()); if (!priv->dev->data->dev_conf.intr_conf.rxq) return 0; priv_rx_intr_vec_disable(priv); diff --git a/drivers/net/mlx5/mlx5_trigger.c b/drivers/net/mlx5/mlx5_trigger.c index 3fa9401..51c31aa 100644 --- a/drivers/net/mlx5/mlx5_trigger.c +++ b/drivers/net/mlx5/mlx5_trigger.c @@ -66,8 +66,8 @@ return 0; } /* Update Rx/Tx callback. */ - priv_select_tx_function(priv); - priv_select_rx_function(priv); + priv_dev_select_tx_function(priv, dev); + priv_dev_select_rx_function(priv, dev); DEBUG("%p: allocating and configuring hash RX queues", (void *)dev); err = priv_create_hash_rxqs(priv); if (!err)