aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/ide
diff options
context:
space:
mode:
authorSergei Shtylyov <sshtylyov@ru.mvista.com>2009-06-07 09:37:04 -0400
committerBartlomiej Zolnierkiewicz <bzolnier@gmail.com>2009-06-07 09:37:04 -0400
commit1221e241e3a6f1ff5b0de03d58d871f7c995781b (patch)
tree5df00175d7a279900aedec14855608d37d3ed539 /drivers/ide
parent72b9304f04d0724a25251e9e9041aa95f89c15dd (diff)
pdc202xx_old: don't call pdc202xx_reset() on IRQ timeout
The driver's dma_lost_irq() and dma_clear() methods call pdc202xx_reset() which resets both channels at once -- most probably by driving RESET- on them. Not only such reset can severely disturb concurrent operations on another channel, it is also a clear overkill (especially in the first case) and is completely unexpected and thus not properly handled by the IDE core in this context (in the second case the usual SRST reset would most probably ensue anyway though); it also causes quite arbitrary 2-second delay. Hence, use the standard ide_dma_lost_irq() method and don't install the optional dma_clear() method at all -- the driver should do well without this age-old cruft... Signed-off-by: Sergei Shtylyov <sshtylyov@ru.mvista.com> Signed-off-by: Bartlomiej Zolnierkiewicz <bzolnier@gmail.com>
Diffstat (limited to 'drivers/ide')
-rw-r--r--drivers/ide/pdc202xx_old.c9
1 files changed, 1 insertions, 8 deletions
diff --git a/drivers/ide/pdc202xx_old.c b/drivers/ide/pdc202xx_old.c
index 668f452d74e..494b5404f27 100644
--- a/drivers/ide/pdc202xx_old.c
+++ b/drivers/ide/pdc202xx_old.c
@@ -219,12 +219,6 @@ static void pdc202xx_reset(ide_drive_t *drive)
219 ide_set_max_pio(drive); 219 ide_set_max_pio(drive);
220} 220}
221 221
222static void pdc202xx_dma_lost_irq(ide_drive_t *drive)
223{
224 pdc202xx_reset(drive);
225 ide_dma_lost_irq(drive);
226}
227
228static int init_chipset_pdc202xx(struct pci_dev *dev) 222static int init_chipset_pdc202xx(struct pci_dev *dev)
229{ 223{
230 unsigned long dmabase = pci_resource_start(dev, 4); 224 unsigned long dmabase = pci_resource_start(dev, 4);
@@ -295,9 +289,8 @@ static const struct ide_dma_ops pdc2026x_dma_ops = {
295 .dma_start = pdc202xx_dma_start, 289 .dma_start = pdc202xx_dma_start,
296 .dma_end = pdc202xx_dma_end, 290 .dma_end = pdc202xx_dma_end,
297 .dma_test_irq = ide_dma_test_irq, 291 .dma_test_irq = ide_dma_test_irq,
298 .dma_lost_irq = pdc202xx_dma_lost_irq, 292 .dma_lost_irq = ide_dma_lost_irq,
299 .dma_timer_expiry = ide_dma_sff_timer_expiry, 293 .dma_timer_expiry = ide_dma_sff_timer_expiry,
300 .dma_clear = pdc202xx_reset,
301 .dma_sff_read_status = ide_dma_sff_read_status, 294 .dma_sff_read_status = ide_dma_sff_read_status,
302}; 295};
303 296