Hello,

Please lines 5025 and 5038.

julia

---------- Forwarded message ----------
Date: Tue, 7 Jul 2020 04:54:19 +0800
From: kernel test robot <l...@intel.com>
To: kbu...@lists.01.org
Cc: l...@intel.com, Julia Lawall <julia.law...@lip6.fr>
Subject: drivers/scsi/mpt3sas/mpt3sas_base.c:5025:16-34: WARNING:
    dma_alloc_coherent use in ioc -> request already zeroes out memory,
    so memset is not needed

CC: kbuild-...@lists.01.org
CC: linux-kernel@vger.kernel.org
TO: Suganath Prabu <suganath-prabu.subram...@broadcom.com>
CC: "Martin K. Petersen" <martin.peter...@oracle.com>

tree:   https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git 
master
head:   5c82ec00dd00c7a2b02d4b42cf59ae87592cb75f
commit: e224e03b0c6a2381ed1ea5325c846582d87d6fae scsi: mpt3sas: memset request 
frame before reusing
date:   11 months ago
:::::: branch date: 4 hours ago
:::::: commit date: 11 months ago
config: ia64-randconfig-c024-20200706 (attached as .config)
compiler: ia64-linux-gcc (GCC) 9.3.0

If you fix the issue, kindly add following tag as appropriate
Reported-by: kernel test robot <l...@intel.com>
Reported-by: Julia Lawall <julia.law...@lip6.fr>


coccinelle warnings: (new ones prefixed by >>)

>> drivers/scsi/mpt3sas/mpt3sas_base.c:5025:16-34: WARNING: dma_alloc_coherent 
>> use in ioc -> request already zeroes out memory,  so memset is not needed

# 
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=e224e03b0c6a2381ed1ea5325c846582d87d6fae
git remote add linus 
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
git remote update linus
git checkout e224e03b0c6a2381ed1ea5325c846582d87d6fae
vim +5025 drivers/scsi/mpt3sas/mpt3sas_base.c

