[PATCH 2.6.22-rc7 2/3] libata: implement HORKAGE_SETXFER

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Make CFA SETXFER failure handling into HORKAGE.  This will be used to
allow other cases to ignore SETXFER failure.

Signed-off-by: Tejun Heo <htejun@xxxxxxxxx>
---
 drivers/ata/libata-core.c |   15 ++++++++++-----
 include/linux/libata.h    |    1 +
 2 files changed, 11 insertions(+), 5 deletions(-)

Index: work/drivers/ata/libata-core.c
===================================================================
--- work.orig/drivers/ata/libata-core.c
+++ work/drivers/ata/libata-core.c
@@ -1898,7 +1898,7 @@ int ata_dev_configure(struct ata_device 
 	 * common ATA, ATAPI feature tests
 	 */
 
-	/* find max transfer mode; for printk only */
+	/* determine xfermask */
 	xfer_mask = ata_id_xfermask(id);
 
 	if (ata_msg_probe(ap))
@@ -1919,8 +1919,13 @@ int ata_dev_configure(struct ata_device 
 					       "supports DRM functions and may "
 					       "not be fully accessable.\n");
 			snprintf(revbuf, 7, "CFA");
-		}
-		else
+
+			/* Old CFA may refuse SETFEATURES_XFER, which
+			 * is just fine
+			 */
+			if (!(xfer_mask & ~ATA_MASK_PIO))
+				dev->horkage |= ATA_HORKAGE_SETXFER;
+		} else
 			snprintf(revbuf, 7, "ATA-%d",  ata_id_major_version(id));
 
 		dev->n_sectors = ata_id_n_sectors(id);
@@ -2775,8 +2780,8 @@ static int ata_dev_set_mode(struct ata_d
 		dev->flags |= ATA_DFLAG_PIO;
 
 	err_mask = ata_dev_set_xfermode(dev);
-	/* Old CFA may refuse this command, which is just fine */
-	if (dev->xfer_shift == ATA_SHIFT_PIO && ata_id_is_cfa(dev->id))
+
+	if (dev->horkage & ATA_HORKAGE_SETXFER)
         	err_mask &= ~AC_ERR_DEV;
 
 	if (err_mask) {
Index: work/include/linux/libata.h
===================================================================
--- work.orig/include/linux/libata.h
+++ work/include/linux/libata.h
@@ -298,6 +298,7 @@ enum {
 	ATA_HORKAGE_NODMA	= (1 << 1),	/* DMA problems */
 	ATA_HORKAGE_NONCQ	= (1 << 2),	/* Don't use NCQ */
 	ATA_HORKAGE_MAX_SEC_128	= (1 << 3),	/* Limit max sects to 128 */
+	ATA_HORKAGE_SETXFER	= (1 << 4), /* SETFEATURES_XFER may fail */
 };
 
 enum hsm_task_states {
-
To unsubscribe from this list: send the line "unsubscribe linux-ide" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html

[Index of Archives]     [Linux Filesystems]     [Linux SCSI]     [Linux RAID]     [Git]     [Kernel Newbies]     [Linux Newbie]     [Security]     [Netfilter]     [Bugtraq]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Samba]     [Device Mapper]

  Powered by Linux