[PATCH v5 2/6] dma: swiotlb: Track whether the pool size was explicitly set
Robin Murphy
robin.murphy at arm.com
Mon Sep 21 08:45:36 PDT 2026
On 21/09/2026 7:36 am, Aneesh Kumar K.V (Arm) wrote:
> swiotlb_adjust_size() must not override a pool size supplied through the
> swiotlb= command-line parameter.
>
> Currently, it determines whether a size was supplied by comparing
> default_nslabs with IO_TLB_DEFAULT_SIZE. This fails when the user
> explicitly requests the compiled-in default size, allowing the request
> to be overwritten by automatic pool sizing.
>
> Record whether swiotlb= supplied a numeric size and add
> swiotlb_default_size_changed() to query that state.
>
> Signed-off-by: Aneesh Kumar K.V (Arm) <aneesh.kumar at kernel.org>
> ---
> kernel/dma/swiotlb.c | 9 ++++++++-
> 1 file changed, 8 insertions(+), 1 deletion(-)
>
> diff --git a/kernel/dma/swiotlb.c b/kernel/dma/swiotlb.c
> index aa19e81ae544..8f86deb25be2 100644
> --- a/kernel/dma/swiotlb.c
> +++ b/kernel/dma/swiotlb.c
> @@ -107,6 +107,7 @@ static struct io_tlb_mem io_tlb_default_mem;
>
> static unsigned long default_nslabs = IO_TLB_DEFAULT_SIZE >> IO_TLB_SHIFT;
> static unsigned long default_nareas;
> +static bool swiotlb_size_set __initdata;
Nit: there are various ways and reasons that the size is set in general;
could this please be named something clearer, e.g.
"swiotlb_cmdline_size_set"?
> /**
> * struct io_tlb_area - IO TLB memory area descriptor
> @@ -269,6 +270,7 @@ setup_io_tlb_npages(char *str)
> /* avoid tail segment of size < IO_TLB_SEGSIZE */
> default_nslabs =
> ALIGN(simple_strtoul(str, &str, 0), IO_TLB_SEGSIZE);
> + swiotlb_size_set = true;
> }
> if (*str == ',')
> ++str;
> @@ -304,6 +306,11 @@ unsigned long swiotlb_size_or_default(void)
> return default_nslabs << IO_TLB_SHIFT;
> }
>
> +static bool __init swiotlb_default_size_changed(void)
...and then do we really need a trivial wrapper function with the exact
same scope as the variable itself? (Plus the name is similarly confusing
as the places this is used are themselves potentially changing the
default size, if you consider "default" to mean "not explicitly
specified"...)
With the naming improved,
Reviewed-by: Robin Murphy <robin.murphy at arm.com>
> +{
> + return swiotlb_size_set;
> +}
> +
> void __init swiotlb_adjust_size(unsigned long size)
> {
> /*
> @@ -311,7 +318,7 @@ void __init swiotlb_adjust_size(unsigned long size)
> * architectures such as those supporting memory encryption to
> * adjust/expand SWIOTLB size for their use.
> */
> - if (default_nslabs != IO_TLB_DEFAULT_SIZE >> IO_TLB_SHIFT)
> + if (swiotlb_default_size_changed())
> return;
>
> default_nslabs = swiotlb_aligned_nslabs(size);
More information about the linux-arm-kernel
mailing list