From: "Darrick J. Wong" <djwong@us.ibm.com>
To: linux-scsi <linux-scsi@vger.kernel.org>,
Linux Kernel Mailing List <linux-kernel@vger.kernel.org>,
Alexis Bruemmer <alexisb@us.ibm.com>
Cc: Mike Anderson <andmike@us.ibm.com>
Subject: [PATCH] libsas: support NCQ for SATA disks
Date: Fri, 13 Oct 2006 16:56:25 -0700 [thread overview]
Message-ID: <453027A9.3060606@us.ibm.com> (raw)
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 <djwong@us.ibm.com>
--
diff --git a/drivers/scsi/libsas/sas_scsi_host.c b/drivers/scsi/libsas/sas_scsi_host.c
index 60d13b1..77a9be8 100644
--- a/drivers/scsi/libsas/sas_scsi_host.c
+++ b/drivers/scsi/libsas/sas_scsi_host.c
@@ -673,8 +673,14 @@ static unsigned int sas_ata_qc_issue(str
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);
@@ -807,7 +813,7 @@ static struct ata_port_operations sas_sa
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,
@@ -875,6 +881,7 @@ int sas_target_alloc(struct scsi_target
ap->private_data = found_dev;
ap->cbl = ATA_CBL_SATA;
+ ap->scsi_host = shost;
found_dev->sata_dev.ap = ap;
}
next reply other threads:[~2006-10-13 23:56 UTC|newest]
Thread overview: 8+ messages / expand[flat|nested] mbox.gz Atom feed top
2006-10-13 23:56 Darrick J. Wong [this message]
2006-10-15 17:42 ` [PATCH] libsas: support NCQ for SATA disks James Bottomley
2006-10-15 18:43 ` Darrick J. Wong
2006-10-15 19:42 ` Luben Tuikov
2006-10-16 22:40 ` Brian King
2006-10-17 11:15 ` Jeff Garzik
2006-10-17 16:35 ` James Bottomley
2006-10-17 22:42 ` Luben Tuikov
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=453027A9.3060606@us.ibm.com \
--to=djwong@us.ibm.com \
--cc=alexisb@us.ibm.com \
--cc=andmike@us.ibm.com \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-scsi@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox