aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/scsi/mpt2sas
diff options
context:
space:
mode:
authorMatthew Wilcox <matthew.r.wilcox@intel.com>2014-03-27 16:40:34 -0400
committerChristoph Hellwig <hch@lst.de>2014-05-28 12:13:24 -0400
commit049b3e81d79b1957c0be231d66a98b5715b347e4 (patch)
tree57af9a39717582e37d9ed17be3a1ebc551d527ab /drivers/scsi/mpt2sas
parent90f951edb702c887ea392aee8a3e42bdabd27803 (diff)
mpt2sas: Add free smids to the head, not tail of list
Reusing a smid quickly means it's still cache-hot. This yields a small but noticable performance improvement in a well-known database benchmark. This improvement is already present in the mpt3sas driver. Signed-off-by: Matthew Wilcox <matthew.r.wilcox@intel.com> Reviewed-by: Nicholas Bellinger <nab@linux-iscsi.org> Reviewed-by: Praveen Krishnamoorthy <Praveen.krishnamoorthy@lsi.com> Acked-by: Sreekanth Reddy <Sreekanth.reddy@lsi.com> Signed-off-by: Christoph Hellwig <hch@lst.de>
Diffstat (limited to 'drivers/scsi/mpt2sas')
-rw-r--r--drivers/scsi/mpt2sas/mpt2sas_base.c8
1 files changed, 4 insertions, 4 deletions
diff --git a/drivers/scsi/mpt2sas/mpt2sas_base.c b/drivers/scsi/mpt2sas/mpt2sas_base.c
index bde63f7452bd..8b88118e20e6 100644
--- a/drivers/scsi/mpt2sas/mpt2sas_base.c
+++ b/drivers/scsi/mpt2sas/mpt2sas_base.c
@@ -1739,14 +1739,14 @@ mpt2sas_base_free_smid(struct MPT2SAS_ADAPTER *ioc, u16 smid)
1739 list_for_each_entry_safe(chain_req, next, 1739 list_for_each_entry_safe(chain_req, next,
1740 &ioc->scsi_lookup[i].chain_list, tracker_list) { 1740 &ioc->scsi_lookup[i].chain_list, tracker_list) {
1741 list_del_init(&chain_req->tracker_list); 1741 list_del_init(&chain_req->tracker_list);
1742 list_add_tail(&chain_req->tracker_list, 1742 list_add(&chain_req->tracker_list,
1743 &ioc->free_chain_list); 1743 &ioc->free_chain_list);
1744 } 1744 }
1745 } 1745 }
1746 ioc->scsi_lookup[i].cb_idx = 0xFF; 1746 ioc->scsi_lookup[i].cb_idx = 0xFF;
1747 ioc->scsi_lookup[i].scmd = NULL; 1747 ioc->scsi_lookup[i].scmd = NULL;
1748 ioc->scsi_lookup[i].direct_io = 0; 1748 ioc->scsi_lookup[i].direct_io = 0;
1749 list_add_tail(&ioc->scsi_lookup[i].tracker_list, 1749 list_add(&ioc->scsi_lookup[i].tracker_list,
1750 &ioc->free_list); 1750 &ioc->free_list);
1751 spin_unlock_irqrestore(&ioc->scsi_lookup_lock, flags); 1751 spin_unlock_irqrestore(&ioc->scsi_lookup_lock, flags);
1752 1752
@@ -1764,13 +1764,13 @@ mpt2sas_base_free_smid(struct MPT2SAS_ADAPTER *ioc, u16 smid)
1764 /* hi-priority */ 1764 /* hi-priority */
1765 i = smid - ioc->hi_priority_smid; 1765 i = smid - ioc->hi_priority_smid;
1766 ioc->hpr_lookup[i].cb_idx = 0xFF; 1766 ioc->hpr_lookup[i].cb_idx = 0xFF;
1767 list_add_tail(&ioc->hpr_lookup[i].tracker_list, 1767 list_add(&ioc->hpr_lookup[i].tracker_list,
1768 &ioc->hpr_free_list); 1768 &ioc->hpr_free_list);
1769 } else if (smid <= ioc->hba_queue_depth) { 1769 } else if (smid <= ioc->hba_queue_depth) {
1770 /* internal queue */ 1770 /* internal queue */
1771 i = smid - ioc->internal_smid; 1771 i = smid - ioc->internal_smid;
1772 ioc->internal_lookup[i].cb_idx = 0xFF; 1772 ioc->internal_lookup[i].cb_idx = 0xFF;
1773 list_add_tail(&ioc->internal_lookup[i].tracker_list, 1773 list_add(&ioc->internal_lookup[i].tracker_list,
1774 &ioc->internal_free_list); 1774 &ioc->internal_free_list);
1775 } 1775 }
1776 spin_unlock_irqrestore(&ioc->scsi_lookup_lock, flags); 1776 spin_unlock_irqrestore(&ioc->scsi_lookup_lock, flags);