[SCSI] mpt2sas: Added SCSIIO, Internal and high priority memory pools to support multiple TM
1) create a pool of high priority message frames in the region of memory between message frames and chains. The modifications are in _base_allocate_memory_pools. Also create a seperate pool of memory for internal commands located near the same region of memory. The pool of high priority message frames is restriced by the facts->HighPriorityCredit. 2) Create additional API for accessing request message frames. New function mpt2sas_base_get_smid_hpr is for highpriority request. New function mpt2sas_base_get_smid_scsiio for SCSI_IO, passing in the scsi command pointer. The mpt2sas_base_get_smid function is for requesting internal commands. 3) Added new function _base_get_cb_idx to obtain the callback index from one of the three pools of request message frames. 4) Removed wrapper functions _scsih_scsi_lookup_set and _scsih_scsi_lookup_getclear. These were removed because this handling was moved into mpt2sas_base_get_smid_scsiio and mpt2sas_base_free_smid. 5) The function mpt2sas_base_free_smid is modified so the request message frames are put back on one of the three pools of request message frames. Signed-off-by: Kashyap Desai <kashyap.desai@lsi.com> Signed-off-by: James Bottomley <James.Bottomley@suse.de>
This commit is contained in:
committed by
James Bottomley
parent
19d3ebe3d5
commit
595bb0bd62
@@ -509,7 +509,7 @@ _ctl_set_task_mid(struct MPT2SAS_ADAPTER *ioc, struct mpt2_ioctl_command *karg,
|
||||
|
||||
handle = le16_to_cpu(tm_request->DevHandle);
|
||||
spin_lock_irqsave(&ioc->scsi_lookup_lock, flags);
|
||||
for (i = ioc->request_depth; i && !found; i--) {
|
||||
for (i = ioc->scsiio_depth; i && !found; i--) {
|
||||
scmd = ioc->scsi_lookup[i - 1].scmd;
|
||||
if (scmd == NULL || scmd->device == NULL ||
|
||||
scmd->device->hostdata == NULL)
|
||||
@@ -616,7 +616,7 @@ _ctl_do_mpt_command(struct MPT2SAS_ADAPTER *ioc,
|
||||
printk(MPT2SAS_INFO_FMT "%s: ioc is operational\n",
|
||||
ioc->name, __func__);
|
||||
|
||||
smid = mpt2sas_base_get_smid(ioc, ioc->ctl_cb_idx);
|
||||
smid = mpt2sas_base_get_smid_scsiio(ioc, ioc->ctl_cb_idx, NULL);
|
||||
if (!smid) {
|
||||
printk(MPT2SAS_ERR_FMT "%s: failed obtaining a smid\n",
|
||||
ioc->name, __func__);
|
||||
|
Reference in New Issue
Block a user