aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/ata/sata_sil24.c
diff options
context:
space:
mode:
authorJeff Garzik <jeff@garzik.org>2007-10-18 16:21:18 -0400
committerJeff Garzik <jeff@garzik.org>2007-10-18 16:21:18 -0400
commit3be6cbd73f74b4a3da82cc7d6e1688a4ae595fc7 (patch)
treea077cf70d1cd438db34f5def23dd8f72f42b5a8c /drivers/ata/sata_sil24.c
parent858c9c406688bc7244986b5836265071edfd1d3f (diff)
[libata] kill ata_sg_is_last()
Short term, this works around a bug introduced by early sg-chaining work. Long term, removing this function eliminates a branch from a hot path loop in each scatter/gather table build. Also, as this code demonstrates, we don't need to _track_ the end of the s/g list, as long as we mark it in some way. And doing so programatically is nice. So its a useful cleanup, regardless of its short term effects. Based conceptually on a quick patch by Jens Axboe. Signed-off-by: Jeff Garzik <jgarzik@redhat.com>
Diffstat (limited to 'drivers/ata/sata_sil24.c')
-rw-r--r--drivers/ata/sata_sil24.c11
1 files changed, 7 insertions, 4 deletions
diff --git a/drivers/ata/sata_sil24.c b/drivers/ata/sata_sil24.c
index b0619278454a..26ebffc10f3e 100644
--- a/drivers/ata/sata_sil24.c
+++ b/drivers/ata/sata_sil24.c
@@ -796,16 +796,19 @@ static inline void sil24_fill_sg(struct ata_queued_cmd *qc,
796 struct sil24_sge *sge) 796 struct sil24_sge *sge)
797{ 797{
798 struct scatterlist *sg; 798 struct scatterlist *sg;
799 struct sil24_sge *last_sge = NULL;
799 800
800 ata_for_each_sg(sg, qc) { 801 ata_for_each_sg(sg, qc) {
801 sge->addr = cpu_to_le64(sg_dma_address(sg)); 802 sge->addr = cpu_to_le64(sg_dma_address(sg));
802 sge->cnt = cpu_to_le32(sg_dma_len(sg)); 803 sge->cnt = cpu_to_le32(sg_dma_len(sg));
803 if (ata_sg_is_last(sg, qc)) 804 sge->flags = 0;
804 sge->flags = cpu_to_le32(SGE_TRM); 805
805 else 806 last_sge = sge;
806 sge->flags = 0;
807 sge++; 807 sge++;
808 } 808 }
809
810 if (likely(last_sge))
811 last_sge->flags = cpu_to_le32(SGE_TRM);
809} 812}
810 813
811static int sil24_qc_defer(struct ata_queued_cmd *qc) 814static int sil24_qc_defer(struct ata_queued_cmd *qc)