e21fef6f331b39 Chaitra P B              2018-04-24  4781
f92363d1235949 Sreekanth Reddy          2012-11-30  4782  /**
f92363d1235949 Sreekanth Reddy          2012-11-30  4783   * 
_base_allocate_memory_pools - allocate start of day memory pools
f92363d1235949 Sreekanth Reddy          2012-11-30  4784   * @ioc: per adapter 
object
f92363d1235949 Sreekanth Reddy          2012-11-30  4785   *
4beb4867f049ae Bart Van Assche          2018-06-15  4786   * Return: 0 success, 
anything else error.
f92363d1235949 Sreekanth Reddy          2012-11-30  4787   */
f92363d1235949 Sreekanth Reddy          2012-11-30  4788  static int
98c56ad32c33f0 Calvin Owens             2016-07-28  4789  
_base_allocate_memory_pools(struct MPT3SAS_ADAPTER *ioc)
f92363d1235949 Sreekanth Reddy          2012-11-30  4790  {
f92363d1235949 Sreekanth Reddy          2012-11-30  4791        struct 
mpt3sas_facts *facts;
f92363d1235949 Sreekanth Reddy          2012-11-30  4792        u16 
max_sge_elements;
f92363d1235949 Sreekanth Reddy          2012-11-30  4793        u16 
chains_needed_per_io;
cd33223b59a493 Chaitra P B              2018-04-24  4794        u32 sz, 
total_sz, reply_post_free_sz, reply_post_free_array_sz;
f92363d1235949 Sreekanth Reddy          2012-11-30  4795        u32 retry_sz;
016d5c35e27824 Suganath Prabu Subramani 2017-10-31  4796        u16 
max_request_credit, nvme_blocks_needed;
f92363d1235949 Sreekanth Reddy          2012-11-30  4797        unsigned short 
sg_tablesize;
f92363d1235949 Sreekanth Reddy          2012-11-30  4798        u16 sge_size;
93204b782a88f2 Chaitra P B              2018-04-24  4799        int i, j;
93204b782a88f2 Chaitra P B              2018-04-24  4800        struct 
chain_tracker *ct;
f92363d1235949 Sreekanth Reddy          2012-11-30  4801
919d8a3f3fef99 Joe Perches              2018-09-17  4802        
dinitprintk(ioc, ioc_info(ioc, "%s\n", __func__));
f92363d1235949 Sreekanth Reddy          2012-11-30  4803
f92363d1235949 Sreekanth Reddy          2012-11-30  4804
f92363d1235949 Sreekanth Reddy          2012-11-30  4805        retry_sz = 0;
f92363d1235949 Sreekanth Reddy          2012-11-30  4806        facts = 
&ioc->facts;
f92363d1235949 Sreekanth Reddy          2012-11-30  4807
f92363d1235949 Sreekanth Reddy          2012-11-30  4808        /* command line 
tunables for max sgl entries */
f92363d1235949 Sreekanth Reddy          2012-11-30  4809        if 
(max_sgl_entries != -1)
f92363d1235949 Sreekanth Reddy          2012-11-30  4810                
sg_tablesize = max_sgl_entries;
471ef9d4e49825 Sreekanth Reddy          2015-11-11  4811        else {
471ef9d4e49825 Sreekanth Reddy          2015-11-11  4812                if 
(ioc->hba_mpi_version_belonged == MPI2_VERSION)
471ef9d4e49825 Sreekanth Reddy          2015-11-11  4813                        
sg_tablesize = MPT2SAS_SG_DEPTH;
f92363d1235949 Sreekanth Reddy          2012-11-30  4814                else
f92363d1235949 Sreekanth Reddy          2012-11-30  4815                        
sg_tablesize = MPT3SAS_SG_DEPTH;
471ef9d4e49825 Sreekanth Reddy          2015-11-11  4816        }
f92363d1235949 Sreekanth Reddy          2012-11-30  4817
06f5f976a6ee0f Sreekanth Reddy          2017-10-10  4818        /* max sgl 
entries <= MPT_KDUMP_MIN_PHYS_SEGMENTS in KDUMP mode */
06f5f976a6ee0f Sreekanth Reddy          2017-10-10  4819        if 
(reset_devices)
06f5f976a6ee0f Sreekanth Reddy          2017-10-10  4820                
sg_tablesize = min_t(unsigned short, sg_tablesize,
06f5f976a6ee0f Sreekanth Reddy          2017-10-10  4821                   
MPT_KDUMP_MIN_PHYS_SEGMENTS);
06f5f976a6ee0f Sreekanth Reddy          2017-10-10  4822
0448f0195124e3 Suganath Prabu Subramani 2018-02-07  4823        if 
(ioc->is_mcpu_endpoint)
0448f0195124e3 Suganath Prabu Subramani 2018-02-07  4824                
ioc->shost->sg_tablesize = MPT_MIN_PHYS_SEGMENTS;
0448f0195124e3 Suganath Prabu Subramani 2018-02-07  4825        else {
8a7e4c24e08fce Sreekanth Reddy          2015-11-11  4826                if 
(sg_tablesize < MPT_MIN_PHYS_SEGMENTS)
8a7e4c24e08fce Sreekanth Reddy          2015-11-11  4827                        
sg_tablesize = MPT_MIN_PHYS_SEGMENTS;
8a7e4c24e08fce Sreekanth Reddy          2015-11-11  4828                else if 
(sg_tablesize > MPT_MAX_PHYS_SEGMENTS) {
ad666a0f41d98e Sreekanth Reddy          2015-01-12  4829                        
sg_tablesize = min_t(unsigned short, sg_tablesize,
65e8617fba1773 Ming Lin                 2016-04-04  4830                        
                SG_MAX_SEGMENTS);
919d8a3f3fef99 Joe Perches              2018-09-17  4831                        
ioc_warn(ioc, "sg_tablesize(%u) is bigger than kernel defined 
SG_CHUNK_SIZE(%u)\n",
8a7e4c24e08fce Sreekanth Reddy          2015-11-11  4832                        
         sg_tablesize, MPT_MAX_PHYS_SEGMENTS);
ad666a0f41d98e Sreekanth Reddy          2015-01-12  4833                }
f92363d1235949 Sreekanth Reddy          2012-11-30  4834                
ioc->shost->sg_tablesize = sg_tablesize;
0448f0195124e3 Suganath Prabu Subramani 2018-02-07  4835        }
f92363d1235949 Sreekanth Reddy          2012-11-30  4836
fd0331b32826dd Suganath prabu Subramani 2016-01-28  4837        
ioc->internal_depth = min_t(int, (facts->HighPriorityCredit + (5)),
fd0331b32826dd Suganath prabu Subramani 2016-01-28  4838                
(facts->RequestCredit / 4));
fd0331b32826dd Suganath prabu Subramani 2016-01-28  4839        if 
(ioc->internal_depth < INTERNAL_CMDS_COUNT) {
fd0331b32826dd Suganath prabu Subramani 2016-01-28  4840                if 
(facts->RequestCredit <= (INTERNAL_CMDS_COUNT +
fd0331b32826dd Suganath prabu Subramani 2016-01-28  4841                        
        INTERNAL_SCSIIO_CMDS_COUNT)) {
919d8a3f3fef99 Joe Perches              2018-09-17  4842                        
ioc_err(ioc, "IOC doesn't have enough Request Credits, it has just %d number of 
credits\n",
919d8a3f3fef99 Joe Perches              2018-09-17  4843                        
        facts->RequestCredit);
fd0331b32826dd Suganath prabu Subramani 2016-01-28  4844                        
return -ENOMEM;
fd0331b32826dd Suganath prabu Subramani 2016-01-28  4845                }
fd0331b32826dd Suganath prabu Subramani 2016-01-28  4846                
ioc->internal_depth = 10;
fd0331b32826dd Suganath prabu Subramani 2016-01-28  4847        }
fd0331b32826dd Suganath prabu Subramani 2016-01-28  4848
fd0331b32826dd Suganath prabu Subramani 2016-01-28  4849        
ioc->hi_priority_depth = ioc->internal_depth - (5);
f92363d1235949 Sreekanth Reddy          2012-11-30  4850        /* command line 
tunables  for max controller queue depth */
f92363d1235949 Sreekanth Reddy          2012-11-30  4851        if 
(max_queue_depth != -1 && max_queue_depth != 0) {
f92363d1235949 Sreekanth Reddy          2012-11-30  4852                
max_request_credit = min_t(u16, max_queue_depth +
fd0331b32826dd Suganath prabu Subramani 2016-01-28  4853                        
ioc->internal_depth, facts->RequestCredit);
f92363d1235949 Sreekanth Reddy          2012-11-30  4854                if 
(max_request_credit > MAX_HBA_QUEUE_DEPTH)
f92363d1235949 Sreekanth Reddy          2012-11-30  4855                        
max_request_credit =  MAX_HBA_QUEUE_DEPTH;
06f5f976a6ee0f Sreekanth Reddy          2017-10-10  4856        } else if 
(reset_devices)
06f5f976a6ee0f Sreekanth Reddy          2017-10-10  4857                
max_request_credit = min_t(u16, facts->RequestCredit,
06f5f976a6ee0f Sreekanth Reddy          2017-10-10  4858                    
(MPT3SAS_KDUMP_SCSI_IO_DEPTH + ioc->internal_depth));
06f5f976a6ee0f Sreekanth Reddy          2017-10-10  4859        else
f92363d1235949 Sreekanth Reddy          2012-11-30  4860                
max_request_credit = min_t(u16, facts->RequestCredit,
f92363d1235949 Sreekanth Reddy          2012-11-30  4861                    
MAX_HBA_QUEUE_DEPTH);
f92363d1235949 Sreekanth Reddy          2012-11-30  4862
fd0331b32826dd Suganath prabu Subramani 2016-01-28  4863        /* Firmware 
maintains additional facts->HighPriorityCredit number of
fd0331b32826dd Suganath prabu Subramani 2016-01-28  4864         * credits for 
HiPriprity Request messages, so hba queue depth will be
fd0331b32826dd Suganath prabu Subramani 2016-01-28  4865         * sum of 
max_request_credit and high priority queue depth.
fd0331b32826dd Suganath prabu Subramani 2016-01-28  4866         */
fd0331b32826dd Suganath prabu Subramani 2016-01-28  4867        
ioc->hba_queue_depth = max_request_credit + ioc->hi_priority_depth;
f92363d1235949 Sreekanth Reddy          2012-11-30  4868
f92363d1235949 Sreekanth Reddy          2012-11-30  4869        /* request 
frame size */
f92363d1235949 Sreekanth Reddy          2012-11-30  4870        ioc->request_sz 
= facts->IOCRequestFrameSize * 4;
f92363d1235949 Sreekanth Reddy          2012-11-30  4871
f92363d1235949 Sreekanth Reddy          2012-11-30  4872        /* reply frame 
size */
f92363d1235949 Sreekanth Reddy          2012-11-30  4873        ioc->reply_sz = 
facts->ReplyFrameSize * 4;
f92363d1235949 Sreekanth Reddy          2012-11-30  4874
ebb3024e2fd557 Suganath prabu Subramani 2016-01-28  4875        /* chain 
segment size */
ebb3024e2fd557 Suganath prabu Subramani 2016-01-28  4876        if 
(ioc->hba_mpi_version_belonged != MPI2_VERSION) {
ebb3024e2fd557 Suganath prabu Subramani 2016-01-28  4877                if 
(facts->IOCMaxChainSegmentSize)
ebb3024e2fd557 Suganath prabu Subramani 2016-01-28  4878                        
ioc->chain_segment_sz =
ebb3024e2fd557 Suganath prabu Subramani 2016-01-28  4879                        
                facts->IOCMaxChainSegmentSize *
ebb3024e2fd557 Suganath prabu Subramani 2016-01-28  4880                        
                MAX_CHAIN_ELEMT_SZ;
ebb3024e2fd557 Suganath prabu Subramani 2016-01-28  4881                else
ebb3024e2fd557 Suganath prabu Subramani 2016-01-28  4882                /* set 
to 128 bytes size if IOCMaxChainSegmentSize is zero */
ebb3024e2fd557 Suganath prabu Subramani 2016-01-28  4883                        
ioc->chain_segment_sz = DEFAULT_NUM_FWCHAIN_ELEMTS *
ebb3024e2fd557 Suganath prabu Subramani 2016-01-28  4884                        
                            MAX_CHAIN_ELEMT_SZ;
ebb3024e2fd557 Suganath prabu Subramani 2016-01-28  4885        } else
ebb3024e2fd557 Suganath prabu Subramani 2016-01-28  4886                
ioc->chain_segment_sz = ioc->request_sz;
ebb3024e2fd557 Suganath prabu Subramani 2016-01-28  4887
f92363d1235949 Sreekanth Reddy          2012-11-30  4888        /* calculate 
the max scatter element size */
f92363d1235949 Sreekanth Reddy          2012-11-30  4889        sge_size = 
max_t(u16, ioc->sge_size, ioc->sge_size_ieee);
f92363d1235949 Sreekanth Reddy          2012-11-30  4890
f92363d1235949 Sreekanth Reddy          2012-11-30  4891   retry_allocation:
f92363d1235949 Sreekanth Reddy          2012-11-30  4892        total_sz = 0;
f92363d1235949 Sreekanth Reddy          2012-11-30  4893        /* calculate 
number of sg elements left over in the 1st frame */
f92363d1235949 Sreekanth Reddy          2012-11-30  4894        
max_sge_elements = ioc->request_sz - ((sizeof(Mpi2SCSIIORequest_t) -
f92363d1235949 Sreekanth Reddy          2012-11-30  4895            
sizeof(Mpi2SGEIOUnion_t)) + sge_size);
f92363d1235949 Sreekanth Reddy          2012-11-30  4896        
ioc->max_sges_in_main_message = max_sge_elements/sge_size;
f92363d1235949 Sreekanth Reddy          2012-11-30  4897
f92363d1235949 Sreekanth Reddy          2012-11-30  4898        /* now do the 
same for a chain buffer */
ebb3024e2fd557 Suganath prabu Subramani 2016-01-28  4899        
max_sge_elements = ioc->chain_segment_sz - sge_size;
f92363d1235949 Sreekanth Reddy          2012-11-30  4900        
ioc->max_sges_in_chain_message = max_sge_elements/sge_size;
f92363d1235949 Sreekanth Reddy          2012-11-30  4901
f92363d1235949 Sreekanth Reddy          2012-11-30  4902        /*
f92363d1235949 Sreekanth Reddy          2012-11-30  4903         *  
MPT3SAS_SG_DEPTH = CONFIG_FUSION_MAX_SGE
f92363d1235949 Sreekanth Reddy          2012-11-30  4904         */
f92363d1235949 Sreekanth Reddy          2012-11-30  4905        
chains_needed_per_io = ((ioc->shost->sg_tablesize -
f92363d1235949 Sreekanth Reddy          2012-11-30  4906           
ioc->max_sges_in_main_message)/ioc->max_sges_in_chain_message)
f92363d1235949 Sreekanth Reddy          2012-11-30  4907            + 1;
f92363d1235949 Sreekanth Reddy          2012-11-30  4908        if 
(chains_needed_per_io > facts->MaxChainDepth) {
f92363d1235949 Sreekanth Reddy          2012-11-30  4909                
chains_needed_per_io = facts->MaxChainDepth;
f92363d1235949 Sreekanth Reddy          2012-11-30  4910                
ioc->shost->sg_tablesize = min_t(u16,
f92363d1235949 Sreekanth Reddy          2012-11-30  4911                
ioc->max_sges_in_main_message + (ioc->max_sges_in_chain_message
f92363d1235949 Sreekanth Reddy          2012-11-30  4912                * 
chains_needed_per_io), ioc->shost->sg_tablesize);
f92363d1235949 Sreekanth Reddy          2012-11-30  4913        }
f92363d1235949 Sreekanth Reddy          2012-11-30  4914        
ioc->chains_needed_per_io = chains_needed_per_io;
f92363d1235949 Sreekanth Reddy          2012-11-30  4915
f92363d1235949 Sreekanth Reddy          2012-11-30  4916        /* reply free 
queue sizing - taking into account for 64 FW events */
f92363d1235949 Sreekanth Reddy          2012-11-30  4917        
ioc->reply_free_queue_depth = ioc->hba_queue_depth + 64;
f92363d1235949 Sreekanth Reddy          2012-11-30  4918
0448f0195124e3 Suganath Prabu Subramani 2018-02-07  4919        /* mCPU manage 
single counters for simplicity */
0448f0195124e3 Suganath Prabu Subramani 2018-02-07  4920        if 
(ioc->is_mcpu_endpoint)
0448f0195124e3 Suganath Prabu Subramani 2018-02-07  4921                
ioc->reply_post_queue_depth = ioc->reply_free_queue_depth;
0448f0195124e3 Suganath Prabu Subramani 2018-02-07  4922        else {
f92363d1235949 Sreekanth Reddy          2012-11-30  4923                /* 
calculate reply descriptor post queue depth */
f92363d1235949 Sreekanth Reddy          2012-11-30  4924                
ioc->reply_post_queue_depth = ioc->hba_queue_depth +
f92363d1235949 Sreekanth Reddy          2012-11-30  4925                        
ioc->reply_free_queue_depth +  1;
f92363d1235949 Sreekanth Reddy          2012-11-30  4926                /* 
align the reply post queue on the next 16 count boundary */
f92363d1235949 Sreekanth Reddy          2012-11-30  4927                if 
(ioc->reply_post_queue_depth % 16)
f92363d1235949 Sreekanth Reddy          2012-11-30  4928                        
ioc->reply_post_queue_depth += 16 -
f92363d1235949 Sreekanth Reddy          2012-11-30  4929                        
        (ioc->reply_post_queue_depth % 16);
0448f0195124e3 Suganath Prabu Subramani 2018-02-07  4930        }
f92363d1235949 Sreekanth Reddy          2012-11-30  4931
f92363d1235949 Sreekanth Reddy          2012-11-30  4932        if 
(ioc->reply_post_queue_depth >
f92363d1235949 Sreekanth Reddy          2012-11-30  4933            
facts->MaxReplyDescriptorPostQueueDepth) {
f92363d1235949 Sreekanth Reddy          2012-11-30  4934                
ioc->reply_post_queue_depth =
f92363d1235949 Sreekanth Reddy          2012-11-30  4935                        
        facts->MaxReplyDescriptorPostQueueDepth -
f92363d1235949 Sreekanth Reddy          2012-11-30  4936                    
(facts->MaxReplyDescriptorPostQueueDepth % 16);
f92363d1235949 Sreekanth Reddy          2012-11-30  4937                
ioc->hba_queue_depth =
f92363d1235949 Sreekanth Reddy          2012-11-30  4938                        
        ((ioc->reply_post_queue_depth - 64) / 2) - 1;
f92363d1235949 Sreekanth Reddy          2012-11-30  4939                
ioc->reply_free_queue_depth = ioc->hba_queue_depth + 64;
f92363d1235949 Sreekanth Reddy          2012-11-30  4940        }
f92363d1235949 Sreekanth Reddy          2012-11-30  4941
919d8a3f3fef99 Joe Perches              2018-09-17  4942        dinitprintk(ioc,
919d8a3f3fef99 Joe Perches              2018-09-17  4943                    
ioc_info(ioc, "scatter gather: sge_in_main_msg(%d), sge_per_chain(%d), 
sge_per_io(%d), chains_per_io(%d)\n",
919d8a3f3fef99 Joe Perches              2018-09-17  4944                        
     ioc->max_sges_in_main_message,
919d8a3f3fef99 Joe Perches              2018-09-17  4945                        
     ioc->max_sges_in_chain_message,
919d8a3f3fef99 Joe Perches              2018-09-17  4946                        
     ioc->shost->sg_tablesize,
f92363d1235949 Sreekanth Reddy          2012-11-30  4947                        
     ioc->chains_needed_per_io));
f92363d1235949 Sreekanth Reddy          2012-11-30  4948
9b05c91ae7fbff Sreekanth Reddy          2014-09-12  4949        /* reply post 
queue, 16 byte align */
9b05c91ae7fbff Sreekanth Reddy          2014-09-12  4950        
reply_post_free_sz = ioc->reply_post_queue_depth *
9b05c91ae7fbff Sreekanth Reddy          2014-09-12  4951            
sizeof(Mpi2DefaultReplyDescriptor_t);
9b05c91ae7fbff Sreekanth Reddy          2014-09-12  4952
9b05c91ae7fbff Sreekanth Reddy          2014-09-12  4953        sz = 
reply_post_free_sz;
9b05c91ae7fbff Sreekanth Reddy          2014-09-12  4954        if 
(_base_is_controller_msix_enabled(ioc) && !ioc->rdpq_array_enable)
9b05c91ae7fbff Sreekanth Reddy          2014-09-12  4955                sz *= 
ioc->reply_queue_count;
9b05c91ae7fbff Sreekanth Reddy          2014-09-12  4956
9b05c91ae7fbff Sreekanth Reddy          2014-09-12  4957        ioc->reply_post 
= kcalloc((ioc->rdpq_array_enable) ?
9b05c91ae7fbff Sreekanth Reddy          2014-09-12  4958            
(ioc->reply_queue_count):1,
9b05c91ae7fbff Sreekanth Reddy          2014-09-12  4959            
sizeof(struct reply_post_struct), GFP_KERNEL);
9b05c91ae7fbff Sreekanth Reddy          2014-09-12  4960
9b05c91ae7fbff Sreekanth Reddy          2014-09-12  4961        if 
(!ioc->reply_post) {
919d8a3f3fef99 Joe Perches              2018-09-17  4962                
ioc_err(ioc, "reply_post_free pool: kcalloc failed\n");
9b05c91ae7fbff Sreekanth Reddy          2014-09-12  4963                goto 
out;
9b05c91ae7fbff Sreekanth Reddy          2014-09-12  4964        }
e9d984182ab8e4 Romain Perier            2017-07-06  4965        
ioc->reply_post_free_dma_pool = dma_pool_create("reply_post_free pool",
e9d984182ab8e4 Romain Perier            2017-07-06  4966            
&ioc->pdev->dev, sz, 16, 0);
9b05c91ae7fbff Sreekanth Reddy          2014-09-12  4967        if 
(!ioc->reply_post_free_dma_pool) {
919d8a3f3fef99 Joe Perches              2018-09-17  4968                
ioc_err(ioc, "reply_post_free pool: dma_pool_create failed\n");
9b05c91ae7fbff Sreekanth Reddy          2014-09-12  4969                goto 
out;
9b05c91ae7fbff Sreekanth Reddy          2014-09-12  4970        }
9b05c91ae7fbff Sreekanth Reddy          2014-09-12  4971        i = 0;
9b05c91ae7fbff Sreekanth Reddy          2014-09-12  4972        do {
9b05c91ae7fbff Sreekanth Reddy          2014-09-12  4973                
ioc->reply_post[i].reply_post_free =
c39a4d75539393 Souptick Joarder         2018-10-02  4974                    
dma_pool_zalloc(ioc->reply_post_free_dma_pool,
9b05c91ae7fbff Sreekanth Reddy          2014-09-12  4975                    
GFP_KERNEL,
9b05c91ae7fbff Sreekanth Reddy          2014-09-12  4976                    
&ioc->reply_post[i].reply_post_free_dma);
9b05c91ae7fbff Sreekanth Reddy          2014-09-12  4977                if 
(!ioc->reply_post[i].reply_post_free) {
919d8a3f3fef99 Joe Perches              2018-09-17  4978                        
ioc_err(ioc, "reply_post_free pool: dma_pool_alloc failed\n");
9b05c91ae7fbff Sreekanth Reddy          2014-09-12  4979                        
goto out;
9b05c91ae7fbff Sreekanth Reddy          2014-09-12  4980                }
919d8a3f3fef99 Joe Perches              2018-09-17  4981                
dinitprintk(ioc,
919d8a3f3fef99 Joe Perches              2018-09-17  4982                        
    ioc_info(ioc, "reply post free pool (0x%p): depth(%d), element_size(%d), 
pool_size(%d kB)\n",
9b05c91ae7fbff Sreekanth Reddy          2014-09-12  4983                        
             ioc->reply_post[i].reply_post_free,
919d8a3f3fef99 Joe Perches              2018-09-17  4984                        
             ioc->reply_post_queue_depth,
919d8a3f3fef99 Joe Perches              2018-09-17  4985                        
             8, sz / 1024));
919d8a3f3fef99 Joe Perches              2018-09-17  4986                
dinitprintk(ioc,
919d8a3f3fef99 Joe Perches              2018-09-17  4987                        
    ioc_info(ioc, "reply_post_free_dma = (0x%llx)\n",
919d8a3f3fef99 Joe Perches              2018-09-17  4988                        
             (u64)ioc->reply_post[i].reply_post_free_dma));
9b05c91ae7fbff Sreekanth Reddy          2014-09-12  4989                
total_sz += sz;
9b05c91ae7fbff Sreekanth Reddy          2014-09-12  4990        } while 
(ioc->rdpq_array_enable && (++i < ioc->reply_queue_count));
9b05c91ae7fbff Sreekanth Reddy          2014-09-12  4991
9b05c91ae7fbff Sreekanth Reddy          2014-09-12  4992        if 
(ioc->dma_mask == 64) {
9b05c91ae7fbff Sreekanth Reddy          2014-09-12  4993                if 
(_base_change_consistent_dma_mask(ioc, ioc->pdev) != 0) {
919d8a3f3fef99 Joe Perches              2018-09-17  4994                        
ioc_warn(ioc, "no suitable consistent DMA mask for %s\n",
919d8a3f3fef99 Joe Perches              2018-09-17  4995                        
         pci_name(ioc->pdev));
9b05c91ae7fbff Sreekanth Reddy          2014-09-12  4996                        
goto out;
9b05c91ae7fbff Sreekanth Reddy          2014-09-12  4997                }
9b05c91ae7fbff Sreekanth Reddy          2014-09-12  4998        }
9b05c91ae7fbff Sreekanth Reddy          2014-09-12  4999
f92363d1235949 Sreekanth Reddy          2012-11-30  5000        
ioc->scsiio_depth = ioc->hba_queue_depth -
f92363d1235949 Sreekanth Reddy          2012-11-30  5001            
ioc->hi_priority_depth - ioc->internal_depth;
f92363d1235949 Sreekanth Reddy          2012-11-30  5002
f92363d1235949 Sreekanth Reddy          2012-11-30  5003        /* set the scsi 
host can_queue depth
f92363d1235949 Sreekanth Reddy          2012-11-30  5004         * with some 
internal commands that could be outstanding
f92363d1235949 Sreekanth Reddy          2012-11-30  5005         */
fd0331b32826dd Suganath prabu Subramani 2016-01-28  5006        
ioc->shost->can_queue = ioc->scsiio_depth - INTERNAL_SCSIIO_CMDS_COUNT;
919d8a3f3fef99 Joe Perches              2018-09-17  5007        dinitprintk(ioc,
919d8a3f3fef99 Joe Perches              2018-09-17  5008                    
ioc_info(ioc, "scsi host: can_queue depth (%d)\n",
919d8a3f3fef99 Joe Perches              2018-09-17  5009                        
     ioc->shost->can_queue));
f92363d1235949 Sreekanth Reddy          2012-11-30  5010
f92363d1235949 Sreekanth Reddy          2012-11-30  5011
f92363d1235949 Sreekanth Reddy          2012-11-30  5012        /* contiguous 
pool for request and chains, 16 byte align, one extra "
f92363d1235949 Sreekanth Reddy          2012-11-30  5013         * "frame for 
smid=0
f92363d1235949 Sreekanth Reddy          2012-11-30  5014         */
f92363d1235949 Sreekanth Reddy          2012-11-30  5015        
ioc->chain_depth = ioc->chains_needed_per_io * ioc->scsiio_depth;
f92363d1235949 Sreekanth Reddy          2012-11-30  5016        sz = 
((ioc->scsiio_depth + 1) * ioc->request_sz);
f92363d1235949 Sreekanth Reddy          2012-11-30  5017
f92363d1235949 Sreekanth Reddy          2012-11-30  5018        /* hi-priority 
queue */
f92363d1235949 Sreekanth Reddy          2012-11-30  5019        sz += 
(ioc->hi_priority_depth * ioc->request_sz);
f92363d1235949 Sreekanth Reddy          2012-11-30  5020
f92363d1235949 Sreekanth Reddy          2012-11-30  5021        /* internal 
queue */
f92363d1235949 Sreekanth Reddy          2012-11-30  5022        sz += 
(ioc->internal_depth * ioc->request_sz);
f92363d1235949 Sreekanth Reddy          2012-11-30  5023
f92363d1235949 Sreekanth Reddy          2012-11-30  5024        
ioc->request_dma_sz = sz;
1c2048bdc3f4ff Christoph Hellwig        2018-10-11 @5025        ioc->request = 
dma_alloc_coherent(&ioc->pdev->dev, sz,
1c2048bdc3f4ff Christoph Hellwig        2018-10-11  5026                        
&ioc->request_dma, GFP_KERNEL);
f92363d1235949 Sreekanth Reddy          2012-11-30  5027        if 
(!ioc->request) {
1c2048bdc3f4ff Christoph Hellwig        2018-10-11  5028                
ioc_err(ioc, "request pool: dma_alloc_coherent failed: hba_depth(%d), 
chains_per_io(%d), frame_sz(%d), total(%d kB)\n",
919d8a3f3fef99 Joe Perches              2018-09-17  5029                        
ioc->hba_queue_depth, ioc->chains_needed_per_io,
919d8a3f3fef99 Joe Perches              2018-09-17  5030                        
ioc->request_sz, sz / 1024);
f92363d1235949 Sreekanth Reddy          2012-11-30  5031                if 
(ioc->scsiio_depth < MPT3SAS_SAS_QUEUE_DEPTH)
f92363d1235949 Sreekanth Reddy          2012-11-30  5032                        
goto out;
fd0331b32826dd Suganath prabu Subramani 2016-01-28  5033                
retry_sz = 64;
fd0331b32826dd Suganath prabu Subramani 2016-01-28  5034                
ioc->hba_queue_depth -= retry_sz;
8ff045c92708a5 Suganath prabu Subramani 2016-02-18  5035                
_base_release_memory_pools(ioc);
f92363d1235949 Sreekanth Reddy          2012-11-30  5036                goto 
retry_allocation;
f92363d1235949 Sreekanth Reddy          2012-11-30  5037        }
e224e03b0c6a23 Suganath Prabu           2019-08-03  5038        
memset(ioc->request, 0, sz);
f92363d1235949 Sreekanth Reddy          2012-11-30  5039
f92363d1235949 Sreekanth Reddy          2012-11-30  5040        if (retry_sz)
1c2048bdc3f4ff Christoph Hellwig        2018-10-11  5041                
ioc_err(ioc, "request pool: dma_alloc_coherent succeed: hba_depth(%d), 
chains_per_io(%d), frame_sz(%d), total(%d kb)\n",
919d8a3f3fef99 Joe Perches              2018-09-17  5042                        
ioc->hba_queue_depth, ioc->chains_needed_per_io,
919d8a3f3fef99 Joe Perches              2018-09-17  5043                        
ioc->request_sz, sz / 1024);
f92363d1235949 Sreekanth Reddy          2012-11-30  5044
f92363d1235949 Sreekanth Reddy          2012-11-30  5045        /* hi-priority 
queue */
f92363d1235949 Sreekanth Reddy          2012-11-30  5046        
ioc->hi_priority = ioc->request + ((ioc->scsiio_depth + 1) *
f92363d1235949 Sreekanth Reddy          2012-11-30  5047            
ioc->request_sz);
f92363d1235949 Sreekanth Reddy          2012-11-30  5048        
ioc->hi_priority_dma = ioc->request_dma + ((ioc->scsiio_depth + 1) *
f92363d1235949 Sreekanth Reddy          2012-11-30  5049            
ioc->request_sz);
f92363d1235949 Sreekanth Reddy          2012-11-30  5050
f92363d1235949 Sreekanth Reddy          2012-11-30  5051        /* internal 
queue */
f92363d1235949 Sreekanth Reddy          2012-11-30  5052        ioc->internal = 
ioc->hi_priority + (ioc->hi_priority_depth *
f92363d1235949 Sreekanth Reddy          2012-11-30  5053            
ioc->request_sz);
f92363d1235949 Sreekanth Reddy          2012-11-30  5054        
ioc->internal_dma = ioc->hi_priority_dma + (ioc->hi_priority_depth *
f92363d1235949 Sreekanth Reddy          2012-11-30  5055            
ioc->request_sz);
f92363d1235949 Sreekanth Reddy          2012-11-30  5056
919d8a3f3fef99 Joe Perches              2018-09-17  5057        dinitprintk(ioc,
919d8a3f3fef99 Joe Perches              2018-09-17  5058                    
ioc_info(ioc, "request pool(0x%p): depth(%d), frame_size(%d), pool_size(%d 
kB)\n",
919d8a3f3fef99 Joe Perches              2018-09-17  5059                        
     ioc->request, ioc->hba_queue_depth,
919d8a3f3fef99 Joe Perches              2018-09-17  5060                        
     ioc->request_sz,
f92363d1235949 Sreekanth Reddy          2012-11-30  5061                        
     (ioc->hba_queue_depth * ioc->request_sz) / 1024));
