From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mails.dpdk.org (mails.dpdk.org [217.70.189.124]) by inbox.dpdk.org (Postfix) with ESMTP id 18670A0C4C for ; Mon, 12 Jul 2021 15:15:16 +0200 (CEST) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 1268E40685; Mon, 12 Jul 2021 15:15:16 +0200 (CEST) Received: from mail-wr1-f44.google.com (mail-wr1-f44.google.com [209.85.221.44]) by mails.dpdk.org (Postfix) with ESMTP id 0D2F14069E for ; Mon, 12 Jul 2021 15:15:15 +0200 (CEST) Received: by mail-wr1-f44.google.com with SMTP id m2so14537831wrq.2 for ; Mon, 12 Jul 2021 06:15:15 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=CpwjoSPhBIsPB/XPxvyYSiDgpll5A3JrCjQk/S61/Vw=; b=NyfqE8GZxOVqgF8CqHsbvP+OuQemMwBBGFb7fDnPVCXLMKDcHrIO9JnGEn1XZZmwVz fu/rZ7e2Gb/3P0iH3ut5w5KIP2L4/mL7eZQMslWF1tkNjVwHViLeDMOISwm+SThmGcGa rQvroK2A/C+H6FW+J1dHMvqBIs5XJDAbDGx2tSah4XGD5XMqr5QYICsTjW0WiXv7sSCX jw+ZQC1rViyKmq36q6ec9xy4Pw2f3PO0r4FvJIUkZLHsSzUFsCDZH7o7u5Y34VRKxYMY GYRbF3LxG1sVPdnFyZdt+YYpabwpcFhNIUBD04DMq+9WA5fyeVstM0H/dS7bqrTcLAcM Kbpg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=CpwjoSPhBIsPB/XPxvyYSiDgpll5A3JrCjQk/S61/Vw=; b=BawpNpUOqXeItoYE3eg07Pn3V/EGLJr3t1SXmJCyhxe4kIAfww7sZXRtfW8EM2WB/z n57TBZC54QoQIfaI2ZbtC5ZDHAJnVb1aOirF3x7z67nyQ7IEqH9dN9goYqjOMSD83k0l NAOngyYqd1z4GFnHU85uzXiT6ijYrsczz7pJnVP1dVtvoFE6cqrrdfBqu0mtdVwYBG/s let6wbTcP8yY5Z/BpYyS1Fg7e6iPV9vy5Ip0hLeI0SSxSZJ4PAI1OiDj+sJzf4UwSat0 AeFnU5gHFkUGA6ekSMhV8I/DsnmQNwAxvECtXRUHikWfyD9ADJBbKp690tNK9Fg2CG8k qtZQ== X-Gm-Message-State: AOAM5301mOCeu3EsP6IIT1udyIwFqn/Gd4YHFegrsY8kO9BI0i78Yq42 Fq+GF5w14VBdzQZtwL1fa7E= X-Google-Smtp-Source: ABdhPJxWVavFu0czEQ4OVWzO4C60YB97rSXS+I/rIWVOOapk5p1ae0CPWF4+AmbVWH3xgFE5Rw67dQ== X-Received: by 2002:a05:6000:11c5:: with SMTP id i5mr32539747wrx.268.1626095714842; Mon, 12 Jul 2021 06:15:14 -0700 (PDT) Received: from localhost ([137.220.125.106]) by smtp.gmail.com with ESMTPSA id t5sm8048614wrw.38.2021.07.12.06.15.14 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 12 Jul 2021 06:15:14 -0700 (PDT) From: luca.boccassi@gmail.com To: Viacheslav Ovsiienko Cc: dpdk stable Date: Mon, 12 Jul 2021 14:05:34 +0100 Message-Id: <20210712130551.2462159-99-luca.boccassi@gmail.com> X-Mailer: git-send-email 2.30.2 In-Reply-To: <20210712130551.2462159-1-luca.boccassi@gmail.com> References: <20210712130551.2462159-1-luca.boccassi@gmail.com> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Subject: [dpdk-stable] patch 'common/mlx5: fix Netlink receive message buffer size' has been queued to stable release 20.11.3 X-BeenThere: stable@dpdk.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: patches for DPDK stable branches List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: stable-bounces@dpdk.org Sender: "stable" Hi, FYI, your patch has been queued to stable release 20.11.3 Note it hasn't been pushed to http://dpdk.org/browse/dpdk-stable yet. It will be pushed if I get no objections before 07/14/21. So please shout if anyone has objections. Also note that after the patch there's a diff of the upstream commit vs the patch applied to the branch. This will indicate if there was any rebasing needed to apply to the stable branch. If there were code changes for rebasing (ie: not only metadata diffs), please double check that the rebase was correctly done. Queued patches are on a temporary branch at: https://github.com/bluca/dpdk-stable This queued commit can be viewed at: https://github.com/bluca/dpdk-stable/commit/3c47e4e2e5fcb69131d2a7bdfa2a7659e187a8f2 Thanks. Luca Boccassi --- >From 3c47e4e2e5fcb69131d2a7bdfa2a7659e187a8f2 Mon Sep 17 00:00:00 2001 From: Viacheslav Ovsiienko Date: Thu, 1 Jul 2021 10:31:33 +0300 Subject: [PATCH] common/mlx5: fix Netlink receive message buffer size [ upstream commit 32d1e4dbadba4bc3523d8b354458a4b979e5c2e6 ] If there are many VFs the Netlink message length sent by kernel in reply to RTM_GETLINK request can be large. We should query the size of message being received in advance and allocate the large enough buffer to handle these large messages. Fixes: ccdcba53a3f4 ("net/mlx5: use Netlink to add/remove MAC addresses") Signed-off-by: Viacheslav Ovsiienko --- drivers/common/mlx5/linux/mlx5_nl.c | 69 +++++++++++++++++++++++------ 1 file changed, 55 insertions(+), 14 deletions(-) diff --git a/drivers/common/mlx5/linux/mlx5_nl.c b/drivers/common/mlx5/linux/mlx5_nl.c index 94afa04b85..1f765dca07 100644 --- a/drivers/common/mlx5/linux/mlx5_nl.c +++ b/drivers/common/mlx5/linux/mlx5_nl.c @@ -189,8 +189,8 @@ int mlx5_nl_init(int protocol) { int fd; - int sndbuf_size = MLX5_SEND_BUF_SIZE; - int rcvbuf_size = MLX5_RECV_BUF_SIZE; + int buf_size; + socklen_t opt_size; struct sockaddr_nl local = { .nl_family = AF_NETLINK, }; @@ -201,16 +201,36 @@ mlx5_nl_init(int protocol) rte_errno = errno; return -rte_errno; } - ret = setsockopt(fd, SOL_SOCKET, SO_SNDBUF, &sndbuf_size, sizeof(int)); + opt_size = sizeof(buf_size); + ret = getsockopt(fd, SOL_SOCKET, SO_SNDBUF, &buf_size, &opt_size); if (ret == -1) { rte_errno = errno; goto error; } - ret = setsockopt(fd, SOL_SOCKET, SO_RCVBUF, &rcvbuf_size, sizeof(int)); + DRV_LOG(DEBUG, "Netlink socket send buffer: %d", buf_size); + if (buf_size < MLX5_SEND_BUF_SIZE) { + ret = setsockopt(fd, SOL_SOCKET, SO_SNDBUF, + &buf_size, sizeof(buf_size)); + if (ret == -1) { + rte_errno = errno; + goto error; + } + } + opt_size = sizeof(buf_size); + ret = getsockopt(fd, SOL_SOCKET, SO_RCVBUF, &buf_size, &opt_size); if (ret == -1) { rte_errno = errno; goto error; } + DRV_LOG(DEBUG, "Netlink socket recv buffer: %d", buf_size); + if (buf_size < MLX5_RECV_BUF_SIZE) { + ret = setsockopt(fd, SOL_SOCKET, SO_RCVBUF, + &buf_size, sizeof(buf_size)); + if (ret == -1) { + rte_errno = errno; + goto error; + } + } ret = bind(fd, (struct sockaddr *)&local, sizeof(local)); if (ret == -1) { rte_errno = errno; @@ -332,11 +352,7 @@ mlx5_nl_recv(int nlsk_fd, uint32_t sn, int (*cb)(struct nlmsghdr *, void *arg), void *arg) { struct sockaddr_nl sa; - void *buf = mlx5_malloc(0, MLX5_RECV_BUF_SIZE, 0, SOCKET_ID_ANY); - struct iovec iov = { - .iov_base = buf, - .iov_len = MLX5_RECV_BUF_SIZE, - }; + struct iovec iov; struct msghdr msg = { .msg_name = &sa, .msg_namelen = sizeof(sa), @@ -344,18 +360,43 @@ mlx5_nl_recv(int nlsk_fd, uint32_t sn, int (*cb)(struct nlmsghdr *, void *arg), /* One message at a time */ .msg_iovlen = 1, }; + void *buf = NULL; int multipart = 0; int ret = 0; - if (!buf) { - rte_errno = ENOMEM; - return -rte_errno; - } do { struct nlmsghdr *nh; - int recv_bytes = 0; + int recv_bytes; do { + /* Query length of incoming message. */ + iov.iov_base = NULL; + iov.iov_len = 0; + recv_bytes = recvmsg(nlsk_fd, &msg, + MSG_PEEK | MSG_TRUNC); + if (recv_bytes < 0) { + rte_errno = errno; + ret = -rte_errno; + goto exit; + } + if (recv_bytes == 0) { + rte_errno = ENODATA; + ret = -rte_errno; + goto exit; + } + /* Allocate buffer to fetch the message. */ + if (recv_bytes < MLX5_RECV_BUF_SIZE) + recv_bytes = MLX5_RECV_BUF_SIZE; + mlx5_free(buf); + buf = mlx5_malloc(0, recv_bytes, 0, SOCKET_ID_ANY); + if (!buf) { + rte_errno = ENOMEM; + ret = -rte_errno; + goto exit; + } + /* Fetch the message. */ + iov.iov_base = buf; + iov.iov_len = recv_bytes; recv_bytes = recvmsg(nlsk_fd, &msg, 0); if (recv_bytes == -1) { rte_errno = errno; -- 2.30.2 --- Diff of the applied patch vs upstream commit (please double-check if non-empty: --- --- - 2021-07-12 13:41:41.699249959 +0100 +++ 0099-common-mlx5-fix-Netlink-receive-message-buffer-size.patch 2021-07-12 13:41:36.826129610 +0100 @@ -1 +1 @@ -From 32d1e4dbadba4bc3523d8b354458a4b979e5c2e6 Mon Sep 17 00:00:00 2001 +From 3c47e4e2e5fcb69131d2a7bdfa2a7659e187a8f2 Mon Sep 17 00:00:00 2001 @@ -5,0 +6,2 @@ +[ upstream commit 32d1e4dbadba4bc3523d8b354458a4b979e5c2e6 ] + @@ -12 +13,0 @@ -Cc: stable@dpdk.org @@ -20 +21 @@ -index 3f1912d078..dc8dafd0a8 100644 +index 94afa04b85..1f765dca07 100644