d312fefea8
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> |
||
---|---|---|
.. | ||
acard-ahci.c | ||
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 | ||
ahci.c | ||
ahci.h | ||
ata_generic.c | ||
ata_piix.c | ||
Kconfig | ||
libahci_platform.c | ||
libahci.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 | ||
Makefile | ||
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 |