Messages in this thread Patch in this message | | | Date | Fri, 29 Sep 2006 17:33:08 -0700 | From | Kristen Carlson Accardi <> | Subject | Re: [patch 2/2] libata: _SDD support |
| |
On Fri, 29 Sep 2006 03:13:53 +0100 Matthew Garrett <mjg59@srcf.ucam.org> wrote:
> This may be paranoia, but: > > If I'm reading the code right (I may well not be), you seem to be > evaulating _GTF before _SDD. The spec (9.9.1.1) claims that _SDD should > be evaulated before _GTF - we had a couple of bug reports against an > earlier version of the patch that may have been due to that, but I never > had a chance to chase them down properly. > > -- > Matthew Garrett | mjg59@srcf.ucam.org
You are right, that was happening. this patch fixes the issue:
Subject: libata: change order of sdd/gtf execution
Make the sdd call come before gtf. _SDD is used to provide input to the _GTF file, so it should be executed first.
Signed-off-by: Kristen Carlson Accardi <kristen.c.accardi@intel.com>
--- drivers/ata/libata-core.c | 21 ++++++++++----------- 1 file changed, 10 insertions(+), 11 deletions(-)
--- 2.6-mm.orig/drivers/ata/libata-core.c +++ 2.6-mm/drivers/ata/libata-core.c @@ -1404,6 +1404,16 @@ int ata_dev_configure(struct ata_device ata_dev_printk(dev, KERN_DEBUG, "%s: ENTER, host %u, dev %u\n", __FUNCTION__, ap->id, dev->devno); + /* set _SDD */ + rc = ata_acpi_push_id(ap, dev->devno); + if (rc) { + ata_dev_printk(dev, KERN_WARNING, "failed to set _SDD(%d)\n", + rc); + } + + /* retrieve and execute the ATA task file of _GTF */ + ata_acpi_exec_tfs(ap); + /* print device capabilities */ if (ata_msg_probe(ap)) ata_dev_printk(dev, KERN_DEBUG, @@ -1556,14 +1566,6 @@ int ata_dev_configure(struct ata_device if (ap->ops->dev_config) ap->ops->dev_config(ap, dev); - /* set _SDD */ - rc = ata_acpi_push_id(ap, dev->devno); - if (rc) { - ata_dev_printk(dev, KERN_WARNING, "failed to set _SDD(%d)\n", - rc); - goto err_out_nosup; - } - if (ata_msg_probe(ap)) ata_dev_printk(dev, KERN_DEBUG, "%s: EXIT, drv_stat = 0x%x\n", __FUNCTION__, ata_chk_status(ap)); @@ -1609,9 +1611,6 @@ int ata_bus_probe(struct ata_port *ap) /* reset and determine device classes */ ap->ops->phy_reset(ap); - /* retrieve and execute the ATA task file of _GTF */ - ata_acpi_exec_tfs(ap); - for (i = 0; i < ATA_MAX_DEVICES; i++) { dev = &ap->device[i]; - To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
| |