Re: Re[PATCH v1] iommu: Skip mapping at address 0x0 if it already exists

From: Antheas Kapenekakis

Date: Sun Apr 05 2026 - 13:19:42 EST


On Sun, 5 Apr 2026 at 17:02, Elisabetta Bruno <artisticdesign@xxxxxxxxx> wrote:
>
> On Sun, 22 Feb 2026 00:50:50 +0100 Antheas Kapenekakis <lkml@xxxxxxxxxxx> wrote:
> > Commit 789a5913b29c ("iommu/amd: Use the generic iommu page table")
> > introduces the shared iommu page table for AMD IOMMU. Some bioses
> > contain an identity mapping for address 0x0, which is not parsed
> > properly (e.g., certain Strix Halo devices). This causes the DMA
> > components of the device to fail to initialize (e.g., the NVMe SSD
> > controller), leading to a failed post.
> >
> > The failure is caused by iommu_create_device_direct_mappings(), which
> > is the new mapping implementation. In it, address aliasing is handled
> > via the following check:
> >
> > ```
> > phys_addr = iommu_iova_to_phys(domain, addr);
> > if (!phys_addr) {
> > map_size += pg_size;
> > continue;
> > }
> > ````
> >
> > Obviously, the iommu_iova_to_phys() signature is faulty and aliases
> > unmapped and 0 together, causing the allocation code to try to
> > re-allocate the 0 address per device. However, it has too many
> > instantiations to fix. Therefore, catch ret == -EADDRINUSE only when
> > addr == 0 and, instead of bailing, skip the mapping and print a warning.
> >
> > Closes: https://www.reddit.com/r/cachyos/comments/1r5sgr6/freeze_on_boot_after_kernel_update_to_619_fixed/
> > Fixes: 789a5913b29c ("iommu/amd: Use the generic iommu page table")
> > Signed-off-by: Antheas Kapenekakis <lkml@xxxxxxxxxxx>
>
> Hi all,
>
> As I am seeing this still marked as pending fix, hopefully some real
> world testing might help.
>
> I can confirm this patch successfully resolves the IO_PAGE_FAULT boot
> regression. Without this fix, my system requires the iommu=pt
> parameter to successfully boot.
>
> I have verified the downstream patch used by Fedora in kernel 6.19.8
> and up is stable and working as intended on the following setup:
>
> * CPU: AMD Ryzen 7 9800X3D
> * Motherboard: B650M DS3H
> * GPU: AMD Radeon RX 9070
> * OS: Fedora Kinoite (Bluewhale custom OCI)
> * Environment: Secure Boot Enabled
>
> Tested-by: Elisabetta Bruno <artisticdesign@xxxxxxxxx>

Hi Elisabetta,
this patch took a bit longer to merge than usual but it did.

I received emails from Greg and Sasha about it being backported to
6.19 on March 23rd, so they should be in the current 6.19 release, if
not the next one

Unfortunately, this also means I cannot honor your Tested-by tag.

Best,
Antheas

> > ---
> > drivers/iommu/iommu.c | 5 +++++
> > 1 file changed, 5 insertions(+)
> >
> > diff --git a/drivers/iommu/iommu.c b/drivers/iommu/iommu.c
> > index 4926a43118e6..d424b7124311 100644
> > --- a/drivers/iommu/iommu.c
> > +++ b/drivers/iommu/iommu.c
> > @@ -1224,6 +1224,11 @@ static int iommu_create_device_direct_mappings(struct iommu_domain *domain,
> > ret = iommu_map(domain, addr - map_size,
> > addr - map_size, map_size,
> > entry->prot, GFP_KERNEL);
> > + if (ret == -EADDRINUSE && addr - map_size == 0) {
> > + dev_warn_once(dev,
> > + "iommu: identity mapping at addr 0x0 already exists, skipping\n");
> > + ret = 0;
> > + }
> > if (ret)
> > goto out;
> > map_size = 0;
> >
> > base-commit: 57d76ceccee4b497eb835831206b50e72915a501
> > --
> > 2.52.0
>