linux/drivers/ata
Tejun Heo 7d47e8d4d4 libata: put some intelligence into EH speed down sequence
The current EH speed down code is more of a proof that the EH
framework is capable of adjusting transfer speed in response to error.
This patch puts some intelligence into EH speed down sequence.  The
rules are..

* If there have been more than three timeout, HSM violation or
  unclassified DEV errors for known supported commands during last 10
  mins, NCQ is turned off.

* If there have been more than three timeout or HSM violation for known
  supported command, transfer mode is slowed down.  If DMA is active,
  it is first slowered by one grade (e.g. UDMA133->100).  If that
  doesn't help, it's slowered to 40c limit (UDMA33).  If PIO is
  active, it's slowered by one grade first.  If that doesn't help,
  PIO0 is forced.  Note that this rule does not change transfer mode.
  DMA is never degraded into PIO by this rule.

* If there have been more than ten ATA bus, timeout, HSM violation or
  unclassified device errors for known supported commands && speeding
  down DMA mode didn't help, the device is forced into PIO mode.  Note
  that this rule is considered only for PATA devices and is pretty
  difficult to trigger.

One error can only trigger one rule at a time.  After a rule is
triggered, error history is cleared such that the next speed down
happens only after some number of errors are accumulated.  This makes
sense because now speed down is done in bigger stride.

