Messages in this thread Patch in this message | | | Date | Tue, 17 Jan 2006 12:13:48 -0800 | From | Randy Dunlap <> | Subject | [PATCH 1/3] libata-acpi:more debugging |
| |
On Sat, 14 Jan 2006 19:54:09 +0100 Mathieu Bérard <Mathieu.Berard@crans.org> wrote:
> Hi, > 2.6.15-mm4 crash on boot when loading the ata_piix or the ahci module. > Reverting the libata ACPI support patches workaround this bug. > > (Please CC me)
Hi, This series of 3 patches to 2.6.15-mm4 fixes it for me. Thanks, ---
From: Randy Dunlap <randy_d_dunlap@linux.intel.com>
Add more libata-acpi debugging, plus controlled by libata.printk value.
Signed-off-by: Randy Dunlap <randy_d_dunlap@linux.intel.com> --- drivers/scsi/libata-acpi.c | 53 ++++++++++++++++++++++++++++----------------- 1 files changed, 34 insertions(+), 19 deletions(-)
--- linux-2615-mm4.orig/drivers/scsi/libata-acpi.c +++ linux-2615-mm4/drivers/scsi/libata-acpi.c @@ -371,17 +371,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; } @@ -389,23 +392,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; @@ -510,8 +522,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", @@ -553,8 +566,9 @@ int ata_acpi_exec_tfs(struct ata_port *a return 0; 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) { @@ -564,8 +578,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); - 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/
| |