f92363d1235949 Sreekanth Reddy          2012-11-30  5062
919d8a3f3fef99 Joe Perches              2018-09-17  5063        dinitprintk(ioc,
919d8a3f3fef99 Joe Perches              2018-09-17  5064                    
ioc_info(ioc, "request pool: dma(0x%llx)\n",
919d8a3f3fef99 Joe Perches              2018-09-17  5065                        
     (unsigned long long)ioc->request_dma));
f92363d1235949 Sreekanth Reddy          2012-11-30  5066        total_sz += sz;
f92363d1235949 Sreekanth Reddy          2012-11-30  5067
919d8a3f3fef99 Joe Perches              2018-09-17  5068        dinitprintk(ioc,
919d8a3f3fef99 Joe Perches              2018-09-17  5069                    
ioc_info(ioc, "scsiio(0x%p): depth(%d)\n",
919d8a3f3fef99 Joe Perches              2018-09-17  5070                        
     ioc->request, ioc->scsiio_depth));
f92363d1235949 Sreekanth Reddy          2012-11-30  5071
f92363d1235949 Sreekanth Reddy          2012-11-30  5072        
ioc->chain_depth = min_t(u32, ioc->chain_depth, MAX_CHAIN_DEPTH);
93204b782a88f2 Chaitra P B              2018-04-24  5073        sz = 
ioc->scsiio_depth * sizeof(struct chain_lookup);
93204b782a88f2 Chaitra P B              2018-04-24  5074        
ioc->chain_lookup = kzalloc(sz, GFP_KERNEL);
f92363d1235949 Sreekanth Reddy          2012-11-30  5075        if 
(!ioc->chain_lookup) {
919d8a3f3fef99 Joe Perches              2018-09-17  5076                
ioc_err(ioc, "chain_lookup: __get_free_pages failed\n");
93204b782a88f2 Chaitra P B              2018-04-24  5077                goto 
out;
93204b782a88f2 Chaitra P B              2018-04-24  5078        }
93204b782a88f2 Chaitra P B              2018-04-24  5079
93204b782a88f2 Chaitra P B              2018-04-24  5080        sz = 
ioc->chains_needed_per_io * sizeof(struct chain_tracker);
93204b782a88f2 Chaitra P B              2018-04-24  5081        for (i = 0; i < 
ioc->scsiio_depth; i++) {
93204b782a88f2 Chaitra P B              2018-04-24  5082                
ioc->chain_lookup[i].chains_per_smid = kzalloc(sz, GFP_KERNEL);
93204b782a88f2 Chaitra P B              2018-04-24  5083                if 
(!ioc->chain_lookup[i].chains_per_smid) {
919d8a3f3fef99 Joe Perches              2018-09-17  5084                        
ioc_err(ioc, "chain_lookup: kzalloc failed\n");
f92363d1235949 Sreekanth Reddy          2012-11-30  5085                        
goto out;
f92363d1235949 Sreekanth Reddy          2012-11-30  5086                }
93204b782a88f2 Chaitra P B              2018-04-24  5087        }
93204b782a88f2 Chaitra P B              2018-04-24  5088
f92363d1235949 Sreekanth Reddy          2012-11-30  5089        /* initialize 
hi-priority queue smid's */
f92363d1235949 Sreekanth Reddy          2012-11-30  5090        ioc->hpr_lookup 
= kcalloc(ioc->hi_priority_depth,
f92363d1235949 Sreekanth Reddy          2012-11-30  5091            
sizeof(struct request_tracker), GFP_KERNEL);
f92363d1235949 Sreekanth Reddy          2012-11-30  5092        if 
(!ioc->hpr_lookup) {
919d8a3f3fef99 Joe Perches              2018-09-17  5093                
ioc_err(ioc, "hpr_lookup: kcalloc failed\n");
f92363d1235949 Sreekanth Reddy          2012-11-30  5094                goto 
out;
f92363d1235949 Sreekanth Reddy          2012-11-30  5095        }
f92363d1235949 Sreekanth Reddy          2012-11-30  5096        
ioc->hi_priority_smid = ioc->scsiio_depth + 1;
919d8a3f3fef99 Joe Perches              2018-09-17  5097        dinitprintk(ioc,
919d8a3f3fef99 Joe Perches              2018-09-17  5098                    
ioc_info(ioc, "hi_priority(0x%p): depth(%d), start smid(%d)\n",
919d8a3f3fef99 Joe Perches              2018-09-17  5099                        
     ioc->hi_priority,
f92363d1235949 Sreekanth Reddy          2012-11-30  5100                        
     ioc->hi_priority_depth, ioc->hi_priority_smid));
f92363d1235949 Sreekanth Reddy          2012-11-30  5101
f92363d1235949 Sreekanth Reddy          2012-11-30  5102        /* initialize 
internal queue smid's */
f92363d1235949 Sreekanth Reddy          2012-11-30  5103        
ioc->internal_lookup = kcalloc(ioc->internal_depth,
f92363d1235949 Sreekanth Reddy          2012-11-30  5104            
sizeof(struct request_tracker), GFP_KERNEL);
f92363d1235949 Sreekanth Reddy          2012-11-30  5105        if 
(!ioc->internal_lookup) {
919d8a3f3fef99 Joe Perches              2018-09-17  5106                
ioc_err(ioc, "internal_lookup: kcalloc failed\n");
f92363d1235949 Sreekanth Reddy          2012-11-30  5107                goto 
out;
f92363d1235949 Sreekanth Reddy          2012-11-30  5108        }
f92363d1235949 Sreekanth Reddy          2012-11-30  5109        
ioc->internal_smid = ioc->hi_priority_smid + ioc->hi_priority_depth;
919d8a3f3fef99 Joe Perches              2018-09-17  5110        dinitprintk(ioc,
919d8a3f3fef99 Joe Perches              2018-09-17  5111                    
ioc_info(ioc, "internal(0x%p): depth(%d), start smid(%d)\n",
919d8a3f3fef99 Joe Perches              2018-09-17  5112                        
     ioc->internal,
f92363d1235949 Sreekanth Reddy          2012-11-30  5113                        
     ioc->internal_depth, ioc->internal_smid));
016d5c35e27824 Suganath Prabu Subramani 2017-10-31  5114        /*
016d5c35e27824 Suganath Prabu Subramani 2017-10-31  5115         * The number 
of NVMe page sized blocks needed is:
016d5c35e27824 Suganath Prabu Subramani 2017-10-31  5116         *     
(((sg_tablesize * 8) - 1) / (page_size - 8)) + 1
016d5c35e27824 Suganath Prabu Subramani 2017-10-31  5117         * 
((sg_tablesize * 8) - 1) is the max PRP's minus the first PRP entry
016d5c35e27824 Suganath Prabu Subramani 2017-10-31  5118         * that is 
placed in the main message frame.  8 is the size of each PRP
016d5c35e27824 Suganath Prabu Subramani 2017-10-31  5119         * entry or PRP 
list pointer entry.  8 is subtracted from page_size
016d5c35e27824 Suganath Prabu Subramani 2017-10-31  5120         * because of 
the PRP list pointer entry at the end of a page, so this
016d5c35e27824 Suganath Prabu Subramani 2017-10-31  5121         * is not 
counted as a PRP entry.  The 1 added page is a round up.
016d5c35e27824 Suganath Prabu Subramani 2017-10-31  5122         *
016d5c35e27824 Suganath Prabu Subramani 2017-10-31  5123         * To avoid 
allocation failures due to the amount of memory that could
016d5c35e27824 Suganath Prabu Subramani 2017-10-31  5124         * be required 
for NVMe PRP's, only each set of NVMe blocks will be
016d5c35e27824 Suganath Prabu Subramani 2017-10-31  5125         * contiguous, 
so a new set is allocated for each possible I/O.
016d5c35e27824 Suganath Prabu Subramani 2017-10-31  5126         */
74522a92bbf003 Chaitra P B              2018-04-24  5127        
ioc->chains_per_prp_buffer = 0;
016d5c35e27824 Suganath Prabu Subramani 2017-10-31  5128        if 
(ioc->facts.ProtocolFlags & MPI2_IOCFACTS_PROTOCOL_NVME_DEVICES) {
016d5c35e27824 Suganath Prabu Subramani 2017-10-31  5129                
nvme_blocks_needed =
016d5c35e27824 Suganath Prabu Subramani 2017-10-31  5130                        
(ioc->shost->sg_tablesize * NVME_PRP_SIZE) - 1;
016d5c35e27824 Suganath Prabu Subramani 2017-10-31  5131                
nvme_blocks_needed /= (ioc->page_size - NVME_PRP_SIZE);
016d5c35e27824 Suganath Prabu Subramani 2017-10-31  5132                
nvme_blocks_needed++;
016d5c35e27824 Suganath Prabu Subramani 2017-10-31  5133
dbec4c9040edc1 Suganath Prabu Subramani 2018-01-04  5134                sz = 
sizeof(struct pcie_sg_list) * ioc->scsiio_depth;
dbec4c9040edc1 Suganath Prabu Subramani 2018-01-04  5135                
ioc->pcie_sg_lookup = kzalloc(sz, GFP_KERNEL);
dbec4c9040edc1 Suganath Prabu Subramani 2018-01-04  5136                if 
(!ioc->pcie_sg_lookup) {
919d8a3f3fef99 Joe Perches              2018-09-17  5137                        
ioc_info(ioc, "PCIe SGL lookup: kzalloc failed\n");
dbec4c9040edc1 Suganath Prabu Subramani 2018-01-04  5138                        
goto out;
dbec4c9040edc1 Suganath Prabu Subramani 2018-01-04  5139                }
016d5c35e27824 Suganath Prabu Subramani 2017-10-31  5140                sz = 
nvme_blocks_needed * ioc->page_size;
016d5c35e27824 Suganath Prabu Subramani 2017-10-31  5141                
ioc->pcie_sgl_dma_pool =
13a0640525367c Romain Perier            2017-11-20  5142                        
dma_pool_create("PCIe SGL pool", &ioc->pdev->dev, sz, 16, 0);
016d5c35e27824 Suganath Prabu Subramani 2017-10-31  5143                if 
(!ioc->pcie_sgl_dma_pool) {
919d8a3f3fef99 Joe Perches              2018-09-17  5144                        
ioc_info(ioc, "PCIe SGL pool: dma_pool_create failed\n");
016d5c35e27824 Suganath Prabu Subramani 2017-10-31  5145                        
goto out;
016d5c35e27824 Suganath Prabu Subramani 2017-10-31  5146                }
74522a92bbf003 Chaitra P B              2018-04-24  5147
74522a92bbf003 Chaitra P B              2018-04-24  5148                
ioc->chains_per_prp_buffer = sz/ioc->chain_segment_sz;
74522a92bbf003 Chaitra P B              2018-04-24  5149                
ioc->chains_per_prp_buffer = min(ioc->chains_per_prp_buffer,
74522a92bbf003 Chaitra P B              2018-04-24  5150                        
                        ioc->chains_needed_per_io);
74522a92bbf003 Chaitra P B              2018-04-24  5151
016d5c35e27824 Suganath Prabu Subramani 2017-10-31  5152                for (i 
= 0; i < ioc->scsiio_depth; i++) {
dbec4c9040edc1 Suganath Prabu Subramani 2018-01-04  5153                        
ioc->pcie_sg_lookup[i].pcie_sgl = dma_pool_alloc(
dbec4c9040edc1 Suganath Prabu Subramani 2018-01-04  5154                        
        ioc->pcie_sgl_dma_pool, GFP_KERNEL,
dbec4c9040edc1 Suganath Prabu Subramani 2018-01-04  5155                        
        &ioc->pcie_sg_lookup[i].pcie_sgl_dma);
dbec4c9040edc1 Suganath Prabu Subramani 2018-01-04  5156                        
if (!ioc->pcie_sg_lookup[i].pcie_sgl) {
919d8a3f3fef99 Joe Perches              2018-09-17  5157                        
        ioc_info(ioc, "PCIe SGL pool: dma_pool_alloc failed\n");
016d5c35e27824 Suganath Prabu Subramani 2017-10-31  5158                        
        goto out;
016d5c35e27824 Suganath Prabu Subramani 2017-10-31  5159                        
}
74522a92bbf003 Chaitra P B              2018-04-24  5160                        
for (j = 0; j < ioc->chains_per_prp_buffer; j++) {
74522a92bbf003 Chaitra P B              2018-04-24  5161                        
        ct = &ioc->chain_lookup[i].chains_per_smid[j];
74522a92bbf003 Chaitra P B              2018-04-24  5162                        
        ct->chain_buffer =
74522a92bbf003 Chaitra P B              2018-04-24  5163                        
            ioc->pcie_sg_lookup[i].pcie_sgl +
74522a92bbf003 Chaitra P B              2018-04-24  5164                        
            (j * ioc->chain_segment_sz);
74522a92bbf003 Chaitra P B              2018-04-24  5165                        
        ct->chain_buffer_dma =
74522a92bbf003 Chaitra P B              2018-04-24  5166                        
            ioc->pcie_sg_lookup[i].pcie_sgl_dma +
74522a92bbf003 Chaitra P B              2018-04-24  5167                        
            (j * ioc->chain_segment_sz);
74522a92bbf003 Chaitra P B              2018-04-24  5168                        
}
016d5c35e27824 Suganath Prabu Subramani 2017-10-31  5169                }
f92363d1235949 Sreekanth Reddy          2012-11-30  5170
919d8a3f3fef99 Joe Perches              2018-09-17  5171                
dinitprintk(ioc,
919d8a3f3fef99 Joe Perches              2018-09-17  5172                        
    ioc_info(ioc, "PCIe sgl pool depth(%d), element_size(%d), pool_size(%d 
kB)\n",
919d8a3f3fef99 Joe Perches              2018-09-17  5173                        
             ioc->scsiio_depth, sz,
919d8a3f3fef99 Joe Perches              2018-09-17  5174                        
             (sz * ioc->scsiio_depth) / 1024));
