[SCSI] mpt2sas: Calulate the Reply post queue depth calculation as per the MPI spec
authorSreekanth Reddy <Sreekanth.Reddy@lsi.com>
Fri, 1 Feb 2013 16:32:04 +0000 (22:02 +0530)
committerJames Bottomley <JBottomley@Parallels.com>
Mon, 24 Jun 2013 19:52:47 +0000 (12:52 -0700)
[jejb: checkpatch fixes]
Signed-off-by: Sreekanth Reddy <Sreekanth.Reddy@lsi.com>
Signed-off-by: James Bottomley <JBottomley@Parallels.com>
drivers/scsi/mpt2sas/mpt2sas_base.c

index 8bb1fe96f21eaaa94b7910beb727add8d43f0083..ccd6d5a97ec31c17caa0b20b855c22077c4314df 100644 (file)
@@ -2503,23 +2503,25 @@ _base_allocate_memory_pools(struct MPT2SAS_ADAPTER *ioc,  int sleep_flag)
        /* reply free queue sizing - taking into account for 64 FW events */
        ioc->reply_free_queue_depth = ioc->hba_queue_depth + 64;
 
+       /* calculate reply descriptor post queue depth */
+       ioc->reply_post_queue_depth = ioc->hba_queue_depth +
+                                       ioc->reply_free_queue_depth +  1;
        /* align the reply post queue on the next 16 count boundary */
-       if (!ioc->reply_free_queue_depth % 16)
-               ioc->reply_post_queue_depth = ioc->reply_free_queue_depth + 16;
-       else
-               ioc->reply_post_queue_depth = ioc->reply_free_queue_depth +
-                               32 - (ioc->reply_free_queue_depth % 16);
+       if (ioc->reply_post_queue_depth % 16)
+               ioc->reply_post_queue_depth += 16 -
+                       (ioc->reply_post_queue_depth % 16);
+
+
        if (ioc->reply_post_queue_depth >
            facts->MaxReplyDescriptorPostQueueDepth) {
-               ioc->reply_post_queue_depth = min_t(u16,
-                   (facts->MaxReplyDescriptorPostQueueDepth -
-                   (facts->MaxReplyDescriptorPostQueueDepth % 16)),
-                   (ioc->hba_queue_depth - (ioc->hba_queue_depth % 16)));
-               ioc->reply_free_queue_depth = ioc->reply_post_queue_depth - 16;
-               ioc->hba_queue_depth = ioc->reply_free_queue_depth - 64;
+               ioc->reply_post_queue_depth =
+                       facts->MaxReplyDescriptorPostQueueDepth -
+                   (facts->MaxReplyDescriptorPostQueueDepth % 16);
+               ioc->hba_queue_depth =
+                       ((ioc->reply_post_queue_depth - 64) / 2) - 1;
+               ioc->reply_free_queue_depth = ioc->hba_queue_depth + 64;
        }
 
-
        dinitprintk(ioc, printk(MPT2SAS_INFO_FMT "scatter gather: "
            "sge_in_main_msg(%d), sge_per_chain(%d), sge_per_io(%d), "
            "chains_per_io(%d)\n", ioc->name, ioc->max_sges_in_main_message,