Gitweb:     
http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=bdab4e877819cc8b682797901c8b37567fec3c5e
Commit:     bdab4e877819cc8b682797901c8b37567fec3c5e
Parent:     797f49de3d95d964a360bcf0167cc20e249bb90b
Author:     Darrick J. Wong <[EMAIL PROTECTED]>
AuthorDate: Fri Oct 13 16:56:25 2006 -0700
Committer:  James Bottomley <[EMAIL PROTECTED]>
CommitDate: Wed Jul 18 11:14:07 2007 -0500

    [SCSI] libsas: support NCQ for SATA disks
    
    This patch adds SATAII NCQ support to libsas.  Both the use_ncq and the
    dma_xfer flags in ata_task must be set for NCQ to work correctly on the
    Adaptec SAS controller.  The rest of the patch adds ATA_FLAG_NCQ to
    sata_port_info and sets up ap->scsi_host so that ata_setup_ncq doesn't
    crash.  Please note that this patch is against the aic94xx-sas git tree,
    not scsi-misc.  Thanks also to James Bottomley for providing an earlier
    version of this patch from which to work.
    
    I've tested this patch on a x206m with a ST380819AS SATA2 disk plugged
    into the Adaptec SAS controller.  The drive came up with a queue depth
    of 31, and I successfully ran an I/O flood test to coerce libata into
    sending multiple commands simultaneously.  A kernel probe recorded the
    maximum tag number that had been seen before and after the flood test;
    before the test it was 2 and after it was 30, as I expected.
    
    Signed-off-by: Darrick J. Wong <[EMAIL PROTECTED]>
    Signed-off-by: James Bottomley <[EMAIL PROTECTED]>
---
 drivers/scsi/libsas/sas_scsi_host.c |   11 +++++++++--
 1 files changed, 9 insertions(+), 2 deletions(-)

diff --git a/drivers/scsi/libsas/sas_scsi_host.c 
b/drivers/scsi/libsas/sas_scsi_host.c
index 3220b3f..274e7eb 100644
--- a/drivers/scsi/libsas/sas_scsi_host.c
+++ b/drivers/scsi/libsas/sas_scsi_host.c
@@ -828,8 +828,14 @@ static unsigned int sas_ata_qc_issue(struct ata_queued_cmd 
*qc)
        task->ata_task.retry_count = 1;
        task->task_state_flags = SAS_TASK_STATE_PENDING;
 
-       if (qc->tf.protocol == ATA_PROT_DMA)
+       switch (qc->tf.protocol) {
+       case ATA_PROT_NCQ:
+               task->ata_task.use_ncq = 1;
+               /* fall through */
+       case ATA_PROT_DMA:
                task->ata_task.dma_xfer = 1;
+               break;
+       }
 
        if (sas_ha->lldd_max_execute_num < 2)
                res = i->dft->lldd_execute_task(task, 1, GFP_ATOMIC);
@@ -962,7 +968,7 @@ static struct ata_port_operations sas_sata_ops = {
 
 static struct ata_port_info sata_port_info = {
        .flags = ATA_FLAG_SATA | ATA_FLAG_NO_LEGACY | ATA_FLAG_SATA_RESET |
-               ATA_FLAG_MMIO | ATA_FLAG_PIO_DMA,
+               ATA_FLAG_MMIO | ATA_FLAG_PIO_DMA | ATA_FLAG_NCQ,
        .pio_mask = 0x1f, /* PIO0-4 */
        .mwdma_mask = 0x07, /* MWDMA0-2 */
        .udma_mask = ATA_UDMA6,
@@ -1031,6 +1037,7 @@ int sas_target_alloc(struct scsi_target *starget)
 
                ap->private_data = found_dev;
                ap->cbl = ATA_CBL_SATA;
+               ap->scsi_host = shost;
                found_dev->sata_dev.ap = ap;
        }
 
-
To unsubscribe from this list: send the line "unsubscribe git-commits-head" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to