original_kernel/drivers/ata
Ard Biesheuvel d312fefea8 ahci: don't ignore result code of ahci_reset_controller()
ahci_pci_reset_controller() calls ahci_reset_controller(), which may
fail, but ignores the result code and always returns success. This
may result in failures like below

  ahci 0000:02:00.0: version 3.0
  ahci 0000:02:00.0: enabling device (0000 -> 0003)
  ahci 0000:02:00.0: SSS flag set, parallel bus scan disabled
  ahci 0000:02:00.0: controller reset failed (0xffffffff)
  ahci 0000:02:00.0: failed to stop engine (-5)
    ... repeated many times ...
  ahci 0000:02:00.0: failed to stop engine (-5)
  Unable to handle kernel paging request at virtual address ffff0000093f9018
    ...
  PC is at ahci_stop_engine+0x5c/0xd8 [libahci]
  LR is at ahci_deinit_port.constprop.12+0x1c/0xc0 [libahci]
    ...
  [<ffff000000a17014>] ahci_stop_engine+0x5c/0xd8 [libahci]
  [<ffff000000a196b4>] ahci_deinit_port.constprop.12+0x1c/0xc0 [libahci]
  [<ffff000000a197d8>] ahci_init_controller+0x80/0x168 [libahci]
  [<ffff000000a260f8>] ahci_pci_init_controller+0x60/0x68 [ahci]
  [<ffff000000a26f94>] ahci_init_one+0x75c/0xd88 [ahci]
  [<ffff000008430324>] local_pci_probe+0x3c/0xb8
  [<ffff000008431728>] pci_device_probe+0x138/0x170
  [<ffff000008585e54>] driver_probe_device+0x2dc/0x458
  [<ffff0000085860e4>] __driver_attach+0x114/0x118
  [<ffff000008583ca8>] bus_for_each_dev+0x60/0xa0
  [<ffff000008585638>] driver_attach+0x20/0x28
  [<ffff0000085850b0>] bus_add_driver+0x1f0/0x2a8
  [<ffff000008586ae0>] driver_register+0x60/0xf8
  [<ffff00000842f9b4>] __pci_register_driver+0x3c/0x48
  [<ffff000000a3001c>] ahci_pci_driver_init+0x1c/0x1000 [ahci]
  [<ffff000008083918>] do_one_initcall+0x38/0x120

where an obvious hardware level failure results in an unnecessary 15 second
delay and a subsequent crash.

So record the result code of ahci_reset_controller() and relay it, rather
than ignoring it.

Signed-off-by: Ard Biesheuvel <ard.biesheuvel@linaro.org>
Signed-off-by: Tejun Heo <tj@kernel.org>
2017-10-02 12:21:30 -07:00
..
Kconfig Merge branch 'for-4.14' of git://git.kernel.org/pub/scm/linux/kernel/git/tj/libata 2017-09-06 22:41:21 -07:00
Makefile ata: mediatek: add support for MediaTek SATA controller 2017-08-28 10:54:42 -07:00
acard-ahci.c
ahci.c ahci: don't ignore result code of ahci_reset_controller() 2017-10-02 12:21:30 -07:00
ahci.h
ahci_brcm.c
ahci_ceva.c
ahci_da850.c sata: ahci-da850: Fix some error handling paths in 'ahci_da850_probe()' 2017-08-16 07:38:27 -07:00
ahci_dm816.c
ahci_imx.c
ahci_mtk.c ata: mediatek: add support for MediaTek SATA controller 2017-08-28 10:54:42 -07:00
ahci_mvebu.c
ahci_octeon.c
ahci_platform.c ata: ahci_platform: Add shutdown handler 2017-08-04 13:34:14 -07:00
ahci_qoriq.c
ahci_seattle.c
ahci_st.c
ahci_sunxi.c
ahci_tegra.c
ahci_xgene.c
ata_generic.c
ata_piix.c ata_piix: Add Fujitsu-Siemens Lifebook S6120 to short cable IDs 2017-09-18 20:32:02 -07:00
libahci.c
libahci_platform.c ata: ahci_platform: Add shutdown handler 2017-08-04 13:34:14 -07:00
libata-acpi.c
libata-core.c ata: avoid gcc-7 warning in ata_timing_quantize 2017-09-07 13:33:00 -07:00
libata-eh.c Merge branch 'for-mingo' of git://git.kernel.org/pub/scm/linux/kernel/git/paulmck/linux-rcu into core/rcu 2017-08-21 09:45:19 +02:00
libata-pmp.c
libata-scsi.c libata: array underflow in ata_find_dev() 2017-07-19 10:31:51 -04:00
libata-sff.c
libata-trace.c
libata-transport.c
libata-transport.h
libata-zpodd.c libata: zpodd: make arrays cdb static, reduces object code size 2017-09-06 07:40:28 -07:00
libata.h
pata_acpi.c
pata_ali.c
pata_amd.c cs5536: add support for IDE controller variant 2017-08-11 10:35:07 -07:00
pata_arasan_cf.c
pata_artop.c
pata_at32.c
pata_atiixp.c
pata_atp867x.c
pata_bf54x.c
pata_bk3710.c
pata_cmd64x.c
pata_cmd640.c
pata_cs5520.c
pata_cs5530.c
pata_cs5535.c
pata_cs5536.c cs5536: add support for IDE controller variant 2017-08-11 10:35:07 -07:00
pata_cypress.c
pata_efar.c
pata_ep93xx.c
pata_falcon.c
pata_ftide010.c
pata_hpt3x2n.c
pata_hpt3x3.c
pata_hpt37x.c
pata_hpt366.c
pata_icside.c
pata_imx.c
pata_isapnp.c
pata_it821x.c
pata_it8213.c
pata_ixp4xx_cf.c
pata_jmicron.c
pata_legacy.c
pata_macio.c
pata_marvell.c
pata_mpc52xx.c
pata_mpiix.c
pata_netcell.c
pata_ninja32.c
pata_ns87410.c
pata_ns87415.c
pata_octeon_cf.c pata_octeon_cf: use of_property_read_{bool|u32}() 2017-08-28 10:44:24 -07:00
pata_of_platform.c
pata_oldpiix.c
pata_opti.c
pata_optidma.c
pata_palmld.c
pata_pcmcia.c
pata_pdc202xx_old.c
pata_pdc2027x.c
pata_piccolo.c
pata_platform.c
pata_pxa.c
pata_radisys.c
pata_rb532_cf.c
pata_rdc.c
pata_rz1000.c
pata_samsung_cf.c
pata_sc1200.c
pata_sch.c
pata_serverworks.c
pata_sil680.c
pata_sis.c
pata_sl82c105.c
pata_triflex.c
pata_via.c
pdc_adma.c
sata_dwc_460ex.c
sata_fsl.c
sata_gemini.c ata: sata_gemini: Introduce explicit IDE pin control 2017-08-11 10:32:09 -07:00
sata_gemini.h
sata_highbank.c
sata_inic162x.c
sata_mv.c
sata_nv.c
sata_promise.c
sata_promise.h
sata_qstor.c
sata_rcar.c ata: sata_rcar: add gen[23] fallback compatibility strings 2017-07-15 07:07:28 -04:00
sata_sil.c
sata_sil24.c
sata_sis.c
sata_svw.c ata: Convert to using %pOF instead of full_name 2017-07-18 18:02:36 -04:00
sata_sx4.c
sata_uli.c
sata_via.c
sata_vsc.c
sis.h