919d8a3f3fef99 Joe Perches              2018-09-17  5175                
dinitprintk(ioc,
919d8a3f3fef99 Joe Perches              2018-09-17  5176                        
    ioc_info(ioc, "Number of chains can fit in a PRP page(%d)\n",
74522a92bbf003 Chaitra P B              2018-04-24  5177                        
             ioc->chains_per_prp_buffer));
016d5c35e27824 Suganath Prabu Subramani 2017-10-31  5178                
total_sz += sz * ioc->scsiio_depth;
016d5c35e27824 Suganath Prabu Subramani 2017-10-31  5179        }
74522a92bbf003 Chaitra P B              2018-04-24  5180
74522a92bbf003 Chaitra P B              2018-04-24  5181        
ioc->chain_dma_pool = dma_pool_create("chain pool", &ioc->pdev->dev,
74522a92bbf003 Chaitra P B              2018-04-24  5182            
ioc->chain_segment_sz, 16, 0);
74522a92bbf003 Chaitra P B              2018-04-24  5183        if 
(!ioc->chain_dma_pool) {
919d8a3f3fef99 Joe Perches              2018-09-17  5184                
ioc_err(ioc, "chain_dma_pool: dma_pool_create failed\n");
74522a92bbf003 Chaitra P B              2018-04-24  5185                goto 
out;
74522a92bbf003 Chaitra P B              2018-04-24  5186        }
74522a92bbf003 Chaitra P B              2018-04-24  5187        for (i = 0; i < 
ioc->scsiio_depth; i++) {
74522a92bbf003 Chaitra P B              2018-04-24  5188                for (j 
= ioc->chains_per_prp_buffer;
74522a92bbf003 Chaitra P B              2018-04-24  5189                        
        j < ioc->chains_needed_per_io; j++) {
74522a92bbf003 Chaitra P B              2018-04-24  5190                        
ct = &ioc->chain_lookup[i].chains_per_smid[j];
74522a92bbf003 Chaitra P B              2018-04-24  5191                        
ct->chain_buffer = dma_pool_alloc(
74522a92bbf003 Chaitra P B              2018-04-24  5192                        
                ioc->chain_dma_pool, GFP_KERNEL,
74522a92bbf003 Chaitra P B              2018-04-24  5193                        
                &ct->chain_buffer_dma);
74522a92bbf003 Chaitra P B              2018-04-24  5194                        
if (!ct->chain_buffer) {
919d8a3f3fef99 Joe Perches              2018-09-17  5195                        
        ioc_err(ioc, "chain_lookup: pci_pool_alloc failed\n");
74522a92bbf003 Chaitra P B              2018-04-24  5196                        
        _base_release_memory_pools(ioc);
74522a92bbf003 Chaitra P B              2018-04-24  5197                        
        goto out;
74522a92bbf003 Chaitra P B              2018-04-24  5198                        
}
74522a92bbf003 Chaitra P B              2018-04-24  5199                }
74522a92bbf003 Chaitra P B              2018-04-24  5200                
total_sz += ioc->chain_segment_sz;
74522a92bbf003 Chaitra P B              2018-04-24  5201        }
74522a92bbf003 Chaitra P B              2018-04-24  5202
919d8a3f3fef99 Joe Perches              2018-09-17  5203        dinitprintk(ioc,
919d8a3f3fef99 Joe Perches              2018-09-17  5204                    
ioc_info(ioc, "chain pool depth(%d), frame_size(%d), pool_size(%d kB)\n",
919d8a3f3fef99 Joe Perches              2018-09-17  5205                        
     ioc->chain_depth, ioc->chain_segment_sz,
919d8a3f3fef99 Joe Perches              2018-09-17  5206                        
     (ioc->chain_depth * ioc->chain_segment_sz) / 1024));
