From: sashiko-bot@kernel.org
To: "Aneesh Kumar K.V (Arm)" <aneesh.kumar@kernel.org>
Cc: "Christian Borntraeger" <borntraeger@linux.ibm.com>,
"Vasily Gorbik" <gor@linux.ibm.com>,
linux-s390@vger.kernel.org, "Heiko Carstens" <hca@linux.ibm.com>,
"Alexander Gordeev" <agordeev@linux.ibm.com>
Subject: Re: [PATCH v5 4/6] dma: swiotlb: Centralize memory-encryption pool sizing
Date: Mon, 21 Sep 2026 06:52:15 +0000 [thread overview]
Message-ID: <20260921065215.8B56C1F00893@smtp.kernel.org> (raw)
In-Reply-To: <20260921063628.362078-5-aneesh.kumar@kernel.org>
Thank you for your contribution! Sashiko AI review found 1 potential issue(s) to consider:
- [High] swiotlb: 64-bit division build error and 32-bit multiplication overflow
--
commit 7f27b828f817aa2b9787b04060d6febbcd685bcf
Author: Aneesh Kumar K.V (Arm) <aneesh.kumar@kernel.org>
dma: swiotlb: Centralize memory-encryption pool sizing
The patch moves the x86 guest-sizing policy into the SWIOTLB core, sizing
the SWIOTLB_POOL_CC_GUEST pool to 6% of guest memory. It also provides a
way for early users like the crash kernel to view the adjusted pool size
before SWIOTLB initialization.
> diff --git a/kernel/dma/swiotlb.c b/kernel/dma/swiotlb.c
> --- a/kernel/dma/swiotlb.c
> +++ b/kernel/dma/swiotlb.c
> @@ -480,6 +481,46 @@ static bool __init swiotlb_kmalloc_needs_bounce(void)
>
> +/**
> + * swiotlb_adjusted_size() - get the prospective adjusted SWIOTLB size
> + *
[ ... ]
> + */
> +unsigned long __init swiotlb_adjusted_size(void)
> +{
> + unsigned long nslabs, size = swiotlb_size_or_default();
> +
> + if (swiotlb_default_size_changed() ||
> + !cc_platform_has(CC_ATTR_GUEST_MEM_ENCRYPT))
> + return size;
[Severity: High]
This is a pre-existing issue, but returning `size` directly here bypasses
area-aware alignment for explicitly configured sizes and non-CC_GUEST setups.
Could this discrepancy, along with the behavior of `swiotlb_aligned_nslabs()`
during early boot, cause the crash kernel to under-reserve memory?
The crash kernel reserves low memory based on the prospective size from
`swiotlb_adjusted_size()` (or explicit `swiotlb=` sizes). However, early
in boot, `default_nareas` is 0, so `swiotlb_aligned_nslabs()` merely aligns
to segments and skips the area-aware power-of-two rounding:
kernel/dma/swiotlb.c:swiotlb_aligned_nslabs() {
...
if (!default_nareas)
return nslabs;
if (nslabs < IO_TLB_SEGSIZE * default_nareas)
nslabs = IO_TLB_SEGSIZE * default_nareas;
else if (!is_power_of_2(nslabs))
nslabs = roundup_pow_of_two(nslabs);
...
}
Later, `swiotlb_init_remap()` initializes `default_nareas` and calls
`swiotlb_adjust_nareas()`, triggering `round_up_default_nslabs()` to round
the pool up to the next power of two.
As a result, the allocated SWIOTLB pool can be up to ~50% larger than the
reserved size (e.g., 600MB rounded to 1024MB). When the crash kernel
attempts to allocate this rounded-up size, will it exceed its reserved
memory and OOM?
> + /*
> + * For SEV and TDX and CCA, all DMA has to occur via
[ ... ]
> + * The percentage of guest memory used here for SWIOTLB buffers is
> + * more of an approximation of the static adjustment which 64MB for
> + * <1G, and ~128M to 256M for 1G-to-4G, i.e., the 6%
> + */
> + size = memblock_phys_mem_size() * 6 / 100;
> + size = clamp_val(size, IO_TLB_DEFAULT_SIZE, SZ_1G);
[Severity: High]
Does this calculation cause an undefined reference to `__udivdi3` on 32-bit
PAE builds, and overflow on 32-bit non-PAE builds?
The guest sizing logic has been relocated into `kernel/dma/swiotlb.c`, which
is compiled for all architectures. On 32-bit kernels with PAE, `phys_addr_t`
is 64-bit, so `memblock_phys_mem_size() * 6 / 100` performs a 64-bit division
by 100. GCC will emit a call to `__udivdi3`, which is missing from the
kernel's libgcc, causing a fatal build link error.
On 32-bit kernels without PAE, `phys_addr_t` is 32-bit. If physical memory
exceeds ~715MB (`UINT_MAX / 6`), the multiplication `memblock_phys_mem_size()
* 6` overflows the 32-bit integer, resulting in a silently truncated and
incorrect pool size.
Should this be refactored to cast the operand to `u64` and use `div_u64()` to
be safe across all platforms?
> + nslabs = swiotlb_aligned_nslabs(size);
> +
> + return nslabs << IO_TLB_SHIFT;
> +}
--
Sashiko AI review · https://sashiko.dev/#/patchset/20260921063628.362078-1-aneesh.kumar@kernel.org?part=4
next prev parent reply other threads:[~2026-09-21 6:52 UTC|newest]
Thread overview: 28+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-09-21 6:36 [PATCH v5 0/6] dma: swiotlb: Centralize default pool policy and sizing Aneesh Kumar K.V (Arm)
2026-09-21 6:36 ` [PATCH v5 1/6] dma: swiotlb: Centralize default pool policy selection Aneesh Kumar K.V (Arm)
2026-09-21 6:56 ` sashiko-bot
2026-09-21 15:25 ` Robin Murphy
2026-09-22 5:32 ` Aneesh Kumar K.V
2026-09-21 6:36 ` [PATCH v5 2/6] dma: swiotlb: Track whether the pool size was explicitly set Aneesh Kumar K.V (Arm)
2026-09-21 6:44 ` sashiko-bot
2026-09-21 12:50 ` Catalin Marinas
2026-09-21 15:45 ` Robin Murphy
2026-09-22 5:42 ` Aneesh Kumar K.V
2026-09-21 6:36 ` [PATCH v5 3/6] dma: swiotlb: Centralize minimal pool sizing Aneesh Kumar K.V (Arm)
2026-09-21 6:45 ` sashiko-bot
2026-09-21 12:52 ` Catalin Marinas
2026-09-21 16:49 ` Robin Murphy
2026-09-22 6:56 ` Aneesh Kumar K.V
2026-09-21 6:36 ` [PATCH v5 4/6] dma: swiotlb: Centralize memory-encryption " Aneesh Kumar K.V (Arm)
2026-09-21 6:52 ` sashiko-bot [this message]
2026-09-22 7:02 ` Aneesh Kumar K.V
2026-09-23 12:47 ` Robin Murphy
2026-09-23 14:28 ` Aneesh Kumar K.V
2026-09-21 6:36 ` [PATCH v5 5/6] dma: swiotlb: Add an overridable architecture pool opt-out Aneesh Kumar K.V (Arm)
2026-09-21 6:51 ` sashiko-bot
2026-09-22 7:04 ` Aneesh Kumar K.V
2026-09-23 13:04 ` Robin Murphy
2026-09-23 14:18 ` Aneesh Kumar K.V
2026-09-21 6:36 ` [PATCH v5 6/6] dma: swiotlb: Remove SWIOTLB_ANY Aneesh Kumar K.V (Arm)
2026-09-21 6:48 ` sashiko-bot
2026-09-23 13:12 ` Robin Murphy
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20260921065215.8B56C1F00893@smtp.kernel.org \
--to=sashiko-bot@kernel.org \
--cc=agordeev@linux.ibm.com \
--cc=aneesh.kumar@kernel.org \
--cc=borntraeger@linux.ibm.com \
--cc=gor@linux.ibm.com \
--cc=hca@linux.ibm.com \
--cc=linux-s390@vger.kernel.org \
--cc=sashiko-reviews@lists.linux.dev \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).