Linux Documentation
 help / color / mirror / Atom feed
From: Marek Szyprowski <m.szyprowski@samsung.com>
To: bibek.patro@oss.qualcomm.com, Robin Murphy <robin.murphy@arm.com>,
	Michael Kelley <mhklinux@outlook.com>
Cc: iommu@lists.linux.dev, linux-kernel@vger.kernel.org,
	Jagadeesh Pagadala <jpagadal@qti.qualcomm.com>,
	Jonathan Corbet <corbet@lwn.net>,
	Shuah Khan <skhan@linuxfoundation.org>,
	linux-doc@vger.kernel.org
Subject: Re: [PATCH v2] swiotlb: introduce Kconfig option for compile-time default pool size
Date: Thu, 9 Jul 2026 16:52:57 +0200	[thread overview]
Message-ID: <baf08834-6b1b-4b24-858b-eb0d5ef124f6@samsung.com> (raw)
In-Reply-To: <20260702-swiotlb-v2-1-9205f3ba5408@oss.qualcomm.com>

On 02.07.2026 16:09, bibek.patro@oss.qualcomm.com wrote:
> From: Jagadeesh Pagadala <jpagadal@qti.qualcomm.com>
>
> The SWIOTLB bounce buffer pool size is hardcoded at 64 MB via
> IO_TLB_DEFAULT_SIZE with no compile-time knob to adjust it. On
> memory-constrained embedded or mobile platforms equipped with a
> hardware IOMMU (e.g., ARM SMMU) covering most DMA-capable devices,
> reserving 64 MB at boot is unnecessarily wasteful — the SWIOTLB is
> only exercised for devices that bypass the IOMMU or have restricted
> DMA address ranges.
>
> Introduce CONFIG_SWIOTLB_DEFAULT_SIZE_MB, an integer Kconfig option
> (range 1–64 MB, default 64) that allows platforms to set a smaller
> compile-time default. IO_TLB_DEFAULT_SIZE is updated to derive from
> this value when CONFIG_SWIOTLB is enabled, preserving the existing
> 64 MB default when the option is not configured.
>
> The runtime "swiotlb=<nslabs>" kernel parameter override remains
> fully supported and takes precedence over the compile-time default.
>
> Signed-off-by: Jagadeesh Pagadala <jpagadal@qti.qualcomm.com>
> Signed-off-by: Bibek Kumar Patro <bibek.patro@oss.qualcomm.com>
> ---
> The SWIOTLB bounce buffer pool size is hardcoded at 64 MB. On
> memory-constrained platforms with a hardware IOMMU (e.g., ARM SMMU),
> this reservation is wasteful as SWIOTLB is only needed for devices
> that bypass the IOMMU or have restricted DMA address ranges.
>
> Introduce CONFIG_SWIOTLB_DEFAULT_SIZE_MB (range 1–64 MB, default 64)
> to allow a smaller compile-time default. The runtime "swiotlb="
> parameter override remains supported and takes precedence.
>
> Before (default 64 MB):
>   [    0.000000] software IO TLB: area num 8.
>   [    0.000000] software IO TLB: mapped [mem 0x00000000fbfff000-0x00000000fffff000] (64MB)
>
> After (CONFIG_SWIOTLB_DEFAULT_SIZE_MB=1, 8 CPUs):
>   [    0.000000] software IO TLB: area num 8.
>   [    0.000000] software IO TLB: SWIOTLB bounce buffer size roundup to 2MB
>   [    0.000000] software IO TLB: mapped [mem 0x00000000ffdff000-0x00000000fffff000] (2MB)
>
> After (CONFIG_SWIOTLB_DEFAULT_SIZE_MB=2, 8 CPUs):
>   [    0.000000] software IO TLB: area num 8.
>   [    0.000000] software IO TLB: mapped [mem 0x00000000ffdff000-0x00000000fffff000] (2MB)
> ---
> Changes in v2:
> - Fix incorrect boot log label in cover letter: the roundup message is
>   produced by CONFIG_SWIOTLB_DEFAULT_SIZE_MB=1 (not =2) with 8 CPUs.
> - Update Documentation/core-api/swiotlb.rst to mention
>   CONFIG_SWIOTLB_DEFAULT_SIZE_MB as per Michael's suggestion.
> - Link to v1: https://protect2.fireeye.com/v1/url?k=7033f7b3-114e1d30-70327cfc-74fe48600158-fc2eb93dd6453735&q=1&e=44bf9751-f859-48d6-aee0-ebe8bab9d273&u=https%3A%2F%2Fpatch.msgid.link%2F20260617-swiotlb-v1-1-abfee3faf4ea%40oss.qualcomm.com
>
> To: Jonathan Corbet <corbet@lwn.net>
> To: Shuah Khan <skhan@linuxfoundation.org>
> To: Marek Szyprowski <m.szyprowski@samsung.com>
> To: Robin Murphy <robin.murphy@arm.com>
> Cc: linux-doc@vger.kernel.org
> Cc: linux-kernel@vger.kernel.org
> Cc: iommu@lists.linux.dev
> ---
>  Documentation/core-api/swiotlb.rst |  7 +++++--

Jonathan: could You ack the Documentation change, so I will take this to dma-mapping-for-next ?


