linux/drivers/ata
Thomas Reitmayr 5d0fb2e730 sata_mv: Properly initialize main irq mask
I noticed that during initialization sata_mv.c assumes that the main
interrupt mask has its default value of 0. The function
mv_platform_probe(..) initializes a shadow irq mask with 0 assuming
that's the value of the controller's register. Now
mv_set_main_irq_mask(..) only writes the controller's register if the
new value differs from the "shadowed" value. This is fatal when trying
to disable all interrupts in mv_init_host(..), i.e. the following
function call does not write anything to the main irq mask register:

  mv_set_main_irq_mask(host, ~0, 0);

The effect I see on my machine (QNAP TS-109 II) with booting via kexec
(with Linux as a 2nd-stage boot loader) is that if the sata_mv module
was still loaded when performing kexec, then the new kernel's sata_mv
module starts up with interrupts enabled. This results in an unhandled
IRQ and breaks the boot process.

The unhandled interrupt itself might also be fixed by Lennert's patch
proposed at http://markmail.org/message/kwvzxstnlsa3s26w which I did not
try yet.

However I still propose to additionally initialize the shadow variable
with the current contents of the main irq mask register to get both in
sync and allow proper disabling the main irq mask. This fixes the
unhandled irq on my machine.

Signed-off-by: Thomas Reitmayr <treitmayr@devbase.at>
Signed-off-by: Mark Lord <mlord@pobox.com>
Signed-off-by: Jeff Garzik <jgarzik@redhat.com>
2009-01-26 06:37:37 -05:00
..
ahci.c libata: Add a per-host flag to opt-in into parallel port probes 2009-01-10 15:06:52 -08:00
ata_generic.c libata: beef up iterators 2008-12-28 22:43:20 -05:00
ata_piix.c libata: Add 32bit PIO support 2009-01-08 16:34:27 -05:00
Kconfig libata: New driver for OCTEON SOC Compact Flash interface (v7). 2009-01-16 10:23:39 -05:00
libata-acpi.c Merge branch 'linus' into release 2009-01-09 03:39:43 -05:00
libata-core.c libata: Add another column to the ata_timing table. 2009-01-16 10:23:37 -05:00
libata-eh.c libata: perform port detach in EH 2008-12-28 22:43:21 -05:00
libata-pmp.c libata: beef up iterators 2008-12-28 22:43:20 -05:00
libata-scsi.c [libata] get-identity ioctl: Fix use of invalid memory pointer 2009-01-16 10:17:09 -05:00
libata-sff.c libata: set NODEV_HINT for 0x7f status 2009-01-26 06:36:26 -05:00
libata.h libata: revert convert-to-block-tagging patches 2008-11-10 08:04:47 -08: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: Add 32bit PIO support 2009-01-08 16:34:27 -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: Update RDC UDMA handling 2009-01-13 10:35:01 -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] Update kernel-doc comments to match source code 2008-12-28 22:43:21 -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 ata: Switch all my stuff to a common address 2008-10-27 23:54:50 -04: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 [libata] pata_rb532_cf: fix signature of the xfer function 2008-12-01 13:49:17 -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 ata: Switch all my stuff to a common address 2008-10-27 23:54:50 -04: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: Properly initialize main irq mask 2009-01-26 06:37:37 -05:00
sata_nv.c sata_nv: fix MCP5x reset 2009-01-26 06:36:31 -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 sata_sil: add Large Block Transfer support 2008-12-29 07:40:09 -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