From 5366074b019aaf1a27eb5912b928496e871f73c4 Mon Sep 17 00:00:00 2001 From: Nelio Laranjeiro Date: Tue, 24 Jul 2018 08:50:27 +0200 Subject: [PATCH] net/mlx5: fix route Netlink message overflow Route Netlink message socket is wrongly initialized by registering to the route link group. This causes the socket to receive all link message related to routes whereas the PMD do not expect to receive such information. In some situation it ends by filling the socket at a point that any new message cannot be exchanged. As the PMD is not expected to process such broadcast messages, the parameter in the nl_group in the function is also remove. Fixes: ccdcba53a3f4 ("net/mlx5: use Netlink to add/remove MAC addresses") Cc: stable@dpdk.org Signed-off-by: Zijie Pan Signed-off-by: Nelio Laranjeiro Acked-by: Adrien Mazarguil --- drivers/net/mlx5/mlx5.c | 8 ++++---- drivers/net/mlx5/mlx5.h | 2 +- drivers/net/mlx5/mlx5_nl.c | 5 +---- 3 files changed, 6 insertions(+), 9 deletions(-) diff --git a/drivers/net/mlx5/mlx5.c b/drivers/net/mlx5/mlx5.c index a1c0ad70ac..e3e2a181ac 100644 --- a/drivers/net/mlx5/mlx5.c +++ b/drivers/net/mlx5/mlx5.c @@ -948,8 +948,8 @@ mlx5_dev_spawn(struct rte_device *dpdk_dev, rte_spinlock_init(&priv->uar_lock[i]); #endif /* Some internal functions rely on Netlink sockets, open them now. */ - priv->nl_socket_rdma = mlx5_nl_init(0, NETLINK_RDMA); - priv->nl_socket_route = mlx5_nl_init(RTMGRP_LINK, NETLINK_ROUTE); + priv->nl_socket_rdma = mlx5_nl_init(NETLINK_RDMA); + priv->nl_socket_route = mlx5_nl_init(NETLINK_ROUTE); priv->nl_sn = 0; priv->representor = !!switch_info->representor; priv->domain_id = RTE_ETH_DEV_SWITCH_DOMAIN_ID_INVALID; @@ -1318,8 +1318,8 @@ mlx5_pci_probe(struct rte_pci_driver *pci_drv __rte_unused, ibv_match[n] = NULL; struct mlx5_dev_spawn_data list[n]; - int nl_route = n ? mlx5_nl_init(0, NETLINK_ROUTE) : -1; - int nl_rdma = n ? mlx5_nl_init(0, NETLINK_RDMA) : -1; + int nl_route = n ? mlx5_nl_init(NETLINK_ROUTE) : -1; + int nl_rdma = n ? mlx5_nl_init(NETLINK_RDMA) : -1; unsigned int i; unsigned int u; diff --git a/drivers/net/mlx5/mlx5.h b/drivers/net/mlx5/mlx5.h index a7f50b31f0..05da0d4d4d 100644 --- a/drivers/net/mlx5/mlx5.h +++ b/drivers/net/mlx5/mlx5.h @@ -383,7 +383,7 @@ int mlx5_socket_connect(struct rte_eth_dev *priv); /* mlx5_nl.c */ -int mlx5_nl_init(uint32_t nlgroups, int protocol); +int mlx5_nl_init(int protocol); int mlx5_nl_mac_addr_add(struct rte_eth_dev *dev, struct ether_addr *mac, uint32_t index); int mlx5_nl_mac_addr_remove(struct rte_eth_dev *dev, struct ether_addr *mac, diff --git a/drivers/net/mlx5/mlx5_nl.c b/drivers/net/mlx5/mlx5_nl.c index 008cd2c318..0cc26f9f17 100644 --- a/drivers/net/mlx5/mlx5_nl.c +++ b/drivers/net/mlx5/mlx5_nl.c @@ -89,8 +89,6 @@ struct mlx5_nl_ifindex_data { /** * Opens a Netlink socket. * - * @param nl_groups - * Netlink group value (e.g. RTMGRP_LINK). * @param protocol * Netlink protocol (e.g. NETLINK_ROUTE, NETLINK_RDMA). * @@ -99,14 +97,13 @@ struct mlx5_nl_ifindex_data { * rte_errno is set. */ int -mlx5_nl_init(uint32_t nl_groups, int protocol) +mlx5_nl_init(int protocol) { int fd; int sndbuf_size = MLX5_SEND_BUF_SIZE; int rcvbuf_size = MLX5_RECV_BUF_SIZE; struct sockaddr_nl local = { .nl_family = AF_NETLINK, - .nl_groups = nl_groups, }; int ret; -- 2.20.1