Signed-off-by: Tejun Heo <htejun@gmail.com>
Signed-off-by: Jeff Garzik <jeff@garzik.org>
2007-02-21 04:58:16 -05:00
..
ahci.c [PATCH] remove many unneeded #includes of sched.h 2007-02-14 08:09:54 -08:00
ata_generic.c libata: add another IRQ calls (libata drivers) 2007-02-09 17:39:38 -05:00
ata_piix.c libata: kill ATA_ENABLE_PATA 2007-02-09 17:39:40 -05:00
Kconfig libata: PATA driver for Celleb 2007-02-21 04:58:16 -05:00
libata-acpi.c [PATCH] libata: wrong sizeof for BUFFER 2007-02-16 13:32:41 -05:00
libata-core.c libata: improve probe failure handling 2007-02-21 04:58:16 -05:00
libata-eh.c libata: put some intelligence into EH speed down sequence 2007-02-21 04:58:16 -05:00
libata-scsi.c libata: update libata core layer to use devres 2007-02-09 17:39:37 -05:00
libata-sff.c libata: add another IRQ calls (core and headers) 2007-02-09 17:39:38 -05:00
libata.h libata: improve ata_down_xfermask_limit() 2007-02-21 04:58:16 -05:00
Makefile libata: PATA driver for Celleb 2007-02-21 04:58:16 -05:00
pata_ali.c libata: add another IRQ calls (libata drivers) 2007-02-09 17:39:38 -05:00
pata_amd.c libata: add another IRQ calls (libata drivers) 2007-02-09 17:39:38 -05:00
pata_artop.c libata: add another IRQ calls (libata drivers) 2007-02-09 17:39:38 -05:00
pata_atiixp.c libata: add another IRQ calls (libata drivers) 2007-02-09 17:39:38 -05:00
pata_cmd64x.c libata: add another IRQ calls (libata drivers) 2007-02-09 17:39:38 -05:00
pata_cs5520.c libata: add another IRQ calls (libata drivers) 2007-02-09 17:39:38 -05:00
pata_cs5530.c libata: add another IRQ calls (libata drivers) 2007-02-09 17:39:38 -05:00
pata_cs5535.c libata: add another IRQ calls (libata drivers) 2007-02-09 17:39:38 -05:00
pata_cypress.c libata: add another IRQ calls (libata drivers) 2007-02-09 17:39:38 -05:00
pata_efar.c libata: add another IRQ calls (libata drivers) 2007-02-09 17:39:38 -05:00
pata_hpt3x2n.c libata: add another IRQ calls (libata drivers) 2007-02-09 17:39:38 -05:00
pata_hpt3x3.c libata: add another IRQ calls (libata drivers) 2007-02-09 17:39:38 -05:00
pata_hpt37x.c libata: add another IRQ calls (libata drivers) 2007-02-09 17:39:38 -05:00
pata_hpt366.c libata: add another IRQ calls (libata drivers) 2007-02-09 17:39:38 -05:00
pata_isapnp.c libata: add another IRQ calls (libata drivers) 2007-02-09 17:39:38 -05:00
pata_it821x.c libata: add another IRQ calls (libata drivers) 2007-02-09 17:39:38 -05:00
pata_it8213.c libata: add another IRQ calls (libata drivers) 2007-02-09 17:39:38 -05:00
pata_ixp4xx_cf.c libata: add another IRQ calls (libata drivers) 2007-02-09 17:39:38 -05:00
pata_jmicron.c libata: add another IRQ calls (libata drivers) 2007-02-09 17:39:38 -05:00
pata_legacy.c libata: Add a host flag to indicate lack of IORDY capability 2007-02-15 18:04:01 -05:00
pata_marvell.c libata: add another IRQ calls (libata drivers) 2007-02-09 17:39:38 -05:00
pata_mpc52xx.c [POWERPC] Fixup mp5200 drivers to match device tree changes 2007-02-13 15:35:53 +11:00
pata_mpiix.c [PATCH] Scheduled removal of SA_xxx interrupt flags fixups 2007-02-14 08:09:54 -08:00
pata_netcell.c libata: add another IRQ calls (libata drivers) 2007-02-09 17:39:38 -05:00
pata_ns87410.c libata: add another IRQ calls (libata drivers) 2007-02-09 17:39:38 -05:00
pata_oldpiix.c (2.6.20) pata_oldpiix: fix PIO2 underclocking 2007-02-09 17:39:39 -05:00
pata_opti.c libata: add another IRQ calls (libata drivers) 2007-02-09 17:39:38 -05:00
pata_optidma.c libata: add another IRQ calls (libata drivers) 2007-02-09 17:39:38 -05:00
pata_pcmcia.c [PATCH] Scheduled removal of SA_xxx interrupt flags fixups 2007-02-14 08:09:54 -08:00
pata_pdc202xx_old.c libata: add another IRQ calls (libata drivers) 2007-02-09 17:39:38 -05:00
pata_pdc2027x.c [PATCH] Scheduled removal of SA_xxx interrupt flags fixups 2007-02-14 08:09:54 -08:00
pata_platform.c libata: add another IRQ calls (libata drivers) 2007-02-09 17:39:38 -05:00
pata_qdi.c libata: Add a host flag to indicate lack of IORDY capability 2007-02-15 18:04:01 -05:00
pata_radisys.c libata: add another IRQ calls (libata drivers) 2007-02-09 17:39:38 -05:00
pata_rz1000.c libata: add another IRQ calls (libata drivers) 2007-02-09 17:39:38 -05:00
pata_sc1200.c libata: add another IRQ calls (libata drivers) 2007-02-09 17:39:38 -05:00
pata_scc.c libata: PATA driver for Celleb 2007-02-21 04:58:16 -05:00
pata_serverworks.c libata: add another IRQ calls (libata drivers) 2007-02-09 17:39:38 -05:00
pata_sil680.c libata: add another IRQ calls (libata drivers) 2007-02-09 17:39:38 -05:00
pata_sis.c libata: add another IRQ calls (libata drivers) 2007-02-09 17:39:38 -05:00
pata_sl82c105.c add delay around sl82c105_reset_engine calls 2007-02-15 18:04:53 -05:00
pata_triflex.c libata: add another IRQ calls (libata drivers) 2007-02-09 17:39:38 -05:00
pata_via.c libata: add another IRQ calls (libata drivers) 2007-02-09 17:39:38 -05:00
pata_winbond.c libata: add another IRQ calls (libata drivers) 2007-02-09 17:39:38 -05:00
pdc_adma.c [PATCH] remove many unneeded #includes of sched.h 2007-02-14 08:09:54 -08:00
sata_inic162x.c [PATCH] scheduled removal of SA_XXX interrupt flags: ata fix 2007-02-14 08:09:55 -08:00
sata_mv.c [PATCH] remove many unneeded #includes of sched.h 2007-02-14 08:09:54 -08:00
sata_nv.c sata_nv: handle SError status indication 2007-02-15 18:05:32 -05:00
sata_promise.c sata_promise: new EH conversion for 20619 chips, take 2 2007-02-15 18:04:00 -05:00
sata_promise.h Move libata to drivers/ata. 2006-08-10 07:31:37 -04:00
sata_qstor.c [PATCH] remove many unneeded #includes of sched.h 2007-02-14 08:09:54 -08:00
sata_sil24.c libata: add another IRQ calls (libata drivers) 2007-02-09 17:39:38 -05:00
sata_sil.c libata: add another IRQ calls (libata drivers) 2007-02-09 17:39:38 -05:00
sata_sis.c libata: add another IRQ calls (libata drivers) 2007-02-09 17:39:38 -05:00
sata_svw.c libata: add another IRQ calls (libata drivers) 2007-02-09 17:39:38 -05:00
sata_sx4.c [PATCH] remove many unneeded #includes of sched.h 2007-02-14 08:09:54 -08:00
sata_uli.c libata: add another IRQ calls (libata drivers) 2007-02-09 17:39:38 -05:00
sata_via.c libata: add another IRQ calls (libata drivers) 2007-02-09 17:39:38 -05:00
sata_vsc.c sata_vsc: use default cache line size if non-zero 2007-02-15 18:13:46 -05:00