Patchwork "irq 4: nobody cared" when loading ahci driver on ce4100

login
register
mail settings
Submitter Tejun Heo
Date March 15, 2011, 7:19 a.m.
Message ID <20110315071937.GB8635@htj.dyndns.org>
Download mbox | patch
Permalink /patch/86888/
State Not Applicable
Delegated to: David Miller
Headers show

Comments

Tejun Heo - March 15, 2011, 7:19 a.m.
Hello,

On Tue, Mar 15, 2011 at 05:20:40AM +0100, Maxime Bizon wrote:
> On Mon, 2011-03-14 at 18:59 -0600, Robert Hancock wrote:
> 
> > Where is ahci_thaw being called? It shouldn't be called before the IRQ
> > handler is registered - I think it should only be called from the
> > error 
> 
> it is not
> 
> ahci_pmp_attach/ahci_pmp_detach are the one setting the irq_mask too
> soon

Does the following patch fix the problem?  Thanks.

Patch

diff --git a/drivers/ata/libahci.c b/drivers/ata/libahci.c
index 26d4523..6a01e3d 100644
--- a/drivers/ata/libahci.c
+++ b/drivers/ata/libahci.c
@@ -1897,7 +1897,9 @@  static void ahci_pmp_attach(struct ata_port *ap)
 	ahci_enable_fbs(ap);
 
 	pp->intr_mask |= PORT_IRQ_BAD_PMP;
-	writel(pp->intr_mask, port_mmio + PORT_IRQ_MASK);
+
+	if (!(ap->pflags & ATA_PFLAG_FROZEN))
+		writel(pp->intr_mask, port_mmio + PORT_IRQ_MASK);
 }
 
 static void ahci_pmp_detach(struct ata_port *ap)
@@ -1913,7 +1915,9 @@  static void ahci_pmp_detach(struct ata_port *ap)
 	writel(cmd, port_mmio + PORT_CMD);
 
 	pp->intr_mask &= ~PORT_IRQ_BAD_PMP;
-	writel(pp->intr_mask, port_mmio + PORT_IRQ_MASK);
+
+	if (!(ap->pflags & ATA_PFLAG_FROZEN))
+		writel(pp->intr_mask, port_mmio + PORT_IRQ_MASK);
 }
 
 int ahci_port_resume(struct ata_port *ap)