Tejun Heo wrote:
Hello, Mark.
Mark Lord wrote:
- /* now properly wait for the eDMA to stop */
- for (i = 1000; i > 0; i--) {
- reg = readl(port_mmio + EDMA_CMD_OFS);
+ /* Wait for the chip to confirm eDMA is off. */
+ for (i = 10000; i > 0; i--) {
+ u32 reg = readl(port_mmio + EDMA_CMD_OFS);
if (!(reg & EDMA_EN))
- break;
-
- udelay(100);
- }
-
- if (reg & EDMA_EN) {
- ata_port_printk(ap, KERN_ERR, "Unable to stop eDMA\n");
- err = -EIO;
+ return 0;
+ udelay(10);
Unless the hardware calls for really short polling interval, I think
it's generally better to limit polling with jiffies and using msleep()
instead of delays.
..
Oh, absolutely. I was just leaving Jeff's (?) original udelay() in there
for now, to avoid another possible failure while testing the new stuff.
But if we can *guarantee* that .qc_issue and .port_stop are
always invoked only from thread context, then.. no problemo.
Also, mv_stop_edma() skips actual operation if EDMA_EN isn't set, which
I think is the correct way to do it in hot paths but I think it's better
to stop the edma engine unconditionally prior to reset as that's where
we try to bring the controller back into senses.
..
Harmless change. FITNR.
Thanks
--
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