diff options
author | Matthew Wilcox <matthew.r.wilcox@intel.com> | 2014-03-27 16:40:34 -0400 |
---|---|---|
committer | Christoph Hellwig <hch@lst.de> | 2014-05-28 12:13:24 -0400 |
commit | 049b3e81d79b1957c0be231d66a98b5715b347e4 (patch) | |
tree | 57af9a39717582e37d9ed17be3a1ebc551d527ab /drivers/scsi/mpt2sas | |
parent | 90f951edb702c887ea392aee8a3e42bdabd27803 (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.c | 8 |
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); |