[PATCH] libata-dev: move the CDB-intr DMA blacklisting
authorAlbert Lee <albertcc@tw.ibm.com>
Thu, 22 Jun 2006 05:00:25 +0000 (13:00 +0800)
committerJeff Garzik <jeff@garzik.org>
Fri, 23 Jun 2006 03:26:24 +0000 (23:26 -0400)
Move the DMA blacklisting of the CDB-intr devices
from ata_check_atapi_dma() to ata_dma_blacklisted(), where it makes more sense.

Signed-off-by: Albert Lee <albertcc@tw.ibm.com>
Signed-off-by: Jeff Garzik <jeff@garzik.org>
drivers/scsi/libata-core.c

index df483adc3f75506ee498c5e8fc58e6abc42cb59d..425ab1493fd30193ac7753c48dc49f2a048de0de 100644 (file)
@@ -2943,6 +2943,14 @@ static int ata_dma_blacklisted(const struct ata_device *dev)
        unsigned int nlen, rlen;
        int i;
 
+       /* We don't support polling DMA.
+        * DMA blacklist those ATAPI devices with CDB-intr (and use PIO)
+        * if the LLDD handles only interrupts in the HSM_ST_LAST state.
+        */
+       if ((dev->ap->flags & ATA_FLAG_PIO_POLLING) &&
+           (dev->flags & ATA_DFLAG_CDB_INTR))
+               return 1;
+
        ata_id_string(dev->id, model_num, ATA_ID_PROD_OFS,
                          sizeof(model_num));
        ata_id_string(dev->id, model_rev, ATA_ID_FW_REV_OFS,
@@ -3235,15 +3243,6 @@ int ata_check_atapi_dma(struct ata_queued_cmd *qc)
        if (ap->ops->check_atapi_dma)
                rc = ap->ops->check_atapi_dma(qc);
 
-       /* We don't support polling DMA.
-        * Use PIO if the LLDD handles only interrupts in
-        * the HSM_ST_LAST state and the ATAPI device
-        * generates CDB interrupts.
-        */
-       if ((ap->flags & ATA_FLAG_PIO_POLLING) &&
-           (qc->dev->flags & ATA_DFLAG_CDB_INTR))
-               rc = 1;
-
        return rc;
 }
 /**
@@ -4551,7 +4550,7 @@ unsigned int ata_qc_issue_prot(struct ata_queued_cmd *qc)
                        break;
                case ATA_PROT_ATAPI_DMA:
                        if (qc->dev->flags & ATA_DFLAG_CDB_INTR)
-                               /* see ata_check_atapi_dma() */
+                               /* see ata_dma_blacklisted() */
                                BUG();
                        break;
                default: