linux/drivers/ata
Tejun Heo d6515e6ff4 libata: make sure port is thawed when skipping resets
When SCR access is available and the link is offline, softreset is
skipped as it only wastes time and some controllers don't respond very
well.  However, the skip path forgot to thaw the port, which not only
blocks further event notification from the port but also causes
repeated EH invocations on the same event on drivers which rely on
->thaw() to clear events if the IRQ is shared with another device or
port.

This problem has always been there but is uncovered by recent sata_nv
nf2/3 change which dropped hardreset support while maintaining SCR
access.  nf2/3 doesn't clear hotplug event mask from the interrupt
handler but relies on ->thaw() to clear them.  When the hardreset was
there, the reset action was never skipped and the port was always
thawed but, with the hardreset gone, ->prereset() determines that
there's no need for softreset and both ->softreset() and ->thaw() are
skipped.  This leads to stuck hotplug event in the IRQ status register
triggering hotplug event whenever IRQ is delieverd on the same IRQ.
As the controller shares the same IRQ for both ports, this happens on
every IO if one port is occpupied and the other isn't.

This patch fixes the problem by making sure that the port is thawed on
reset-skip path.

bko#11615 reports this problem.

Signed-off-by: Tejun Heo <tj@kernel.org>
Cc: Robert Hancock <hancockrwd@gmail.com>
Reported-by: Dan Andresan <danyer@gmail.com>
Reported-by: Arne Woerner <arne_woerner@yahoo.com>
Reported-by: Stefan Lippers-Hollmann <s.L-H@gmx.de>
Signed-off-by: Jeff Garzik <jgarzik@redhat.com>
2009-03-05 07:25:43 -05:00
..
ahci.c ahci: Add the Device IDs for MCP89 and remove IDs of MCP7B to/from ahci.c 2009-03-05 07:25:30 -05:00
ata_generic.c libata: beef up iterators 2008-12-28 22:43:20 -05:00
ata_piix.c SATA PIIX: Blacklist system that spins off disks during ACPI power off 2009-01-27 02:15:53 -05:00
Kconfig sata_mv: no longer experimental (v2) 2009-01-26 06:42:10 -05:00
libata-acpi.c Merge branch 'linus' into release 2009-01-09 03:39:43 -05:00
libata-core.c libata: fix dma_unmap_sg misuse 2009-03-05 07:24:57 -05:00
libata-eh.c libata: make sure port is thawed when skipping resets 2009-03-05 07:25:43 -05:00
libata-pmp.c libata: add @spd_limit to sata_down_spd_limit() 2009-02-02 23:03:22 -05:00
libata-scsi.c libata: fix kernel-doc warnings 2009-02-02 22:41:45 -05:00
libata-sff.c libata-sff: fix 32-bit PIO ATAPI regression 2009-02-16 18:55:56 -05:00
libata.h libata: add @spd_limit to sata_down_spd_limit() 2009-02-02 23:03:22 -05:00
Makefile libata: New driver for OCTEON SOC Compact Flash interface (v7). 2009-01-16 10:23:39 -05:00
pata_acpi.c ACPI: remove private acpica headers from driver files 2008-12-31 01:15:22 -05:00
pata_ali.c drivers/ata/pata_ali.c: s/isa_bridge/ali_isa_bridge/ to fix alpha build 2009-01-16 10:23:43 -05:00
pata_amd.c [libata] pata_amd: program FIFO 2009-02-25 15:30:16 -05:00
pata_artop.c ata: Switch all my stuff to a common address 2008-10-27 23:54:50 -04:00
pata_at32.c avr32: Use <mach/foo.h> instead of <asm/arch/foo.h> 2008-08-05 14:36:57 +02:00
pata_atiixp.c pata_atiixp: update port enabledness test handling 2009-01-16 10:20:27 -05:00
pata_bf54x.c [libata] Update kernel-doc comments to match source code 2008-12-28 22:43:21 -05:00
pata_cmd64x.c ata: Switch all my stuff to a common address 2008-10-27 23:54:50 -04:00
pata_cmd640.c ata: Switch all my stuff to a common address 2008-10-27 23:54:50 -04:00
pata_cs5520.c libata: rename SFF functions 2008-04-17 15:44:21 -04:00
pata_cs5530.c ata: Switch all my stuff to a common address 2008-10-27 23:54:50 -04:00
pata_cs5535.c [libata] pata_cs553*.c: cleanup kernel-doc 2008-11-11 02:58:30 -05:00
pata_cs5536.c [libata] pata_cs553*.c: cleanup kernel-doc 2008-11-11 02:58:30 -05:00
pata_cypress.c ata: Switch all my stuff to a common address 2008-10-27 23:54:50 -04:00
pata_efar.c ata: Switch all my stuff to a common address 2008-10-27 23:54:50 -04:00
pata_hpt3x2n.c libata: rename SFF functions 2008-04-17 15:44:21 -04:00
pata_hpt3x3.c [libata] pata_hpt3x3: correct _freeze() function declaration 2009-01-08 16:28:21 -05:00
pata_hpt37x.c libata: rename SFF functions 2008-04-17 15:44:21 -04:00
pata_hpt366.c pata_hpt366: reimplement mode programming 2009-01-08 16:29:20 -05:00
pata_icside.c libata-sff: Fix oops reported in kerneloops.org for pnp devices with no ctl 2008-06-04 06:40:41 -04:00
pata_isapnp.c ata: Switch all my stuff to a common address 2008-10-27 23:54:50 -04:00
pata_it821x.c pata_it821x: resume from hibernation fails with RAID volume 2009-02-25 15:22:44 -05:00
pata_it8213.c libata: rename SFF functions 2008-04-17 15:44:21 -04:00
pata_ixp4xx_cf.c libata: beef up iterators 2008-12-28 22:43:20 -05:00
pata_jmicron.c ata: Switch all my stuff to a common address 2008-10-27 23:54:50 -04:00
pata_legacy.c [libata] pata_legacy: for VLB 32bit PIO don't try tricks with slop 2009-02-25 15:30:23 -05:00
pata_marvell.c ata: Switch all my stuff to a common address 2008-10-27 23:54:50 -04:00
pata_mpc52xx.c powerpc/mpc5200: Add MDMA/UDMA support to MPC5200 ATA driver 2008-12-21 02:54:29 -07:00
pata_mpiix.c libata: Add 32bit PIO support 2009-01-08 16:34:27 -05:00
pata_netcell.c ata: Switch all my stuff to a common address 2008-10-27 23:54:50 -04:00
pata_ninja32.c pata_ninja32: update ID table 2008-12-09 00:44:19 -05:00
pata_ns87410.c ata: Switch all my stuff to a common address 2008-10-27 23:54:50 -04:00
pata_ns87415.c ata: Switch all my stuff to a common address 2008-10-27 23:54:50 -04:00
pata_octeon_cf.c libata: New driver for OCTEON SOC Compact Flash interface (v7). 2009-01-16 10:23:39 -05:00
pata_of_platform.c powerpc: Fix no interrupt handling in pata_of_platform 2008-10-10 15:55:17 +11:00
pata_oldpiix.c [libata] Update kernel-doc comments to match source code 2008-12-28 22:43:21 -05:00
pata_opti.c ata: Switch all my stuff to a common address 2008-10-27 23:54:50 -04:00
pata_optidma.c ata: Switch all my stuff to a common address 2008-10-27 23:54:50 -04:00
pata_pcmcia.c [libata] pata_pcmcia: another memory card support 2008-11-11 02:59:13 -05:00
pata_pdc202xx_old.c ata: Switch all my stuff to a common address 2008-10-27 23:54:50 -04:00
pata_pdc2027x.c [libata] Update kernel-doc comments to match source code 2008-12-28 22:43:21 -05:00
pata_platform.c pata_platform: __pata_platform_remove() shouldn't be in discard section 2009-01-08 16:10:29 -05:00
pata_qdi.c Fix my email address in qd65xx.[ch]/pata_qdi.c 2009-02-03 16:53:56 -08:00
pata_radisys.c [libata] Update kernel-doc comments to match source code 2008-12-28 22:43:21 -05:00
pata_rb532_cf.c pata-rb532-cf: remove set_irq_type from finish_io 2009-01-27 02:13:03 -05:00
pata_rz1000.c libata: beef up iterators 2008-12-28 22:43:20 -05:00
pata_sc1200.c ata: Switch all my stuff to a common address 2008-10-27 23:54:50 -04:00
pata_scc.c [libata] Update kernel-doc comments to match source code 2008-12-28 22:43:21 -05:00
pata_sch.c [libata] pata_sch: notice attached slave devices 2008-11-11 02:58:59 -05:00
pata_serverworks.c [libata] Update kernel-doc comments to match source code 2008-12-28 22:43:21 -05:00
pata_sil680.c libata: Add 32bit PIO support 2009-01-08 16:34:27 -05:00
pata_sis.c [libata] Update kernel-doc comments to match source code 2008-12-28 22:43:21 -05:00
pata_sl82c105.c ata: Switch all my stuff to a common address 2008-10-27 23:54:50 -04:00
pata_triflex.c ata: Switch all my stuff to a common address 2008-10-27 23:54:50 -04:00
pata_via.c Add support for VT6415 PCIE PATA IDE Host Controller 2009-02-17 16:56:31 -08:00
pata_winbond.c ata: Switch all my stuff to a common address 2008-10-27 23:54:50 -04:00
pdc_adma.c libata: rename SFF functions 2008-04-17 15:44:21 -04:00
sata_fsl.c sata_fsl: Return non-zero on error in probe() 2009-01-16 10:23:58 -05:00
sata_inic162x.c libata: make SCR access ops per-link 2008-09-29 00:22:28 -04:00
sata_mv.c sata_mv: fix SoC interrupt breakage 2009-02-25 15:25:35 -05:00
sata_nv.c sata_nv: fix module parameter description 2009-03-05 07:25:37 -05:00
sata_promise.c sata_promise: add ATA engine reset to reset ops 2008-11-04 01:08:03 -05:00
sata_promise.h libata annotations and fixes 2008-01-23 05:24:15 -05:00
sata_qstor.c libata: make SCR access ops per-link 2008-09-29 00:22:28 -04:00
sata_sil24.c sata_sil24: remove unused sil24_port_multiplier 2009-01-08 16:09:59 -05:00
sata_sil.c [libata] sata_sil: Fix compilation error with libata debugging enabled 2009-02-02 22:38:29 -05:00
sata_sis.c libata: make SCR access ops per-link 2008-09-29 00:22:28 -04:00
sata_svw.c libata: make SCR access ops per-link 2008-09-29 00:22:28 -04:00
sata_sx4.c libata: add qc_fill_rtf port operation 2008-04-17 15:44:23 -04:00
sata_uli.c libata: make SCR access ops per-link 2008-09-29 00:22:28 -04:00
sata_via.c sata_via: Add VT8261 support 2009-01-16 10:23:22 -05:00
sata_vsc.c libata: make SCR access ops per-link 2008-09-29 00:22:28 -04:00
sis.h libata: PATA-mode fixes for sis_sata 2007-07-02 10:17:42 -04:00