Sophie

Sophie

distrib > Scientific%20Linux > 5x > x86_64 > by-pkgid > fc11cd6e1c513a17304da94a5390f3cd > files > 3255

kernel-2.6.18-194.11.1.el5.src.rpm

From: Jeff Garzik <jgarzik@redhat.com>
Subject: [RHEL5 PATCH] SATA combined mode regression fix
Date: Fri, 22 Jun 2007 05:04:31 -0400
Bugzilla: 245052
Message-Id: <20070622090431.GB9061@devserv.devel.redhat.com>
Changelog: [sata] combined mode regression fix



As reported in BZ# 245052, there was a regression in combined mode.
Root cause:  I left out a patch that was in SATA preliminary patch, but
not in the final patch.

 drivers/ata/libata-sff.c |   18 +++++++++++++++++-
 1 files changed, 17 insertions(+), 1 deletion(-)

diff -urN ../kernel-2.6.18/linux-2.6.18.i686/drivers/ata/libata-sff.c linux-2.6.18.i686/drivers/ata/libata-sff.c
--- ../kernel-2.6.18/linux-2.6.18.i686/drivers/ata/libata-sff.c	2007-06-22 04:53:45.000000000 -0400
+++ linux-2.6.18.i686/drivers/ata/libata-sff.c	2007-06-22 03:43:56.000000000 -0400
@@ -749,6 +749,21 @@
 	}
 }
 
+static int ata_legacy_port_reserved(unsigned long res_start)
+{
+	struct resource *conflict, res;
+
+	res.start = res_start;
+	res.end = res_start + 8 - 1;
+	conflict = ____request_resource(&ioport_resource, &res);
+	while (conflict->child)
+		conflict = ____request_resource(conflict, &res);
+	if (!strcmp(conflict->name, "libata"))
+		return 1;	/* true */
+
+	return 0;		/* false */
+}
+
 static int ata_init_legacy_port(struct ata_port *ap,
 				struct ata_legacy_devres *legacy_dr)
 {
@@ -765,7 +780,8 @@
 	}
 
 	/* request cmd_port */
-	if (request_region(cmd_port, 8, "libata"))
+	if (request_region(cmd_port, 8, "libata") ||
+	    ata_legacy_port_reserved(cmd_port))
 		legacy_dr->cmd_port[port_no] = cmd_port;
 	else {
 		dev_printk(KERN_WARNING, host->dev,