From patchwork Sun Jul 21 14:56:41 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Slava Ovsiienko X-Patchwork-Id: 56814 X-Patchwork-Delegate: rasland@nvidia.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 1E0941B4B6; Sun, 21 Jul 2019 16:57:08 +0200 (CEST) Received: from mellanox.co.il (mail-il-dmz.mellanox.com [193.47.165.129]) by dpdk.org (Postfix) with ESMTP id EDB154CA6 for ; Sun, 21 Jul 2019 16:57:01 +0200 (CEST) Received: from Internal Mail-Server by MTLPINE2 (envelope-from viacheslavo@mellanox.com) with ESMTPS (AES256-SHA encrypted); 21 Jul 2019 17:56:59 +0300 Received: from pegasus12.mtr.labs.mlnx (pegasus12.mtr.labs.mlnx [10.210.17.40]) by labmailer.mlnx (8.13.8/8.13.8) with ESMTP id x6LEuxfs009545; Sun, 21 Jul 2019 17:56:59 +0300 Received: from pegasus12.mtr.labs.mlnx (localhost [127.0.0.1]) by pegasus12.mtr.labs.mlnx (8.14.7/8.14.7) with ESMTP id x6LEuxcV003901; Sun, 21 Jul 2019 14:56:59 GMT Received: (from viacheslavo@localhost) by pegasus12.mtr.labs.mlnx (8.14.7/8.14.7/Submit) id x6LEuxjj003900; Sun, 21 Jul 2019 14:56:59 GMT X-Authentication-Warning: pegasus12.mtr.labs.mlnx: viacheslavo set sender to viacheslavo@mellanox.com using -f From: Viacheslav Ovsiienko To: dev@dpdk.org Cc: yskoh@mellanox.com, shahafs@mellanox.com, stephen@networkplumber.org Date: Sun, 21 Jul 2019 14:56:41 +0000 Message-Id: <1563721001-3730-3-git-send-email-viacheslavo@mellanox.com> X-Mailer: git-send-email 1.8.3.1 In-Reply-To: <1563721001-3730-1-git-send-email-viacheslavo@mellanox.com> References: <1563514305-27405-1-git-send-email-viacheslavo@mellanox.com> <1563721001-3730-1-git-send-email-viacheslavo@mellanox.com> Subject: [dpdk-dev] [PATCH v2 2/2] Revert "net/mlx5: fix master device Netlink socket sharing" 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" This reverts commit e28111ac9864af09e826241a915dfff87a9c00ad. The netlink requests are replaced by ifindex caching and not needed anymore. Signed-off-by: Viacheslav Ovsiienko Fixes: e28111ac9864 ("net/mlx5: fix master device Netlink socket sharing") Acked-by: Yongseok Koh --- drivers/net/mlx5/mlx5.h | 6 --- drivers/net/mlx5/mlx5_ethdev.c | 109 ++--------------------------------------- 2 files changed, 3 insertions(+), 112 deletions(-) diff --git a/drivers/net/mlx5/mlx5.h b/drivers/net/mlx5/mlx5.h index 1011dcc..3e75961 100644 --- a/drivers/net/mlx5/mlx5.h +++ b/drivers/net/mlx5/mlx5.h @@ -518,15 +518,9 @@ struct mlx5_priv { /* mlx5_ethdev.c */ int mlx5_get_ifname(const struct rte_eth_dev *dev, char (*ifname)[IF_NAMESIZE]); -int mlx5_get_ifname_base(const struct rte_eth_dev *base, - const struct rte_eth_dev *dev, - char (*ifname)[IF_NAMESIZE]); int mlx5_get_master_ifname(const char *ibdev_path, char (*ifname)[IF_NAMESIZE]); unsigned int mlx5_ifindex(const struct rte_eth_dev *dev); int mlx5_ifreq(const struct rte_eth_dev *dev, int req, struct ifreq *ifr); -int mlx5_ifreq_base(const struct rte_eth_dev *base, - const struct rte_eth_dev *dev, - int req, struct ifreq *ifr); int mlx5_get_mtu(struct rte_eth_dev *dev, uint16_t *mtu); int mlx5_set_flags(struct rte_eth_dev *dev, unsigned int keep, unsigned int flags); diff --git a/drivers/net/mlx5/mlx5_ethdev.c b/drivers/net/mlx5/mlx5_ethdev.c index dfd9e97..9629cfb 100644 --- a/drivers/net/mlx5/mlx5_ethdev.c +++ b/drivers/net/mlx5/mlx5_ethdev.c @@ -240,51 +240,6 @@ struct ethtool_link_settings { } /** - * Get interface name for the specified device, uses the extra base - * device resources to perform Netlink requests. - * - * This is a port representor-aware version of mlx5_get_master_ifname(). - * - * @param[in] base - * Pointer to Ethernet device to use Netlink socket from - * to perfrom requests. - * @param[in] dev - * Pointer to Ethernet device. - * @param[out] ifname - * Interface name output buffer. - * - * @return - * 0 on success, a negative errno value otherwise and rte_errno is set. - */ -int -mlx5_get_ifname_base(const struct rte_eth_dev *base, - const struct rte_eth_dev *dev, - char (*ifname)[IF_NAMESIZE]) -{ - struct mlx5_priv *priv = dev->data->dev_private; - struct mlx5_priv *priv_base = base->data->dev_private; - unsigned int ifindex; - - assert(priv); - assert(priv->sh); - assert(priv_base); - ifindex = priv_base->nl_socket_rdma >= 0 ? - mlx5_nl_ifindex(priv_base->nl_socket_rdma, - priv->sh->ibdev_name, - priv->ibv_port) : 0; - if (!ifindex) { - if (!priv->representor) - return mlx5_get_master_ifname(priv->sh->ibdev_path, - ifname); - rte_errno = ENXIO; - return -rte_errno; - } - if (if_indextoname(ifindex, &(*ifname)[0])) - return 0; - rte_errno = errno; - return -rte_errno; -} -/** * Get the interface index from device name. * * @param[in] dev @@ -346,51 +301,6 @@ struct ethtool_link_settings { } /** - * Perform ifreq ioctl() on specified Ethernet device, - * ifindex, name and other attributes are requested - * on the base device to avoid specified device Netlink - * socket sharing (this is not thread-safe). - * - * @param[in] base - * Pointer to Ethernet device to get dev attributes. - * @param[in] dev - * Pointer to Ethernet device to perform ioctl. - * @param req - * Request number to pass to ioctl(). - * @param[out] ifr - * Interface request structure output buffer. - * - * @return - * 0 on success, a negative errno value otherwise and rte_errno is set. - */ -int -mlx5_ifreq_base(const struct rte_eth_dev *base, - const struct rte_eth_dev *dev, - int req, struct ifreq *ifr) -{ - int sock = socket(PF_INET, SOCK_DGRAM, IPPROTO_IP); - int ret = 0; - - if (sock == -1) { - rte_errno = errno; - return -rte_errno; - } - ret = mlx5_get_ifname_base(base, dev, &ifr->ifr_name); - if (ret) - goto error; - ret = ioctl(sock, req, ifr); - if (ret == -1) { - rte_errno = errno; - goto error; - } - close(sock); - return 0; -error: - close(sock); - return -rte_errno; -} - -/** * Get device MTU. * * @param dev @@ -872,15 +782,7 @@ int mlx5_fw_version_get(struct rte_eth_dev *dev, char *fw_ver, size_t fw_size) ifr = (struct ifreq) { .ifr_data = (void *)&edata, }; - /* - * Use special version of mlx5_ifreq() - * to get master device name with local - * device Netlink socket. Using master - * device Netlink socket is not thread - * safe. - */ - ret = mlx5_ifreq_base(dev, master, - SIOCETHTOOL, &ifr); + ret = mlx5_ifreq(master, SIOCETHTOOL, &ifr); } } if (ret) { @@ -977,12 +879,7 @@ int mlx5_fw_version_get(struct rte_eth_dev *dev, char *fw_ver, size_t fw_size) ifr = (struct ifreq) { .ifr_data = (void *)&gcmd, }; - /* - * Avoid using master Netlink socket. - * This is not thread-safe. - */ - ret = mlx5_ifreq_base(dev, master, - SIOCETHTOOL, &ifr); + ret = mlx5_ifreq(master, SIOCETHTOOL, &ifr); } } if (ret) { @@ -1003,7 +900,7 @@ int mlx5_fw_version_get(struct rte_eth_dev *dev, char *fw_ver, size_t fw_size) *ecmd = gcmd; ifr.ifr_data = (void *)ecmd; - ret = mlx5_ifreq_base(dev, master ? master : dev, SIOCETHTOOL, &ifr); + ret = mlx5_ifreq(master ? master : dev, SIOCETHTOOL, &ifr); if (ret) { DRV_LOG(DEBUG, "port %u ioctl(SIOCETHTOOL,"