On Sat, 07 Jul 2007 15:02:49 +0800, Albert Lee wrote: > After checking the current implementations of freeze()/thaw(), it seems only pdc_freeze() >does more than simple irq masking. Remove the DMA stop code from pdc_freeze(). > >Signed-off-by: Albert Lee <albertcc@xxxxxxxxxx> >--- > >diff -Nrup 01_remove_leftover_irqon/drivers/ata/sata_promise.c 02_sata_pdc_freeze/drivers/ata/sata_promise.c >--- 01_remove_leftover_irqon/drivers/ata/sata_promise.c 2007-07-07 09:58:55.000000000 +0800 >+++ 02_sata_pdc_freeze/drivers/ata/sata_promise.c 2007-07-07 10:39:22.000000000 +0800 >@@ -578,7 +578,6 @@ static void pdc_freeze(struct ata_port * > > tmp = readl(mmio + PDC_CTLSTAT); > tmp |= PDC_IRQ_DISABLE; >- tmp &= ~PDC_DMA_ENABLE; > writel(tmp, mmio + PDC_CTLSTAT); > readl(mmio + PDC_CTLSTAT); /* flush */ > } pdc_freeze() halts in-flight DMAs because that's what libata specifices. E.g., Documentation/DocBook/libata.tmpl writes: >void (*freeze) (struct ata_port *ap); >void (*thaw) (struct ata_port *ap); > </programlisting> > > <para> >ata_port_freeze() is called when HSM violations or some other >condition disrupts normal operation of the port. A frozen port >is not allowed to perform any operation until the port is >thawed, which usually follows a successful reset. > </para> > > <para> >The optional ->freeze() callback can be used for freezing the port >hardware-wise (e.g. mask interrupt and stop DMA engine). If a >port cannot be frozen hardware-wise, the interrupt handler >must ack and clear interrupts unconditionally while the port >is frozen. > </para> > <para> >The optional ->thaw() callback is called to perform the opposite of ->freeze(): >prepare the port for normal operation once again. Unmask interrupts, >start DMA engine, etc. Similar wording exists in libata-eh.c above __ata_port_freeze(). Albert's patch is OK as far as sata_promise is concerned, but I want to see an update of libata.tmpl and libata-eh.c to indicate the new, weakened, specification of freeze/thaw before I ACK this patch. /Mikael - To unsubscribe from this list: send the line "unsubscribe linux-ide" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html