scsi: mpt3sas: Fix ReplyPostFree pool allocation
authorSreekanth Reddy <sreekanth.reddy@broadcom.com>
Mon, 1 Feb 2021 14:15:22 +0000 (19:45 +0530)
committerMartin K. Petersen <martin.petersen@oracle.com>
Tue, 9 Feb 2021 02:53:12 +0000 (21:53 -0500)
Currently the driver allocates memory for ReplyPostFree queues in chunks of
16. In resource constrained environments--such as VM with 1 GB RAM and 2
CPUs--memory allocation for ReplyPostFree pools may fail because the driver
tries to allocate a memory for 16 ReplyPostFree queues even though the
actual number needed is 2.

Change the driver to allocate memory for only the actual number of queues
needed if the ReplyPostFree queue count is less than 16.

Link: https://lore.kernel.org/r/20210201141522.25363-1-sreekanth.reddy@broadcom.com
Signed-off-by: Sreekanth Reddy <sreekanth.reddy@broadcom.com>
Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
drivers/scsi/mpt3sas/mpt3sas_base.c

index f5582c8..e2455b9 100644 (file)
@@ -5641,7 +5641,8 @@ _base_allocate_memory_pools(struct MPT3SAS_ADAPTER *ioc)
        reply_post_free_sz = ioc->reply_post_queue_depth *
            sizeof(Mpi2DefaultReplyDescriptor_t);
        rdpq_sz = reply_post_free_sz * RDPQ_MAX_INDEX_IN_ONE_CHUNK;
-       if (_base_is_controller_msix_enabled(ioc) && !ioc->rdpq_array_enable)
+       if ((_base_is_controller_msix_enabled(ioc) && !ioc->rdpq_array_enable)
+           || (ioc->reply_queue_count < RDPQ_MAX_INDEX_IN_ONE_CHUNK))
                rdpq_sz = reply_post_free_sz * ioc->reply_queue_count;
        ret = base_alloc_rdpq_dma_pool(ioc, rdpq_sz);
        if (ret == -EAGAIN) {