[PATCH v7 0/2] iommu/arm-smmu-v3: Make the queue depths tunable, and shrink them in a kdump kernel

Will Deacon will at kernel.org
Fri Oct 2 08:39:53 PDT 2026


On Fri, Sep 25, 2026 at 03:15:28PM +0100, Kiryl Shutsemau wrote:
> From: "Kiryl Shutsemau (Meta)" <kas at kernel.org>
> 
> The queues are sized from the IDR1 maxima and allocated at probe, costing
> megabytes per queue per SMMU instance. A kdump capture kernel pays that out
> of a small crashkernel reservation, for queues it barely uses and two of
> which it switches off anyway.
> 
> Patch 1 adds a cmdq_max_n_shift module parameter, decided in a per-queue
> helper and floored at one page. Patch 2 has a kdump kernel size all three
> queues at one page through the same helper. The parameter does not apply
> there.
> 
> Yuanhe Shu tested v6 on an arm64 server with six SMMUv3 instances, 64K
> pages and a 512 MiB crashkernel reservation. Without the series the queues
> took 192 MiB and the capture kernel OOMed before makedumpfile ran. With it
> they take about 1 MiB and the vmcore is saved.
> 
> Measured per instance under QEMU on -M virt,iommu=smmuv3 with the virtio
> devices behind the SMMU, the capture kernel identified by elfcorehdr= on
> the command line:
> 
>                         4K page          64K page
>       cmdq         1 MB -> 4 KB      8 MB -> 64 KB
>       evtq         1 MB -> 4 KB     16 MB -> 64 KB
> 
> cmdq_max_n_shift moves the command queue alone outside kdump and is
> ignored inside it; zero gives one page. QEMU exposes no PRI queue, which
> takes the same path. No CMD_SYNC timeout, GERROR or context fault in any
> run. Build-tested across 4K/16K/64K, TEGRA241_CMDQV=n, CRASH_DUMP=n and
> ARM_SMMU_V3=m, every commit warning-free.
> 
> v7:
>  - Flatten the depth helper as Jason suggested: floor the limit, then min
>    with the hardware maximum; callers pass their alignment cap as the
>    limit.
>  - Initialise cmdq_max_n_shift to CMDQ_MAX_SZ_SHIFT, so zero is no longer
>    the "default" sentinel; it asks for the smallest queue, one page.
>  - A kdump kernel always gets one page; cmdq_max_n_shift no longer
>    overrides it.
>  - Tags: Breno's and Jason's Reviewed-by on patch 1, Jason's Reviewed-by
>    and Yuanhe's Tested-by on patch 2.

Ah, sorry, I missed that you'd already sent a v7! As I said on v6, I don't
have a particularly strong opinion on the naming, so given that Jason is
happy with the logic, I'll just apply this now as-is.

Cheers,

Will



More information about the linux-arm-kernel mailing list