From: Randy Dunlap <[email protected]>
Save and free the correct acpi_object pointer.
Signed-off-by: Randy Dunlap <[email protected]>
---
drivers/scsi/libata-acpi.c | 14 +++++++++-----
drivers/scsi/libata.h | 6 ++++--
2 files changed, 13 insertions(+), 7 deletions(-)
--- linux-2616-rc4-ata.orig/drivers/scsi/libata-acpi.c
+++ linux-2616-rc4-ata/drivers/scsi/libata-acpi.c
@@ -302,7 +302,8 @@ EXPORT_SYMBOL_GPL(ata_acpi_push_id);
* function return value is 0.
*/
int do_drive_get_GTF(struct ata_port *ap, struct ata_device *atadev,
- unsigned int *gtf_length, unsigned long *gtf_address)
+ unsigned int *gtf_length, unsigned long *gtf_address,
+ unsigned long *obj_loc)
{
acpi_status status;
acpi_handle handle;
@@ -321,6 +322,7 @@ int do_drive_get_GTF(struct ata_port *ap
*gtf_length = 0;
*gtf_address = 0UL;
+ *obj_loc = 0UL;
if (noacpi)
return 0;
@@ -414,10 +416,11 @@ int do_drive_get_GTF(struct ata_port *ap
*gtf_length = out_obj->buffer.length;
*gtf_address = (unsigned long)out_obj->buffer.pointer;
+ *obj_loc = (unsigned long)out_obj;
if (ata_msg_probe(ap))
printk(KERN_DEBUG "%s: returning "
- "gtf_length=%d, gtf_address=0x%lx\n",
- __FUNCTION__, *gtf_length, *gtf_address);
+ "gtf_length=%d, gtf_address=0x%lx, obj_loc=0x%lx\n",
+ __FUNCTION__, *gtf_length, *gtf_address, *obj_loc);
err = 0;
out:
return err;
@@ -558,6 +561,7 @@ int ata_acpi_exec_tfs(struct ata_port *a
int ret;
unsigned int gtf_length;
unsigned long gtf_address;
+ unsigned long obj_loc;
if (ata_msg_probe(ap))
printk(KERN_DEBUG "%s: ENTER:\n", __FUNCTION__);
@@ -570,7 +574,7 @@ int ata_acpi_exec_tfs(struct ata_port *a
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);
+ >f_length, >f_address, &obj_loc);
if (ret < 0) {
if (ata_msg_probe(ap))
printk(KERN_DEBUG "%s: get_GTF error (%d)\n",
@@ -583,7 +587,7 @@ int ata_acpi_exec_tfs(struct ata_port *a
__FUNCTION__, ix);
ret = do_drive_set_taskfiles(ap, &ap->device[ix],
gtf_length, gtf_address);
- acpi_os_free((void *)gtf_address);
+ acpi_os_free((void *)obj_loc);
if (ret < 0) {
if (ata_msg_probe(ap))
printk(KERN_DEBUG
--- linux-2616-rc4-ata.orig/drivers/scsi/libata.h
+++ linux-2616-rc4-ata/drivers/scsi/libata.h
@@ -64,7 +64,8 @@ extern unsigned int ata_exec_internal(st
#ifdef CONFIG_SCSI_SATA_ACPI
extern int ata_acpi_push_id(struct ata_port *ap, unsigned int ix);
extern int do_drive_get_GTF(struct ata_port *ap, struct ata_device *atadev,
- unsigned int *gtf_length, unsigned long *gtf_address);
+ unsigned int *gtf_length, unsigned long *gtf_address,
+ unsigned long *obj_loc);
extern int do_drive_set_taskfiles(struct ata_port *ap, struct ata_device *atadev,
unsigned int gtf_length, unsigned long gtf_address);
extern int ata_acpi_exec_tfs(struct ata_port *ap);
@@ -75,7 +76,8 @@ static inline int ata_acpi_push_id(struc
}
static inline int do_drive_get_GTF(struct ata_port *ap,
struct ata_device *atadev,
- unsigned int *gtf_length, unsigned long *gtf_address)
+ unsigned int *gtf_length, unsigned long *gtf_address,
+ unsigned long *obj_loc)
{
return 0;
}
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to [email protected]
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/
[Index of Archives]
[Kernel Newbies]
[Netfilter]
[Bugtraq]
[Photo]
[Stuff]
[Gimp]
[Yosemite News]
[MIPS Linux]
[ARM Linux]
[Linux Security]
[Linux RAID]
[Video 4 Linux]
[Linux for the blind]
[Linux Resources]