74522a92bbf003 Chaitra P B              2018-04-24  5207
f92363d1235949 Sreekanth Reddy          2012-11-30  5208        /* sense 
buffers, 4 byte align */
f92363d1235949 Sreekanth Reddy          2012-11-30  5209        sz = 
ioc->scsiio_depth * SCSI_SENSE_BUFFERSIZE;
e9d984182ab8e4 Romain Perier            2017-07-06  5210        
ioc->sense_dma_pool = dma_pool_create("sense pool", &ioc->pdev->dev, sz,
e9d984182ab8e4 Romain Perier            2017-07-06  5211                        
                      4, 0);
f92363d1235949 Sreekanth Reddy          2012-11-30  5212        if 
(!ioc->sense_dma_pool) {
919d8a3f3fef99 Joe Perches              2018-09-17  5213                
ioc_err(ioc, "sense pool: dma_pool_create failed\n");
f92363d1235949 Sreekanth Reddy          2012-11-30  5214                goto 
out;
f92363d1235949 Sreekanth Reddy          2012-11-30  5215        }
e9d984182ab8e4 Romain Perier            2017-07-06  5216        ioc->sense = 
dma_pool_alloc(ioc->sense_dma_pool, GFP_KERNEL,
f92363d1235949 Sreekanth Reddy          2012-11-30  5217            
&ioc->sense_dma);
f92363d1235949 Sreekanth Reddy          2012-11-30  5218        if 
(!ioc->sense) {
919d8a3f3fef99 Joe Perches              2018-09-17  5219                
ioc_err(ioc, "sense pool: dma_pool_alloc failed\n");
f92363d1235949 Sreekanth Reddy          2012-11-30  5220                goto 
out;
f92363d1235949 Sreekanth Reddy          2012-11-30  5221        }
e21fef6f331b39 Chaitra P B              2018-04-24  5222        /* sense buffer 
requires to be in same 4 gb region.
e21fef6f331b39 Chaitra P B              2018-04-24  5223         * Below 
function will check the same.
e21fef6f331b39 Chaitra P B              2018-04-24  5224         * In case of 
failure, new pci pool will be created with updated
e21fef6f331b39 Chaitra P B              2018-04-24  5225         * alignment. 
Older allocation and pool will be destroyed.
e21fef6f331b39 Chaitra P B              2018-04-24  5226         * Alignment 
will be used such a way that next allocation if
e21fef6f331b39 Chaitra P B              2018-04-24  5227         * success, 
will always meet same 4gb region requirement.
e21fef6f331b39 Chaitra P B              2018-04-24  5228         * Actual 
requirement is not alignment, but we need start and end of
e21fef6f331b39 Chaitra P B              2018-04-24  5229         * DMA address 
must have same upper 32 bit address.
e21fef6f331b39 Chaitra P B              2018-04-24  5230         */
e21fef6f331b39 Chaitra P B              2018-04-24  5231        if 
(!is_MSB_are_same((long)ioc->sense, sz)) {
e21fef6f331b39 Chaitra P B              2018-04-24  5232                
//Release Sense pool & Reallocate
e21fef6f331b39 Chaitra P B              2018-04-24  5233                
dma_pool_free(ioc->sense_dma_pool, ioc->sense, ioc->sense_dma);
e21fef6f331b39 Chaitra P B              2018-04-24  5234                
dma_pool_destroy(ioc->sense_dma_pool);
e21fef6f331b39 Chaitra P B              2018-04-24  5235                
ioc->sense = NULL;
e21fef6f331b39 Chaitra P B              2018-04-24  5236
e21fef6f331b39 Chaitra P B              2018-04-24  5237                
ioc->sense_dma_pool =
e21fef6f331b39 Chaitra P B              2018-04-24  5238                        
dma_pool_create("sense pool", &ioc->pdev->dev, sz,
e21fef6f331b39 Chaitra P B              2018-04-24  5239                        
                        roundup_pow_of_two(sz), 0);
e21fef6f331b39 Chaitra P B              2018-04-24  5240                if 
(!ioc->sense_dma_pool) {
919d8a3f3fef99 Joe Perches              2018-09-17  5241                        
ioc_err(ioc, "sense pool: pci_pool_create failed\n");
e21fef6f331b39 Chaitra P B              2018-04-24  5242                        
goto out;
e21fef6f331b39 Chaitra P B              2018-04-24  5243                }
e21fef6f331b39 Chaitra P B              2018-04-24  5244                
ioc->sense = dma_pool_alloc(ioc->sense_dma_pool, GFP_KERNEL,
e21fef6f331b39 Chaitra P B              2018-04-24  5245                        
        &ioc->sense_dma);
e21fef6f331b39 Chaitra P B              2018-04-24  5246                if 
(!ioc->sense) {
919d8a3f3fef99 Joe Perches              2018-09-17  5247                        
ioc_err(ioc, "sense pool: pci_pool_alloc failed\n");
e21fef6f331b39 Chaitra P B              2018-04-24  5248                        
goto out;
e21fef6f331b39 Chaitra P B              2018-04-24  5249                }
e21fef6f331b39 Chaitra P B              2018-04-24  5250        }
919d8a3f3fef99 Joe Perches              2018-09-17  5251        dinitprintk(ioc,
919d8a3f3fef99 Joe Perches              2018-09-17  5252                    
ioc_info(ioc, "sense pool(0x%p): depth(%d), element_size(%d), pool_size(%d 
kB)\n",
919d8a3f3fef99 Joe Perches              2018-09-17  5253                        
     ioc->sense, ioc->scsiio_depth,
f92363d1235949 Sreekanth Reddy          2012-11-30  5254                        
     SCSI_SENSE_BUFFERSIZE, sz / 1024));
919d8a3f3fef99 Joe Perches              2018-09-17  5255        dinitprintk(ioc,
919d8a3f3fef99 Joe Perches              2018-09-17  5256                    
ioc_info(ioc, "sense_dma(0x%llx)\n",
919d8a3f3fef99 Joe Perches              2018-09-17  5257                        
     (unsigned long long)ioc->sense_dma));
f92363d1235949 Sreekanth Reddy          2012-11-30  5258        total_sz += sz;
f92363d1235949 Sreekanth Reddy          2012-11-30  5259
f92363d1235949 Sreekanth Reddy          2012-11-30  5260        /* reply pool, 
4 byte align */
f92363d1235949 Sreekanth Reddy          2012-11-30  5261        sz = 
ioc->reply_free_queue_depth * ioc->reply_sz;
e9d984182ab8e4 Romain Perier            2017-07-06  5262        
ioc->reply_dma_pool = dma_pool_create("reply pool", &ioc->pdev->dev, sz,
e9d984182ab8e4 Romain Perier            2017-07-06  5263                        
                      4, 0);
f92363d1235949 Sreekanth Reddy          2012-11-30  5264        if 
(!ioc->reply_dma_pool) {
919d8a3f3fef99 Joe Perches              2018-09-17  5265                
ioc_err(ioc, "reply pool: dma_pool_create failed\n");
f92363d1235949 Sreekanth Reddy          2012-11-30  5266                goto 
out;
f92363d1235949 Sreekanth Reddy          2012-11-30  5267        }
e9d984182ab8e4 Romain Perier            2017-07-06  5268        ioc->reply = 
dma_pool_alloc(ioc->reply_dma_pool, GFP_KERNEL,
f92363d1235949 Sreekanth Reddy          2012-11-30  5269            
&ioc->reply_dma);
f92363d1235949 Sreekanth Reddy          2012-11-30  5270        if 
(!ioc->reply) {
919d8a3f3fef99 Joe Perches              2018-09-17  5271                
ioc_err(ioc, "reply pool: dma_pool_alloc failed\n");
f92363d1235949 Sreekanth Reddy          2012-11-30  5272                goto 
out;
f92363d1235949 Sreekanth Reddy          2012-11-30  5273        }
f92363d1235949 Sreekanth Reddy          2012-11-30  5274        
ioc->reply_dma_min_address = (u32)(ioc->reply_dma);
f92363d1235949 Sreekanth Reddy          2012-11-30  5275        
ioc->reply_dma_max_address = (u32)(ioc->reply_dma) + sz;
919d8a3f3fef99 Joe Perches              2018-09-17  5276        dinitprintk(ioc,
919d8a3f3fef99 Joe Perches              2018-09-17  5277                    
ioc_info(ioc, "reply pool(0x%p): depth(%d), frame_size(%d), pool_size(%d kB)\n",
919d8a3f3fef99 Joe Perches              2018-09-17  5278                        
     ioc->reply, ioc->reply_free_queue_depth,
919d8a3f3fef99 Joe Perches              2018-09-17  5279                        
     ioc->reply_sz, sz / 1024));
919d8a3f3fef99 Joe Perches              2018-09-17  5280        dinitprintk(ioc,
919d8a3f3fef99 Joe Perches              2018-09-17  5281                    
ioc_info(ioc, "reply_dma(0x%llx)\n",
919d8a3f3fef99 Joe Perches              2018-09-17  5282                        
     (unsigned long long)ioc->reply_dma));