>  include/linux/swiotlb.h            |  8 ++++++--
>  kernel/dma/Kconfig                 | 22 ++++++++++++++++++++++
>  3 files changed, 33 insertions(+), 4 deletions(-)
>
> diff --git a/Documentation/core-api/swiotlb.rst b/Documentation/core-api/swiotlb.rst
> index 9e0fe027dd3b..71b4e4c27eb5 100644
> --- a/Documentation/core-api/swiotlb.rst
> +++ b/Documentation/core-api/swiotlb.rst
> @@ -140,8 +140,11 @@ Data structures concepts
>  ------------------------
>  Memory used for swiotlb bounce buffers is allocated from overall system memory
>  as one or more "pools". The default pool is allocated during system boot with a
> -default size of 64 MiB. The default pool size may be modified with the
> -"swiotlb=" kernel boot line parameter. The default size may also be adjusted
> +default size of 64 MiB, which can be changed at compile time via
> +CONFIG_SWIOTLB_DEFAULT_SIZE_MB. The default pool size may also be
> +modified at runtime with the "swiotlb=" kernel boot line parameter,
> +which takes precedence over the compile-time default. The default size
> +may also be adjusted
>  due to other conditions, such as running in a CoCo VM, as described above. If
>  CONFIG_SWIOTLB_DYNAMIC is enabled, additional pools may be allocated later in
>  the life of the system. Each pool must be a contiguous range of physical
> diff --git a/include/linux/swiotlb.h b/include/linux/swiotlb.h
> index 3dae0f592063..1665a9ce8f94 100644
> --- a/include/linux/swiotlb.h
> +++ b/include/linux/swiotlb.h
> @@ -32,8 +32,12 @@ struct scatterlist;
>  #define IO_TLB_SHIFT 11
>  #define IO_TLB_SIZE (1 << IO_TLB_SHIFT)
>  
> -/* default to 64MB */
> -#define IO_TLB_DEFAULT_SIZE (64UL<<20)
> +/* compile-time default; overridable via CONFIG_SWIOTLB_DEFAULT_SIZE_MB */
> +#ifdef CONFIG_SWIOTLB
> +#define IO_TLB_DEFAULT_SIZE ((unsigned long)CONFIG_SWIOTLB_DEFAULT_SIZE_MB << 20)
> +#else
> +#define IO_TLB_DEFAULT_SIZE (64UL << 20)
> +#endif
>  
>  unsigned long swiotlb_size_or_default(void);
>  void __init swiotlb_init_remap(bool addressing_limit, unsigned int flags,
> diff --git a/kernel/dma/Kconfig b/kernel/dma/Kconfig
> index 0a4ba21a57a7..3830a63ae032 100644
> --- a/kernel/dma/Kconfig
> +++ b/kernel/dma/Kconfig
> @@ -86,6 +86,28 @@ config SWIOTLB
>  	bool
>  	select NEED_DMA_MAP_STATE
>  
> +config SWIOTLB_DEFAULT_SIZE_MB
> +	int "Default SWIOTLB bounce buffer size in MB"
> +	depends on SWIOTLB
> +	range 1 64
> +	default 64
> +	help
> +	  Sets the default size of the software IO TLB (SWIOTLB) bounce buffer
> +	  pool allocated at boot time. The default is 64 MB.
> +
> +	  On memory-constrained embedded or mobile platforms (e.g., those with
> +	  a hardware IOMMU such as ARM SMMU covering most DMA-capable devices),
> +	  a smaller value such as 4 or 8 MB may be sufficient. The SWIOTLB is
> +	  then only needed for devices that bypass the IOMMU or have restricted
> +	  DMA address ranges.
> +
> +	  The minimum allowed value is 1 MB. This compile-time default can be
> +	  overridden at runtime using the "swiotlb=<nslabs>" kernel command line
> +	  parameter. Refer to Documentation/admin-guide/kernel-parameters.txt
> +	  for details.
> +
> +	  If unsure, leave at the default value of 64.
> +
>  config SWIOTLB_DYNAMIC
>  	bool "Dynamic allocation of DMA bounce buffers"
>  	default n
>
> ---
> base-commit: 4fa3f5fabb30bf00d7475d5a33459ea83d639bf9
> change-id: 20260617-swiotlb-c215ce0b23f7
>
> Best regards,
> --  
> Bibek Kumar Patro <bibek.patro@oss.qualcomm.com>
>
>
Best regards
-- 
Marek Szyprowski, PhD
Samsung R&D Institute Poland


      parent reply	other threads:[~2026-07-09 14:53 UTC|newest]

Thread overview: 3+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
     [not found] <CGME20260702140941eucas1p22e5e3363c7e9338f18b2e050b0ef564a@eucas1p2.samsung.com>
2026-07-02 14:09 ` [PATCH v2] swiotlb: introduce Kconfig option for compile-time default pool size bibek.patro
2026-07-02 15:50   ` Michael Kelley
2026-07-09 14:52   ` Marek Szyprowski [this message]

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=baf08834-6b1b-4b24-858b-eb0d5ef124f6@samsung.com \
    --to=m.szyprowski@samsung.com \
    --cc=bibek.patro@oss.qualcomm.com \
    --cc=corbet@lwn.net \
    --cc=iommu@lists.linux.dev \
    --cc=jpagadal@qti.qualcomm.com \
    --cc=linux-doc@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=mhklinux@outlook.com \
    --cc=robin.murphy@arm.com \
    --cc=skhan@linuxfoundation.org \
    /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