Hi Sreekanth,

Will there be a follow up patch to fix the crash scenario?  Is there
some error path in _base_allocate_memory_pools that isn't handled
gracefully that needs to be cleaned up?

Also, I think fixes in this space could apply to the mpt2sas driver as
well.

Regards,

-- Joe


On Wed, 14 Aug 2013 21:08:05 +0530
"Reddy, Sreekanth" <sreekanth.re...@lsi.com> wrote:

> Hi Tomas,
> 
> The crash happens when the kernel couldn't allocate the DMA'able memory that 
> the driver requests for Reply Descriptor post queue. The amount of memory 
> allocated is directly proportional to the HBA queue depth and the number of 
> MSI-X vectors. 
> 
> The indirect fix for this issue is to add a module parameter max_msix_vectors 
> to the driver. Using this module parameter the max number of MSI-X vectors 
> could be set. The amount of memory that is allocated could be decreased by 
> reducing the number of MSI-X vectors. Therefore if a crash is seen on a 
> system due to the memory allocation failure, then max_queue_depth and the 
> max_msix_vectors could be set to a lower value during driver load time so 
> that the memory requested by the driver is less and thereby preventing the 
> kernel crash.
> 
> So, lower  the value of this variable 'max_msix_vectors' only if  kernel 
> couldn't allocate the DMA'able memory that the driver requests for and crash 
> is observed.
> 
> Regards,
> Sreekanth
> 
> >-----Original Message-----
> >From: Tomas Henzl [mailto:the...@redhat.com]
> >Sent: Wednesday, August 14, 2013 8:48 PM
> >To: Reddy, Sreekanth
> >Cc: j...@kernel.org; jbottom...@parallels.com; linux-scsi@vger.kernel.org;
> >Nandigama, Nagalakshmi
> >Subject: Re: [PATCH] [SCSI] mpt3sas: Added a driver module parameter
> >max_msix_vectors
> >
> >On 08/14/2013 02:53 PM, Sreekanth Reddy wrote:
> >> Added a driver module parameter max_msix_vectors. Using this module
> >> parameter the maximum number of MSI-X vectors could be set.
> >>
> >> The number of MSI-X vectors used would be the minimum of MSI-X vectors
> >> supported by the HBA, the number of CPU cores and the value set to
> >max_msix_vectors module parameter.
> >>
> >> The default value of this module parameter is set to 8. The default
> >> value of this parameter is set to 8 inorder to reduce the amount of memory
> >required for Reply Descriptor Post queue.
> >> This is because with the higher MSI-X vectors, some times kernel is
> >> not able to allocate the requested amount of memory and crash is
> >> observed. To overcome this problem, the default value is set to 8.
> >
> >Hi Sreekanth,
> >I don't know exactly which allocation fails, but wouldn't be for the user 
> >better
> >to just try to allocate and only when it fails lower the msi-x vectors count?
> >Tomas
> >
> >>
> >> Signed-off-by: Sreekanth Reddy <sreekanth.re...@lsi.com>
> >> ---
> >>
> >> diff --git a/drivers/scsi/mpt3sas/mpt3sas_base.c
> >> b/drivers/scsi/mpt3sas/mpt3sas_base.c
> >> index a32d63b..d40ba0b 100644
> >> --- a/drivers/scsi/mpt3sas/mpt3sas_base.c
> >> +++ b/drivers/scsi/mpt3sas/mpt3sas_base.c
> >> @@ -82,6 +82,10 @@ static int msix_disable = -1;
> >> module_param(msix_disable, int, 0);  MODULE_PARM_DESC(msix_disable,
> >"
> >> disable msix routed interrupts (default=0)");
> >>
> >> +static int max_msix_vectors = 8;
> >> +module_param(max_msix_vectors, int, 0);
> >> +MODULE_PARM_DESC(max_msix_vectors,
> >> +  " max msix vectors - (default=8)");
> >>
> >>  static int mpt3sas_fwfault_debug;
> >>  MODULE_PARM_DESC(mpt3sas_fwfault_debug,
> >> @@ -1723,6 +1727,16 @@ _base_enable_msix(struct MPT3SAS_ADAPTER
> >*ioc)
> >>    ioc->reply_queue_count = min_t(int, ioc->cpu_count,
> >>        ioc->msix_vector_count);
> >>
> >> +  printk(MPT3SAS_FMT "MSI-X vectors supported: %d, no of cores"
> >> +    ": %d, max_msix_vectors: %d\n", ioc->name, ioc-
> >>msix_vector_count,
> >> +    ioc->cpu_count, max_msix_vectors);
> >> +
> >> +  if (max_msix_vectors > 0) {
> >> +          ioc->reply_queue_count = min_t(int, max_msix_vectors,
> >> +                  ioc->reply_queue_count);
> >> +          ioc->msix_vector_count = ioc->reply_queue_count;
> >> +  }
> >> +
> >>    entries = kcalloc(ioc->reply_queue_count, sizeof(struct msix_entry),
> >>        GFP_KERNEL);
> >>    if (!entries) {
> >>
> >> --
> >> To unsubscribe from this list: send the line "unsubscribe linux-scsi"
> >> in the body of a message to majord...@vger.kernel.org More majordomo
> >> info at  http://vger.kernel.org/majordomo-info.html
> >
> 
> 
> --
> To unsubscribe from this list: send the line "unsubscribe linux-scsi" in
> the body of a message to majord...@vger.kernel.org
> More majordomo info at  http://vger.kernel.org/majordomo-info.html

--
To unsubscribe from this list: send the line "unsubscribe linux-scsi" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to