From: sashiko-bot@kernel.org
To: "Pranjal Shrivastava" <praan@google.com>
Cc: linux-pci@vger.kernel.org
Subject: Re: [PATCH 3/6] iommu/amd: Split probe error paths to preserve IRQ remapping
Date: Mon, 01 Jun 2026 14:30:44 +0000 [thread overview]
Message-ID: <20260601143045.1CE501F00893@smtp.kernel.org> (raw)
In-Reply-To: <20260601134204.2150602-4-praan@google.com>
Thank you for your contribution! Sashiko AI review found 3 potential issue(s) to consider:
New issues:
- [High] `iommu_ignore_device()` suffers from dead code and incorrect reordering, resulting in broken alias clearance, log spam, and unsafe non-atomic DTE clearing (torn writes).
- [Low] The commit silently fixes a build failure by adding a missing `dev_data` variable declaration that was used in the previous commit, breaking git bisect.
Pre-existing issues:
- [High] Skipping configuration on `PD_MODE_NONE` leaves `dev_data->max_irqs` uninitialized (0), completely breaking IRQ remapping.
--
commit b695f2fee16ac1c72b6f21b22dedf39b5ec55656
Author: Pranjal Shrivastava <praan@google.com>
iommu/amd: Split probe error paths to preserve IRQ remapping
This commit splits the error paths in amd_iommu_probe_device() to ensure
proper initialization failures clear the device, while configuration failures
like PD_MODE_NONE preserve the rlookup_table entry for IRQ remapping.
Reported-by: sashiko-bot@kernel.org
Closes: https://lore.kernel.org/all/20260529153216.2AD1E1F00899@smtp.kernel.org/
Suggested-by: Ankit Soni <ankit.soni@amd.com>
> diff --git a/drivers/iommu/amd/iommu.c b/drivers/iommu/amd/iommu.c
> index 9b5861e241d71..c3b3750d4a22d 100644
> --- a/drivers/iommu/amd/iommu.c
> +++ b/drivers/iommu/amd/iommu.c
> @@ -737,6 +737,7 @@ static int iommu_init_device(struct amd_iommu *iommu, struct device *dev)
> static void iommu_ignore_device(struct amd_iommu *iommu, struct device *dev)
> {
> struct amd_iommu_pci_seg *pci_seg = iommu->pci_seg;
> + struct iommu_dev_data *dev_data = dev_iommu_priv_get(dev);
[Severity: Low]
Does this silently fix a build failure from a previous commit?
It appears the preceding commit in this series introduced the use of dev_data
in iommu_ignore_device() but failed to declare it. Adding the declaration here
fixes the build, but breaks bisectability between the two commits.
Could this fix be squashed into the commit that introduced the bug to ensure
the series remains fully bisectable?
[Severity: High]
Is dev_data always NULL when iommu_ignore_device() is called here?
Since iommu_ignore_device() is exclusively invoked from the error path of
amd_iommu_probe_device() when iommu_init_device() fails, dev_data will be
NULL because iommu_init_device() fails before dev_iommu_priv_set() is called.
If dev_data is NULL, the atomic DTE clearing block in this function becomes
dead code, and it falls back to the unsafe memset(), which risks torn writes
on live hardware:
drivers/iommu/amd/iommu.c:iommu_ignore_device() {
...
if (dev_data) {
struct dev_table_entry new = {};
amd_iommu_make_clear_dte(dev_data, &new);
update_dte256(iommu, dev_data, &new);
} else {
memset(&dev_table[devid], 0, sizeof(struct dev_table_entry));
}
...
}
Additionally, because setup_aliases() is unconditionally called before this,
its internal clone_alias() will abort on the NULL dev_data and generate pr_err
log spam without actually clearing the alias DTEs.
[ ... ]
> @@ -2512,6 +2512,10 @@ static struct iommu_device *amd_iommu_probe_device(struct device *dev)
> if (dev_is_pci(dev))
> pci_prepare_ats(to_pci_dev(dev), PAGE_SHIFT);
>
> + return iommu_dev;
> +
> +err_deinit:
> + iommu_ignore_device(iommu, dev);
> out_err:
[Severity: High]
This is a pre-existing issue, but does skipping the device configuration
leave max_irqs uninitialized?
The commit message notes that configuration failures like PD_MODE_NONE
skip iommu_ignore_device() to preserve the rlookup_table entry for IRQ
remapping.
However, because amd_iommu_probe_device() jumps directly to out_err on
PD_MODE_NONE, it bypasses the initialization of dev_data->max_irqs, leaving
it at 0.
Later, when alloc_irq_index() tries to allocate an IRQ, it relies on max_irqs:
drivers/iommu/amd/iommu.c:alloc_irq_index() {
...
for (index = ALIGN(table->min_index, alignment), c = 0;
index < max_irqs;) {
...
}
Since max_irqs is 0, the loop is skipped and it returns -ENOSPC, which
completely breaks IRQ allocation for the device, defeating the purpose
of preserving the rlookup entry.
> return iommu_dev;
> }
--
Sashiko AI review · https://sashiko.dev/#/patchset/20260601134204.2150602-1-praan@google.com?part=3
next prev parent reply other threads:[~2026-06-01 14:30 UTC|newest]
Thread overview: 20+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-06-01 13:41 [PATCH 0/6] iommu/amd: Refactors for ATS updates Pranjal Shrivastava
2026-06-01 13:41 ` [PATCH 1/6] iommu/amd: Clear aliases before setting the rlookup_table to NULL Pranjal Shrivastava
2026-06-01 13:57 ` sashiko-bot
2026-06-01 13:42 ` [PATCH 2/6] iommu/amd: Clear DTE with update_dte256 in iommu_ignore_device() Pranjal Shrivastava
2026-06-01 14:09 ` sashiko-bot
2026-06-01 14:19 ` Jason Gunthorpe
2026-06-02 4:01 ` Pranjal Shrivastava
2026-06-02 8:55 ` Vasant Hegde
2026-06-01 13:42 ` [PATCH 3/6] iommu/amd: Split probe error paths to preserve IRQ remapping Pranjal Shrivastava
2026-06-01 14:30 ` sashiko-bot [this message]
2026-06-01 13:42 ` [PATCH 4/6] iommu/amd: Fix Use-After-Free in non-fatal probe error path Pranjal Shrivastava
2026-06-01 14:44 ` sashiko-bot
2026-06-01 13:42 ` [PATCH 5/6] iommu/amd: Fail probe on ATS configuration failure Pranjal Shrivastava
2026-06-01 15:01 ` sashiko-bot
2026-06-01 15:05 ` Pranjal Shrivastava
2026-06-01 13:42 ` [PATCH 6/6] PCI/ATS: Mandate checking pci_ats_supported() before pci_prepare_ats() Pranjal Shrivastava
2026-06-01 19:06 ` sashiko-bot
2026-06-02 8:49 ` [PATCH 0/6] iommu/amd: Refactors for ATS updates Vasant Hegde
2026-06-02 12:08 ` Jason Gunthorpe
2026-06-04 8:23 ` Vasant Hegde
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=20260601143045.1CE501F00893@smtp.kernel.org \
--to=sashiko-bot@kernel.org \
--cc=linux-pci@vger.kernel.org \
--cc=praan@google.com \
--cc=sashiko-reviews@lists.linux.dev \
/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