Comment 10 for bug 202767

Revision history for this message
Oleksij Rempel (olerem) wrote : Re: [Bug 202767] Re: [hardy][suspend] "libata.noacpi=1" should be enabled by default
  • unnamed Edit (189 bytes, application/pgp-signature; name=signature.asc)

Here is the patch.

commit 48feb3c419508487becfb9ea3afcc54c3eac6d80
Author: Shaohua Li <email address hidden>
Date: Tue Mar 25 16:50:45 2008 +0800

    ata-acpi: don't call _GTF for disabled drive

    I got below log after a S3 resume in a ASUS A6VC laptop. The system
has
    only one IDE drive. It appears there is no reason calling _GTF for
    disabled drive.

    ACPI Error (dsopcode-0483): Attempt to CreateField of length zero
[20070126]
    ACPI Error (psparse-0537): Method parse/execution failed
[\_SB_.PCI0.IDE0.RA
    ACPI Error (psparse-0537): Method parse/execution failed
[\_SB_.PCI0.IDE0.CH
    ata2.00: _GTF evaluation failed (AE 0x3006)
    ACPI Error (dsopcode-0483): Attempt to CreateField of length zero
[20070126]
    ACPI Error (psparse-0537): Method parse/execution failed
[\_SB_.PCI0.IDE0.RA
    ACPI Error (psparse-0537): Method parse/execution failed
[\_SB_.PCI0.IDE0.CH
    ata2.01: _GTF evaluation failed (AE 0x3006)

    Signed-off-by: Shaohua Li <email address hidden>
    Signed-off-by: Jeff Garzik <email address hidden>

diff --git a/drivers/ata/libata-acpi.c b/drivers/ata/libata-acpi.c
index f88a4f9..8c1cfc6 100644
--- a/drivers/ata/libata-acpi.c
+++ b/drivers/ata/libata-acpi.c
@@ -839,7 +839,8 @@ void ata_acpi_on_resume(struct ata_port *ap)
                 */
                ata_link_for_each_dev(dev, &ap->link) {
                        ata_acpi_clear_gtf(dev);
- if (ata_dev_get_GTF(dev, NULL) >= 0)
+ if (ata_dev_enabled(dev) &&
+ ata_dev_get_GTF(dev, NULL) >= 0)
                                dev->flags |= ATA_DFLAG_ACPI_PENDING;
                }
        } else {
@@ -849,7 +850,8 @@ void ata_acpi_on_resume(struct ata_port *ap)
                 */
                ata_link_for_each_dev(dev, &ap->link) {
                        ata_acpi_clear_gtf(dev);
- dev->flags |= ATA_DFLAG_ACPI_PENDING;
+ if (ata_dev_enabled(dev))
+ dev->flags |= ATA_DFLAG_ACPI_PENDING;
                }
        }
 }