From nobody Thu Oct 9 02:52:16 2025 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 02F6221A425; Fri, 20 Jun 2025 11:43:37 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1750419818; cv=none; b=UWul1cVDrYaHnZ94Arrc8JAJkUjCdjNaEPVOAkZzcQaxWMwfdBlVAlDmixZHcQ/kP4sPa6DzXQ/T64aAKgunVHNU7FCUeps6A9SX8bE1omzSSq6M5HROi39OfaDrq2HffO0kLOrOc3i+CdUZs21OwmLiv0s9n5zGNAmdF2KSTSs= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1750419818; c=relaxed/simple; bh=huyYXBjxoUlbMgsEeTSO6RSLo2wZgKDFybH8JTb2g7U=; h=From:To:Cc:Subject:Date:Message-Id:MIME-Version; b=thOQ9ZWaxkKvJMJt5CBm3TJVrIkD0yL2J3yT8ayGcsRRxYsiKMk5B+GUcpkOKmPUIZ1h+HqLBly1aV4LmGkzBVJ+StonQ6WBuArCDzPc7ceZRWIAPgh7Cw87zICb/MwMm8waUMiSYlyD1Wa0RAQF8u0wRm50OhqPA+mwExfu5T0= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=PLk3W+n8; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="PLk3W+n8" Received: by smtp.kernel.org (Postfix) with ESMTPSA id D86B0C4CEE3; Fri, 20 Jun 2025 11:43:34 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1750419817; bh=huyYXBjxoUlbMgsEeTSO6RSLo2wZgKDFybH8JTb2g7U=; h=From:To:Cc:Subject:Date:From; b=PLk3W+n8O9Q8SeD4XraZY78wnohzP6GWTciiDsfCB31+VTS3aBn0YbGqHGo8KYTfK UbJEgpwICGi35S6ZJqq1tYIh3Le1lysdVB836foEcu6RwxDoW9RBw2AzPEDvnda1cU py1VyGN7NQ6VZrHMtXGKi7kmEUfX4btMyIHkY0UelMTdqf8hsd6HzpSWsjJh/1lxK7 ivcQ3E5rYPm6QWiOqFGqe1XLDJdXLEPF3y1brzHwGtQrW+eVkv8/VpZw5o5yPzLS/o qnvZrvtHIcfTCL9XkopBQbMkAqHN10HLIvgeVMv/i/w29Dg3Ckmk4ap0iBr/nVfyyh wiHQtrmwJVIYQ== From: Arnd Bergmann To: Bernard Metzler , Jason Gunthorpe , Leon Romanovsky , Nathan Chancellor Cc: Arnd Bergmann , Nick Desaulniers , Bill Wendling , Justin Stitt , Potnuri Bharat Teja , Showrya M N , Eric Biggers , linux-rdma@vger.kernel.org, linux-kernel@vger.kernel.org, llvm@lists.linux.dev Subject: [PATCH] RDMA/siw: work around clang stack size warning Date: Fri, 20 Jun 2025 13:43:28 +0200 Message-Id: <20250620114332.4072051-1-arnd@kernel.org> X-Mailer: git-send-email 2.39.5 Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" From: Arnd Bergmann clang inlines a lot of functions into siw_qp_sq_process(), with the aggregate stack frame blowing the warning limit in some configurations: drivers/infiniband/sw/siw/siw_qp_tx.c:1014:5: error: stack frame size (1544= ) exceeds limit (1280) in 'siw_qp_sq_process' [-Werror,-Wframe-larger-than] The real problem here is the array of kvec structures in siw_tx_hdt that makes up the majority of the consumed stack space. Ideally there would be a way to avoid allocating the array on the stack, but that would require a larger rework. Add a noinline_for_stack annotation to avoid the warning for now, and make clang behave the same way as gcc here. The combined stack usage is still similar, but is spread over multiple functions now. Signed-off-by: Arnd Bergmann Reviewed-by: Zhu Yanjun --- drivers/infiniband/sw/siw/siw_qp_tx.c | 22 ++++++++++++++++------ 1 file changed, 16 insertions(+), 6 deletions(-) diff --git a/drivers/infiniband/sw/siw/siw_qp_tx.c b/drivers/infiniband/sw/= siw/siw_qp_tx.c index 6432bce7d083..3a08f57d2211 100644 --- a/drivers/infiniband/sw/siw/siw_qp_tx.c +++ b/drivers/infiniband/sw/siw/siw_qp_tx.c @@ -277,6 +277,15 @@ static int siw_qp_prepare_tx(struct siw_iwarp_tx *c_tx) return PKT_FRAGMENTED; } =20 +static noinline_for_stack int +siw_sendmsg(struct socket *sock, unsigned int msg_flags, + struct kvec *vec, size_t num, size_t len) +{ + struct msghdr msg =3D { .msg_flags =3D msg_flags }; + + return kernel_sendmsg(sock, &msg, vec, num, len); +} + /* * Send out one complete control type FPDU, or header of FPDU carrying * data. Used for fixed sized packets like Read.Requests or zero length @@ -285,12 +294,11 @@ static int siw_qp_prepare_tx(struct siw_iwarp_tx *c_t= x) static int siw_tx_ctrl(struct siw_iwarp_tx *c_tx, struct socket *s, int flags) { - struct msghdr msg =3D { .msg_flags =3D flags }; struct kvec iov =3D { .iov_base =3D (char *)&c_tx->pkt.ctrl + c_tx->ctrl_sent, .iov_len =3D c_tx->ctrl_len - c_tx->ctrl_sent }; =20 - int rv =3D kernel_sendmsg(s, &msg, &iov, 1, iov.iov_len); + int rv =3D siw_sendmsg(s, flags, &iov, 1, iov.iov_len); =20 if (rv >=3D 0) { c_tx->ctrl_sent +=3D rv; @@ -427,13 +435,13 @@ static void siw_unmap_pages(struct kvec *iov, unsigne= d long kmap_mask, int len) * Write out iov referencing hdr, data and trailer of current FPDU. * Update transmit state dependent on write return status */ -static int siw_tx_hdt(struct siw_iwarp_tx *c_tx, struct socket *s) +static noinline_for_stack int siw_tx_hdt(struct siw_iwarp_tx *c_tx, + struct socket *s) { struct siw_wqe *wqe =3D &c_tx->wqe_active; struct siw_sge *sge =3D &wqe->sqe.sge[c_tx->sge_idx]; struct kvec iov[MAX_ARRAY]; struct page *page_array[MAX_ARRAY]; - struct msghdr msg =3D { .msg_flags =3D MSG_DONTWAIT | MSG_EOR }; =20 int seg =3D 0, do_crc =3D c_tx->do_crc, is_kva =3D 0, rv; unsigned int data_len =3D c_tx->bytes_unsent, hdr_len =3D 0, trl_len =3D = 0, @@ -586,14 +594,16 @@ static int siw_tx_hdt(struct siw_iwarp_tx *c_tx, stru= ct socket *s) rv =3D siw_0copy_tx(s, page_array, &wqe->sqe.sge[c_tx->sge_idx], c_tx->sge_off, data_len); if (rv =3D=3D data_len) { - rv =3D kernel_sendmsg(s, &msg, &iov[seg], 1, trl_len); + + rv =3D siw_sendmsg(s, MSG_DONTWAIT | MSG_EOR, &iov[seg], + 1, trl_len); if (rv > 0) rv +=3D data_len; else rv =3D data_len; } } else { - rv =3D kernel_sendmsg(s, &msg, iov, seg + 1, + rv =3D siw_sendmsg(s, MSG_DONTWAIT | MSG_EOR, iov, seg + 1, hdr_len + data_len + trl_len); siw_unmap_pages(iov, kmap_mask, seg); } --=20 2.39.5