mirror of https://github.com/torvalds/linux.git
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>
|
||
|---|---|---|
| .. | ||
| Kconfig | ||
| Makefile | ||
| acard-ahci.c | ||
| ahci.c | ||
| ahci.h | ||
| ahci_brcm.c | ||
| ahci_ceva.c | ||
| ahci_da850.c | ||
| ahci_dm816.c | ||
| ahci_imx.c | ||
| ahci_mtk.c | ||
| ahci_mvebu.c | ||
| ahci_octeon.c | ||
| ahci_platform.c | ||
| ahci_qoriq.c | ||
| ahci_seattle.c | ||
| ahci_st.c | ||
| ahci_sunxi.c | ||
| ahci_tegra.c | ||
| ahci_xgene.c | ||
| ata_generic.c | ||
| ata_piix.c | ||
| libahci.c | ||
| libahci_platform.c | ||
| libata-acpi.c | ||
| libata-core.c | ||
| libata-eh.c | ||
| libata-pmp.c | ||
| libata-scsi.c | ||
| libata-sff.c | ||
| libata-trace.c | ||
| libata-transport.c | ||
| libata-transport.h | ||
| libata-zpodd.c | ||
| libata.h | ||
| pata_acpi.c | ||
| pata_ali.c | ||
| pata_amd.c | ||
| 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 | ||
| 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_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 | ||
| 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 | ||
| sata_sil.c | ||
| sata_sil24.c | ||
| sata_sis.c | ||
| sata_svw.c | ||
| sata_sx4.c | ||
| sata_uli.c | ||
| sata_via.c | ||
| sata_vsc.c | ||
| sis.h | ||