Re: [PATCH 1/2] iommu/amd: Program device table when kdump reuse fails

From: Ankit Soni

Date: Sat Oct 10 2026 - 01:29:32 EST


On Fri, Oct 02, 2026 at 02:31:42PM +0100, Matt Fleming wrote:
> From: Matt Fleming <mfleming@xxxxxxxxxxxxxx>
>
> Commit 38e5f33ee359 ("iommu/amd: Reuse device table for kdump") made
> iommu_set_device_table() return early in every kdump kernel. That is
> needed when the previous kernel's device table is reused: the base
> register already points at it, and on SNP-enabled systems the register
> is locked.
>
> But if reuse isn't possible, early_enable_iommus() falls back to the
> freshly allocated table and calls early_enable_iommu(). Because of the
> early return, that table is never written to the base register. The
> IOMMU keeps using whatever table the register pointed at before, while
> the driver writes entries into the new one.
>
> Only skip the write when the previous kernel's table was reused.
>
> Fixes: 38e5f33ee359 ("iommu/amd: Reuse device table for kdump")
> Cc: stable@xxxxxxxxxxxxxxx

Reviewed-by: Ankit Soni <Ankit.Soni@xxxxxxx>

> Signed-off-by: Matt Fleming <mfleming@xxxxxxxxxxxxxx>
> ---
> drivers/iommu/amd/init.c | 8 +++++++-
> 1 file changed, 7 insertions(+), 1 deletion(-)
>
> diff --git a/drivers/iommu/amd/init.c b/drivers/iommu/amd/init.c
> index c07c3a01b978..0572e1a674f0 100644
> --- a/drivers/iommu/amd/init.c
> +++ b/drivers/iommu/amd/init.c
> @@ -409,7 +409,13 @@ static void iommu_set_device_table(struct amd_iommu *iommu)
>
> BUG_ON(iommu->mmio_base == NULL);
>
> - if (is_kdump_kernel())
> + /*
> + * A kdump kernel that reuses the previous kernel's device table must
> + * leave the base register alone. It already points at that table, and
> + * with SNP enabled the register is locked. If reuse failed, program
> + * the freshly allocated table like a normal boot.
> + */
> + if (iommu->pci_seg->old_dev_tbl_cpy)
> return;
>
> entry = iommu_virt_to_phys(dev_table);
> --
> 2.43.0
>