From: Dan Carpenter <dan.carpenter@oracle.com>
To: suganath-prabu.subramani@broadcom.com
Cc: MPT-FusionLinux.pdl@broadcom.com, linux-scsi@vger.kernel.org
Subject: [bug report] scsi: mpt3sas: Handle RDPQ DMA allocation in same 4G region
Date: Wed, 29 Apr 2020 17:21:49 +0300 [thread overview]
Message-ID: <20200429142149.GA823478@mwanda> (raw)
Hello Suganath Prabu,
The patch 8012209eb26b: "scsi: mpt3sas: Handle RDPQ DMA allocation in
same 4G region" from Apr 23, 2020, leads to the following static
checker warning:
drivers/scsi/mpt3sas/mpt3sas_base.c:5256 _base_allocate_memory_pools()
warn: 'ioc->hpr_lookup' double freed
drivers/scsi/mpt3sas/mpt3sas_base.c:5256 _base_allocate_memory_pools()
warn: 'ioc->internal_lookup' double freed
drivers/scsi/mpt3sas/mpt3sas_base.c
5202 rdpq_sz = reply_post_free_sz * ioc->reply_queue_count;
5203 ret = base_alloc_rdpq_dma_pool(ioc, rdpq_sz);
5204 if (ret == -EAGAIN) {
5205 /*
5206 * Free allocated bad RDPQ memory pools.
5207 * Change dma coherent mask to 32 bit and reallocate RDPQ
5208 */
5209 _base_release_memory_pools(ioc);
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
We added this free here which frees a whole ton of different stuff.
5210 ioc->use_32bit_dma = true;
5211 if (_base_config_dma_addressing(ioc, ioc->pdev) != 0) {
5212 ioc_err(ioc,
5213 "32 DMA mask failed %s\n", pci_name(ioc->pdev));
5214 return -ENODEV;
5215 }
5216 if (base_alloc_rdpq_dma_pool(ioc, rdpq_sz))
5217 return -ENOMEM;
5218 } else if (ret == -ENOMEM)
5219 return -ENOMEM;
5220 total_sz = rdpq_sz * (!ioc->rdpq_array_enable ? 1 :
5221 DIV_ROUND_UP(ioc->reply_queue_count, RDPQ_MAX_INDEX_IN_ONE_CHUNK));
5222 ioc->scsiio_depth = ioc->hba_queue_depth -
5223 ioc->hi_priority_depth - ioc->internal_depth;
5224
5225 /* set the scsi host can_queue depth
5226 * with some internal commands that could be outstanding
5227 */
5228 ioc->shost->can_queue = ioc->scsiio_depth - INTERNAL_SCSIIO_CMDS_COUNT;
5229 dinitprintk(ioc,
5230 ioc_info(ioc, "scsi host: can_queue depth (%d)\n",
5231 ioc->shost->can_queue));
5232
5233 /* contiguous pool for request and chains, 16 byte align, one extra "
5234 * "frame for smid=0
5235 */
5236 ioc->chain_depth = ioc->chains_needed_per_io * ioc->scsiio_depth;
5237 sz = ((ioc->scsiio_depth + 1) * ioc->request_sz);
5238
5239 /* hi-priority queue */
5240 sz += (ioc->hi_priority_depth * ioc->request_sz);
5241
5242 /* internal queue */
5243 sz += (ioc->internal_depth * ioc->request_sz);
5244
5245 ioc->request_dma_sz = sz;
5246 ioc->request = dma_alloc_coherent(&ioc->pdev->dev, sz,
5247 &ioc->request_dma, GFP_KERNEL);
5248 if (!ioc->request) {
5249 ioc_err(ioc, "request pool: dma_alloc_coherent failed: hba_depth(%d), chains_per_io(%d), frame_sz(%d), total(%d kB)\n",
5250 ioc->hba_queue_depth, ioc->chains_needed_per_io,
5251 ioc->request_sz, sz / 1024);
5252 if (ioc->scsiio_depth < MPT3SAS_SAS_QUEUE_DEPTH)
5253 goto out;
5254 retry_sz = 64;
5255 ioc->hba_queue_depth -= retry_sz;
5256 _base_release_memory_pools(ioc);
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
And leads to some double frees here.
5257 goto retry_allocation;
5258 }
5259 memset(ioc->request, 0, sz);
5260
5261 if (retry_sz)
5262 ioc_err(ioc, "request pool: dma_alloc_coherent succeed: hba_depth(%d), chains_per_io(%d), frame_sz(%d), total(%d kb)\n",
5263 ioc->hba_queue_depth, ioc->chains_needed_per_io,
5264 ioc->request_sz, sz / 1024);
5265
regards,
dan carpenter
next reply other threads:[~2020-04-29 14:22 UTC|newest]
Thread overview: 3+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-04-29 14:21 Dan Carpenter [this message]
2020-05-01 9:53 ` [bug report] scsi: mpt3sas: Handle RDPQ DMA allocation in same 4G region Dan Carpenter
2020-05-04 11:39 ` Suganath Prabu Subramani
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20200429142149.GA823478@mwanda \
--to=dan.carpenter@oracle.com \
--cc=MPT-FusionLinux.pdl@broadcom.com \
--cc=linux-scsi@vger.kernel.org \
--cc=suganath-prabu.subramani@broadcom.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox