From: Randy Dunlap Add more libata-acpi debugging, plus controlled by libata.printk value. Signed-off-by: Randy Dunlap Signed-off-by: Andrew Morton --- drivers/scsi/libata-acpi.c | 53 ++++++++++++++++++++++------------- 1 files changed, 34 insertions(+), 19 deletions(-) diff -puN drivers/scsi/libata-acpi.c~sata-acpi-objects-support-libata-acpimore-debugging drivers/scsi/libata-acpi.c --- 25/drivers/scsi/libata-acpi.c~sata-acpi-objects-support-libata-acpimore-debugging Tue Jan 17 16:14:16 2006 +++ 25-akpm/drivers/scsi/libata-acpi.c Tue Jan 17 16:14:16 2006 @@ -365,17 +365,20 @@ int do_drive_get_GTF(struct ata_port *ap status = acpi_evaluate_object(atadev->obj_handle, "_GTF", NULL, &output); if (ACPI_FAILURE(status)) { - printk(KERN_DEBUG - "%s: Run _GTF error: status = 0x%x\n", - __FUNCTION__, status); + if (ata_msg_probe(ap)) + printk(KERN_DEBUG + "%s: Run _GTF error: status = 0x%x\n", + __FUNCTION__, status); goto out; } if (!output.length || !output.pointer) { - printk(KERN_DEBUG - "%s: Run _GTF: length or ptr is NULL (0x%llx, 0x%p)\n", - __FUNCTION__, - (unsigned long long)output.length, output.pointer); + if (ata_msg_probe(ap)) + printk(KERN_DEBUG "%s: Run _GTF: " + "length or ptr is NULL (0x%llx, 0x%p)\n", + __FUNCTION__, + (unsigned long long)output.length, + output.pointer); acpi_os_free(output.pointer); goto out; } @@ -383,23 +386,32 @@ int do_drive_get_GTF(struct ata_port *ap out_obj = output.pointer; if (out_obj->type != ACPI_TYPE_BUFFER) { acpi_os_free(output.pointer); - printk(KERN_DEBUG "%s: Run _GTF: error: " - "expected object type of ACPI_TYPE_BUFFER, got 0x%x\n", - __FUNCTION__, out_obj->type); + if (ata_msg_probe(ap)) + printk(KERN_DEBUG "%s: Run _GTF: error: " + "expected object type of ACPI_TYPE_BUFFER, " + "got 0x%x\n", + __FUNCTION__, out_obj->type); err = -ENOENT; goto out; } - if (out_obj->buffer.length % REGS_PER_GTF) { + if (!out_obj->buffer.length || !out_obj->buffer.pointer || + out_obj->buffer.length % REGS_PER_GTF) { if (ata_msg_drv(ap)) - printk(KERN_ERR "%s: unexpected GTF length (%d)\n", - __FUNCTION__, out_obj->buffer.length); + printk(KERN_ERR + "%s: unexpected GTF length (%d) or addr (0x%p)\n", + __FUNCTION__, out_obj->buffer.length, + out_obj->buffer.pointer); err = -ENOENT; goto out; } *gtf_length = out_obj->buffer.length; *gtf_address = (unsigned long)out_obj->buffer.pointer; + if (ata_msg_probe(ap)) + printk(KERN_DEBUG "%s: returning " + "gtf_length=%d, gtf_address=0x%lx\n", + __FUNCTION__, *gtf_length, *gtf_address); err = 0; out: return err; @@ -501,8 +513,9 @@ int do_drive_set_taskfiles(struct ata_po if (ata_msg_probe(ap)) printk(KERN_DEBUG - "%s: total GTF bytes = %u (0x%x), gtf_count = %d\n", - __FUNCTION__, gtf_length, gtf_length, gtf_count); + "%s: total GTF bytes=%u (0x%x), gtf_count=%d, addr=0x%lx\n", + __FUNCTION__, gtf_length, gtf_length, gtf_count, + gtf_address); if (gtf_length % REGS_PER_GTF) { if (ata_msg_drv(ap)) printk(KERN_ERR "%s: unexpected GTF length (%d)\n", @@ -541,8 +554,9 @@ int ata_acpi_exec_tfs(struct ata_port *a printk(KERN_DEBUG "%s: ENTER:\n", __FUNCTION__); for (ix = 0; ix < ATA_MAX_DEVICES; ix++) { - printk(KERN_DEBUG "%s: call get_GTF, ix=%d\n", - __FUNCTION__, ix); + if (ata_msg_probe(ap)) + printk(KERN_DEBUG "%s: call get_GTF, ix=%d\n", + __FUNCTION__, ix); ret = do_drive_get_GTF(ap, &ap->device[ix], >f_length, >f_address); if (ret < 0) { @@ -552,8 +566,9 @@ int ata_acpi_exec_tfs(struct ata_port *a break; } - printk(KERN_DEBUG "%s: call set_taskfiles, ix=%d\n", - __FUNCTION__, ix); + if (ata_msg_probe(ap)) + printk(KERN_DEBUG "%s: call set_taskfiles, ix=%d\n", + __FUNCTION__, ix); ret = do_drive_set_taskfiles(ap, &ap->device[ix], gtf_length, gtf_address); acpi_os_free((void *)gtf_address); _