From: Rosen Penev <rosenp@gmail.com>
To: linux-ide@vger.kernel.org
Cc: Damien Le Moal <dlemoal@kernel.org>,
Niklas Cassel <cassel@kernel.org>,
linux-kernel@vger.kernel.org (open list)
Subject: [PATCHv2 6/8] ata: sata_dwc_460ex: disable SATA interrupts on device removal
Date: Wed, 1 Jul 2026 17:03:48 -0700 [thread overview]
Message-ID: <20260702000350.68331-7-rosenp@gmail.com> (raw)
In-Reply-To: <20260702000350.68331-1-rosenp@gmail.com>
sata_dwc_remove() fails to mask the controller's INTMR and ERRMR
registers before tearing down the host. If the hardware asserts an
interrupt during teardown (after ata_host_detach() but before the
IRQ handler is unregistered by devres), this can trigger an unhandled
interrupt storm and potentially lock up the system.
Add sata_dwc_disable_interrupts() and call it at the beginning of
sata_dwc_remove(), before ata_host_detach().
Assisted-by: opencode:big-pickle
Signed-off-by: Rosen Penev <rosenp@gmail.com>
---
drivers/ata/sata_dwc_460ex.c | 8 ++++++++
1 file changed, 8 insertions(+)
diff --git a/drivers/ata/sata_dwc_460ex.c b/drivers/ata/sata_dwc_460ex.c
index 4c54c3ecd18e..f26220cac130 100644
--- a/drivers/ata/sata_dwc_460ex.c
+++ b/drivers/ata/sata_dwc_460ex.c
@@ -759,6 +759,12 @@ static int sata_dwc_qc_complete(struct ata_port *ap, struct ata_queued_cmd *qc)
return 0;
}
+static void sata_dwc_disable_interrupts(struct sata_dwc_device *hsdev)
+{
+ sata_dwc_writel(&hsdev->sata_dwc_regs->intmr, 0);
+ sata_dwc_writel(&hsdev->sata_dwc_regs->errmr, 0);
+}
+
static void sata_dwc_enable_interrupts(struct sata_dwc_device *hsdev)
{
/* Enable selective interrupts by setting the interrupt maskregister*/
@@ -1210,6 +1216,8 @@ static void sata_dwc_remove(struct platform_device *ofdev)
struct ata_host *host = dev_get_drvdata(dev);
struct sata_dwc_device *hsdev = host->private_data;
+ sata_dwc_disable_interrupts(hsdev);
+
ata_host_detach(host);
phy_exit(hsdev->phy);
--
2.55.0
next prev parent reply other threads:[~2026-07-02 0:04 UTC|newest]
Thread overview: 14+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-07-02 0:03 [PATCHv2 0/8] ata: sata_dwc_460ex: cleanups and interrupt ordering fix Rosen Penev
2026-07-02 0:03 ` [PATCHv2 1/8] ata: sata_dwc_460ex: use device_property_present() Rosen Penev
2026-07-02 0:03 ` [PATCHv2 2/8] ata: sata_dwc_460ex: use platform_get_irq() Rosen Penev
2026-07-02 0:03 ` [PATCHv2 3/8] ata: sata_dwc_460ex: enable SATA interrupts only after IRQ handler is registered Rosen Penev
2026-07-02 0:03 ` [PATCHv2 4/8] ata: sata_dwc_460ex: drop redundant struct copy of port_info Rosen Penev
2026-07-02 0:13 ` sashiko-bot
2026-07-02 0:27 ` Rosen Penev
2026-07-02 0:03 ` [PATCHv2 5/8] ata: sata_dwc_460ex: fix data race on hsdev->sactive_issued in interrupt handler Rosen Penev
2026-07-02 0:16 ` sashiko-bot
2026-07-02 0:03 ` Rosen Penev [this message]
2026-07-02 0:18 ` [PATCHv2 6/8] ata: sata_dwc_460ex: disable SATA interrupts on device removal sashiko-bot
2026-07-02 0:03 ` [PATCHv2 7/8] ata: sata_dwc_460ex: fix PHY lifecycle ordering " Rosen Penev
2026-07-02 0:03 ` [PATCHv2 8/8] ata: sata_dwc_460ex: use devm for old DMA resource lifetime management Rosen Penev
2026-07-02 2:02 ` [PATCHv2 0/8] ata: sata_dwc_460ex: cleanups and interrupt ordering fix Damien Le Moal
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=20260702000350.68331-7-rosenp@gmail.com \
--to=rosenp@gmail.com \
--cc=cassel@kernel.org \
--cc=dlemoal@kernel.org \
--cc=linux-ide@vger.kernel.org \
--cc=linux-kernel@vger.kernel.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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.