f92363d1235949 Sreekanth Reddy          2012-11-30  5283        total_sz += sz;
f92363d1235949 Sreekanth Reddy          2012-11-30  5284
f92363d1235949 Sreekanth Reddy          2012-11-30  5285        /* reply free 
queue, 16 byte align */
f92363d1235949 Sreekanth Reddy          2012-11-30  5286        sz = 
ioc->reply_free_queue_depth * 4;
e9d984182ab8e4 Romain Perier            2017-07-06  5287        
ioc->reply_free_dma_pool = dma_pool_create("reply_free pool",
e9d984182ab8e4 Romain Perier            2017-07-06  5288            
&ioc->pdev->dev, sz, 16, 0);
f92363d1235949 Sreekanth Reddy          2012-11-30  5289        if 
(!ioc->reply_free_dma_pool) {
919d8a3f3fef99 Joe Perches              2018-09-17  5290                
ioc_err(ioc, "reply_free pool: dma_pool_create failed\n");
f92363d1235949 Sreekanth Reddy          2012-11-30  5291                goto 
out;
f92363d1235949 Sreekanth Reddy          2012-11-30  5292        }
c39a4d75539393 Souptick Joarder         2018-10-02  5293        ioc->reply_free 
= dma_pool_zalloc(ioc->reply_free_dma_pool, GFP_KERNEL,
f92363d1235949 Sreekanth Reddy          2012-11-30  5294            
&ioc->reply_free_dma);
f92363d1235949 Sreekanth Reddy          2012-11-30  5295        if 
(!ioc->reply_free) {
919d8a3f3fef99 Joe Perches              2018-09-17  5296                
ioc_err(ioc, "reply_free pool: dma_pool_alloc failed\n");
f92363d1235949 Sreekanth Reddy          2012-11-30  5297                goto 
out;
f92363d1235949 Sreekanth Reddy          2012-11-30  5298        }
919d8a3f3fef99 Joe Perches              2018-09-17  5299        dinitprintk(ioc,
919d8a3f3fef99 Joe Perches              2018-09-17  5300                    
ioc_info(ioc, "reply_free pool(0x%p): depth(%d), element_size(%d), pool_size(%d 
kB)\n",
919d8a3f3fef99 Joe Perches              2018-09-17  5301                        
     ioc->reply_free, ioc->reply_free_queue_depth,
919d8a3f3fef99 Joe Perches              2018-09-17  5302                        
     4, sz / 1024));
919d8a3f3fef99 Joe Perches              2018-09-17  5303        dinitprintk(ioc,
919d8a3f3fef99 Joe Perches              2018-09-17  5304                    
ioc_info(ioc, "reply_free_dma (0x%llx)\n",
919d8a3f3fef99 Joe Perches              2018-09-17  5305                        
     (unsigned long long)ioc->reply_free_dma));
f92363d1235949 Sreekanth Reddy          2012-11-30  5306        total_sz += sz;
f92363d1235949 Sreekanth Reddy          2012-11-30  5307
cd33223b59a493 Chaitra P B              2018-04-24  5308        if 
(ioc->rdpq_array_enable) {
cd33223b59a493 Chaitra P B              2018-04-24  5309                
reply_post_free_array_sz = ioc->reply_queue_count *
cd33223b59a493 Chaitra P B              2018-04-24  5310                    
sizeof(Mpi2IOCInitRDPQArrayEntry);
cd33223b59a493 Chaitra P B              2018-04-24  5311                
ioc->reply_post_free_array_dma_pool =
cd33223b59a493 Chaitra P B              2018-04-24  5312                    
dma_pool_create("reply_post_free_array pool",
cd33223b59a493 Chaitra P B              2018-04-24  5313                    
&ioc->pdev->dev, reply_post_free_array_sz, 16, 0);
cd33223b59a493 Chaitra P B              2018-04-24  5314                if 
(!ioc->reply_post_free_array_dma_pool) {
cd33223b59a493 Chaitra P B              2018-04-24  5315                        
dinitprintk(ioc,
919d8a3f3fef99 Joe Perches              2018-09-17  5316                        
            ioc_info(ioc, "reply_post_free_array pool: dma_pool_create 
failed\n"));
cd33223b59a493 Chaitra P B              2018-04-24  5317                        
goto out;
cd33223b59a493 Chaitra P B              2018-04-24  5318                }
cd33223b59a493 Chaitra P B              2018-04-24  5319                
ioc->reply_post_free_array =
cd33223b59a493 Chaitra P B              2018-04-24  5320                    
dma_pool_alloc(ioc->reply_post_free_array_dma_pool,
cd33223b59a493 Chaitra P B              2018-04-24  5321                    
GFP_KERNEL, &ioc->reply_post_free_array_dma);
cd33223b59a493 Chaitra P B              2018-04-24  5322                if 
(!ioc->reply_post_free_array) {
cd33223b59a493 Chaitra P B              2018-04-24  5323                        
dinitprintk(ioc,
919d8a3f3fef99 Joe Perches              2018-09-17  5324                        
            ioc_info(ioc, "reply_post_free_array pool: dma_pool_alloc 
failed\n"));
cd33223b59a493 Chaitra P B              2018-04-24  5325                        
goto out;
cd33223b59a493 Chaitra P B              2018-04-24  5326                }
cd33223b59a493 Chaitra P B              2018-04-24  5327        }
f92363d1235949 Sreekanth Reddy          2012-11-30  5328        
ioc->config_page_sz = 512;
1c2048bdc3f4ff Christoph Hellwig        2018-10-11  5329        
ioc->config_page = dma_alloc_coherent(&ioc->pdev->dev,
1c2048bdc3f4ff Christoph Hellwig        2018-10-11  5330                        
ioc->config_page_sz, &ioc->config_page_dma, GFP_KERNEL);
f92363d1235949 Sreekanth Reddy          2012-11-30  5331        if 
(!ioc->config_page) {
919d8a3f3fef99 Joe Perches              2018-09-17  5332                
ioc_err(ioc, "config page: dma_pool_alloc failed\n");
f92363d1235949 Sreekanth Reddy          2012-11-30  5333                goto 
out;
f92363d1235949 Sreekanth Reddy          2012-11-30  5334        }
919d8a3f3fef99 Joe Perches              2018-09-17  5335        dinitprintk(ioc,
919d8a3f3fef99 Joe Perches              2018-09-17  5336                    
ioc_info(ioc, "config page(0x%p): size(%d)\n",
919d8a3f3fef99 Joe Perches              2018-09-17  5337                        
     ioc->config_page, ioc->config_page_sz));
919d8a3f3fef99 Joe Perches              2018-09-17  5338        dinitprintk(ioc,
919d8a3f3fef99 Joe Perches              2018-09-17  5339                    
ioc_info(ioc, "config_page_dma(0x%llx)\n",
919d8a3f3fef99 Joe Perches              2018-09-17  5340                        
     (unsigned long long)ioc->config_page_dma));
f92363d1235949 Sreekanth Reddy          2012-11-30  5341        total_sz += 
ioc->config_page_sz;
f92363d1235949 Sreekanth Reddy          2012-11-30  5342
919d8a3f3fef99 Joe Perches              2018-09-17  5343        ioc_info(ioc, 
"Allocated physical memory: size(%d kB)\n",
919d8a3f3fef99 Joe Perches              2018-09-17  5344                 
total_sz / 1024);
919d8a3f3fef99 Joe Perches              2018-09-17  5345        ioc_info(ioc, 
"Current Controller Queue Depth(%d),Max Controller Queue Depth(%d)\n",
919d8a3f3fef99 Joe Perches              2018-09-17  5346                 
ioc->shost->can_queue, facts->RequestCredit);
919d8a3f3fef99 Joe Perches              2018-09-17  5347        ioc_info(ioc, 
"Scatter Gather Elements per IO(%d)\n",
919d8a3f3fef99 Joe Perches              2018-09-17  5348                 
ioc->shost->sg_tablesize);
f92363d1235949 Sreekanth Reddy          2012-11-30  5349        return 0;
f92363d1235949 Sreekanth Reddy          2012-11-30  5350
f92363d1235949 Sreekanth Reddy          2012-11-30  5351   out:
f92363d1235949 Sreekanth Reddy          2012-11-30  5352        return -ENOMEM;
f92363d1235949 Sreekanth Reddy          2012-11-30  5353  }
f92363d1235949 Sreekanth Reddy          2012-11-30  5354

:::::: The code at line 5025 was first introduced by commit
:::::: 1c2048bdc3f4ff3337613c27519cf608916e95a9 scsi: mpt3sas: switch to 
generic DMA API

:::::: TO: Christoph Hellwig <h...@lst.de>
:::::: CC: Martin K. Petersen <martin.peter...@oracle.com>

---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/kbuild-...@lists.01.org

Attachment: .config.gz
Description: application/gzip

Reply via email to