net/smc: set rmb's SG_MAX_SINGLE_ALLOC limitation only when CONFIG_ARCH_NO_SG_CHAIN is defined

[ Upstream commit 3ac14b9dfbd345e891d48d89f6c2fa519848f0f4 ]

SG_MAX_SINGLE_ALLOC is used to limit maximum number of entries that
will be allocated in one piece of scatterlist. When the entries of
scatterlist exceeds SG_MAX_SINGLE_ALLOC, sg chain will be used. From
commit 7c703e54cc ("arch: switch the default on ARCH_HAS_SG_CHAIN"),
we can know that the macro CONFIG_ARCH_NO_SG_CHAIN is used to identify
whether sg chain is supported. So, SMC-R's rmb buffer should be limited
by SG_MAX_SINGLE_ALLOC only when the macro CONFIG_ARCH_NO_SG_CHAIN is
defined.

Fixes: a3fe3d01bd ("net/smc: introduce sg-logic for RMBs")
Signed-off-by: Guangguan Wang <guangguan.wang@linux.alibaba.com>
Co-developed-by: Wen Gu <guwen@linux.alibaba.com>
Signed-off-by: Wen Gu <guwen@linux.alibaba.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Signed-off-by: Sasha Levin <sashal@kernel.org>
This commit is contained in:
Guangguan Wang 2024-06-03 11:00:18 +08:00 committed by Greg Kroah-Hartman
parent 44aa1e461c
commit a9e46f9554

View file

@ -1974,7 +1974,6 @@ out:
*/ */
static u8 smc_compress_bufsize(int size, bool is_smcd, bool is_rmb) static u8 smc_compress_bufsize(int size, bool is_smcd, bool is_rmb)
{ {
const unsigned int max_scat = SG_MAX_SINGLE_ALLOC * PAGE_SIZE;
u8 compressed; u8 compressed;
if (size <= SMC_BUF_MIN_SIZE) if (size <= SMC_BUF_MIN_SIZE)
@ -1984,9 +1983,11 @@ static u8 smc_compress_bufsize(int size, bool is_smcd, bool is_rmb)
compressed = min_t(u8, ilog2(size) + 1, compressed = min_t(u8, ilog2(size) + 1,
is_smcd ? SMCD_DMBE_SIZES : SMCR_RMBE_SIZES); is_smcd ? SMCD_DMBE_SIZES : SMCR_RMBE_SIZES);
#ifdef CONFIG_ARCH_NO_SG_CHAIN
if (!is_smcd && is_rmb) if (!is_smcd && is_rmb)
/* RMBs are backed by & limited to max size of scatterlists */ /* RMBs are backed by & limited to max size of scatterlists */
compressed = min_t(u8, compressed, ilog2(max_scat >> 14)); compressed = min_t(u8, compressed, ilog2((SG_MAX_SINGLE_ALLOC * PAGE_SIZE) >> 14));
#endif
return compressed; return compressed;
} }