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