libata: restore acpi disable functionality
PATCH 1/1 libata: restore acpi disable functionality
Commit 66fa7f215 "libata-acpi: improve ACPI disabling" introdcued the behaviour of disabling ATA ACPI if ata_acpi_on_devcfg failed the 2nd time, but commit 30dcf76ac dropped this behaviour and this caused problem for Dimitris Damigos, where his laptop can not resume correctly.
The bugzilla page for it is:
https://bugzilla.kernel.org/show_bug.cgi?id=49331
The problem is, ata_dev_push_id will fail the 2nd time it is invoked, and due to disabling ACPI code is dropped, ata_acpi_on_devcfg which calls ata_dev_push_id will keep failing and eventually made the device disabled.
This patch restores the original behaviour, if acpi failed the 2nd time, disable acpi functionality for the device(and we do not event need to add a debug message for this as it is still there ;-).
--- drivers/ata/libata-acpi.c | 4 ++++ include/linux/libata.h | 1 + 2 files changed, 5 insertions(+)
drivers/ata/libata-acpi.c +4 -0
@@ -76,6 +76,9 @@ acpi_handle ata_dev_acpi_handle(struct ata_device *dev)acpi_integer adr;struct ata_port *ap = dev->link->ap; +if (dev->flags &ATA_DFLAG_ACPI_DISABLED ) +return NULL ; +if (ap->flags &ATA_FLAG_ACPI_SATA ) {if (!sata_pmp_attached (ap)) adr =SATA_ADR (ap->port_no,NO_PORT_MULT );
@@ -945,6 +948,7 @@ int ata_acpi_on_devcfg(struct ata_device *dev)return rc; } + dev->flags |=ATA_DFLAG_ACPI_DISABLED ;ata_dev_warn (dev,"ACPI: failed the second time, disabled\n" );/* We can safely continue if no _GTF command has been executed
include/linux/libata.h +1 -0
@@ -163,6 +163,7 @@ enum {ATA_DFLAG_DA = (1 <<26 ),/* device supports Device Attention */ ATA_DFLAG_DEVSLP = (1 <<27 ),/* device supports Device Sleep */ +ATA_DFLAG_ACPI_DISABLED = (1 <<28 ),/* ACPI for the device is disabled */ ATA_DEV_UNKNOWN =0 ,/* unknown device */ ATA_DEV_ATA = 1, /* ATA device */
Signature · 1 line
1.7.12.4
Quoted 14 lines · Aaron Lu
Commit
66fa7f215"libata-acpi: improve ACPI disabling" introdcued the behaviour of disabling ATA ACPI ifata_acpi_on_devcfgfailed the 2nd time, but commit30dcf76acdropped this behaviour and this caused problem for Dimitris Damigos, where his laptop can not resume correctly.The bugzilla page for it is:
https://bugzilla.kernel.org/show_bug.cgi?id=49331The problem is,
ata_dev_push_idwill fail the 2nd time it is invoked, and due to disabling ACPI code is dropped,ata_acpi_on_devcfgwhich callsata_dev_push_idwill keep failing and eventually made the device disabled.
Quoted 7 lines
This patch restores the original behaviour, if acpi failed the 2nd time, disable acpi functionality for the device(and we do not event need to add a debug message for this as it is still there ;-).
Reported-by Dimitris Damigos <[email protected]>Signed-off-by Aaron Lu <[email protected]>Cc <[email protected]>
Jeff?
Thanks.
Signature · 1 line
tejun
Jeff Garzik
AppliedQuoted 18 lines · Aaron Lu
Commit
66fa7f215"libata-acpi: improve ACPI disabling" introdcued the behaviour of disabling ATA ACPI ifata_acpi_on_devcfgfailed the 2nd time, but commit30dcf76acdropped this behaviour and this caused problem for Dimitris Damigos, where his laptop can not resume correctly.The bugzilla page for it is:
https://bugzilla.kernel.org/show_bug.cgi?id=49331The problem is,
ata_dev_push_idwill fail the 2nd time it is invoked, and due to disabling ACPI code is dropped,ata_acpi_on_devcfgwhich callsata_dev_push_idwill keep failing and eventually made the device disabled.This patch restores the original behaviour, if acpi failed the 2nd time, disable acpi functionality for the device(and we do not event need to add a debug message for this as it is still there ;-).
Quoted 7 lines
Reported-by Dimitris Damigos <[email protected]>Signed-off-by Aaron Lu <[email protected]>Cc <[email protected]>--- drivers/ata/libata-acpi.c | 4 ++++ include/linux/libata.h | 1 + 2 files changed, 5 insertions(+)
applied