Re: [PATCH] pata_sl82c105: dual channel support

2008-02-01 Thread Jeff Garzik

Alan Cox wrote:

Use qc_defer to serialize the two channels

Signed-off-by: Alan Cox <[EMAIL PROTECTED]>


applied...  nice!


-
To unsubscribe from this list: send the line "unsubscribe linux-ide" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[PATCH] pata_sl82c105: dual channel support

2008-01-28 Thread Alan Cox
Use qc_defer to serialize the two channels

Signed-off-by: Alan Cox <[EMAIL PROTECTED]>

diff -u --new-file --recursive --exclude-from /usr/src/exclude 
linux.vanilla-2.6.24/drivers/ata/pata_sl82c105.c 
linux-2.6.24/drivers/ata/pata_sl82c105.c
--- linux.vanilla-2.6.24/drivers/ata/pata_sl82c105.c2008-01-24 
22:58:37.0 +
+++ linux-2.6.24/drivers/ata/pata_sl82c105.c2008-01-28 15:44:11.0 
+
@@ -26,7 +26,7 @@
 #include 
 
 #define DRV_NAME "pata_sl82c105"
-#define DRV_VERSION "0.3.2"
+#define DRV_VERSION "0.3.3"
 
 enum {
/*
@@ -206,6 +206,34 @@
sl82c105_set_piomode(ap, qc->dev);
 }
 
+/**
+ * sl82c105_qc_defer   -   implement serialization
+ * @qc: command
+ *
+ * We must issue one command per host not per channel because
+ * of the reset bug.
+ *
+ * Q: is the scsi host lock sufficient ?
+ */
+
+static int sl82c105_qc_defer(struct ata_queued_cmd *qc)
+{
+   struct ata_host *host = qc->ap->host;
+   struct ata_port *alt = host->ports[1 ^ qc->ap->port_no];
+   int rc;
+
+   /* First apply the usual rules */   
+   rc = ata_std_qc_defer(qc);
+   if (rc != 0)
+   return rc;
+
+   /* Now apply serialization rules. Only allow a command if the
+  other channel state machine is idle */
+   if (alt && alt->qc_active)
+   return  ATA_DEFER_PORT;
+   return 0;
+}
+
 static struct scsi_host_template sl82c105_sht = {
.module = THIS_MODULE,
.name   = DRV_NAME,
@@ -245,6 +273,7 @@
.bmdma_stop = sl82c105_bmdma_stop,
.bmdma_status   = ata_bmdma_status,
 
+   .qc_defer   = sl82c105_qc_defer,
.qc_prep= ata_qc_prep,
.qc_issue   = ata_qc_issue_prot,
 
@@ -312,7 +341,7 @@
};
/* for now use only the first port */
const struct ata_port_info *ppi[] = { &info_early,
-  &ata_dummy_port_info };
+  NULL };
u32 val;
int rev;
 
-
To unsubscribe from this list: send the line "unsubscribe linux-ide" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html