From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mx2.suse.de ([195.135.220.15]:51361 "EHLO mx2.suse.de" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S934268AbeBMJne (ORCPT ); Tue, 13 Feb 2018 04:43:34 -0500 Subject: Re: [PATCH] mpt3sas: Do not use 32-bit atomic request descriptor for Ventura controllers To: Shivasharan S , linux-scsi@vger.kernel.org Cc: sreekanth.reddy@broadcom.com, sathya.prakash@broadcom.com, kashyap.desai@broadcom.com, Suganath Prabu S , stable@vger.kernel.org References: <1518414470-2056-1-git-send-email-shivasharan.srikanteshwara@broadcom.com> From: Hannes Reinecke Message-ID: <5be636c6-e85b-41fe-9644-4cd1634def55@suse.de> Date: Tue, 13 Feb 2018 10:43:31 +0100 MIME-Version: 1.0 In-Reply-To: <1518414470-2056-1-git-send-email-shivasharan.srikanteshwara@broadcom.com> Content-Type: text/plain; charset=utf-8 Content-Language: en-US Content-Transfer-Encoding: 8bit Sender: stable-owner@vger.kernel.org List-ID: On 02/12/2018 06:47 AM, Shivasharan S wrote: > From: Suganath Prabu S > > Problem Statement: > Sending I/O through 32 bit descriptors to Ventura series of controller > results in IO timeout on certain conditions. > > This error only occurs on systems with high I/O activity on > Ventura series controllers. > > Changes in this patch will prevent driver from using 32 bit descriptor > and use 64 bit Descriptors. > > Cc: > Signed-off-by: Suganath Prabu S > Signed-off-by: Shivasharan S > --- > drivers/scsi/mpt3sas/mpt3sas_base.c | 121 ------------------------------------ > drivers/scsi/mpt3sas/mpt3sas_base.h | 1 - > 2 files changed, 122 deletions(-) > > diff --git a/drivers/scsi/mpt3sas/mpt3sas_base.c b/drivers/scsi/mpt3sas/mpt3sas_base.c > index 13d6e4e..6051469 100644 > --- a/drivers/scsi/mpt3sas/mpt3sas_base.c > +++ b/drivers/scsi/mpt3sas/mpt3sas_base.c > @@ -3108,116 +3108,6 @@ _base_put_smid_default(struct MPT3SAS_ADAPTER *ioc, u16 smid) > } > > /** > -* _base_put_smid_scsi_io_atomic - send SCSI_IO request to firmware using > -* Atomic Request Descriptor > -* @ioc: per adapter object > -* @smid: system request message index > -* @handle: device handle, unused in this function, for function type match > -* > -* Return nothing. > -*/ > -static void > -_base_put_smid_scsi_io_atomic(struct MPT3SAS_ADAPTER *ioc, u16 smid, > - u16 handle) > -{ > - Mpi26AtomicRequestDescriptor_t descriptor; > - u32 *request = (u32 *)&descriptor; > - > - descriptor.RequestFlags = MPI2_REQ_DESCRIPT_FLAGS_SCSI_IO; > - descriptor.MSIxIndex = _base_get_msix_index(ioc); > - descriptor.SMID = cpu_to_le16(smid); > - > - writel(cpu_to_le32(*request), &ioc->chip->AtomicRequestDescriptorPost); > -} > - > -/** > - * _base_put_smid_fast_path_atomic - send fast path request to firmware > - * using Atomic Request Descriptor > - * @ioc: per adapter object > - * @smid: system request message index > - * @handle: device handle, unused in this function, for function type match > - * Return nothing > - */ > -static void > -_base_put_smid_fast_path_atomic(struct MPT3SAS_ADAPTER *ioc, u16 smid, > - u16 handle) > -{ > - Mpi26AtomicRequestDescriptor_t descriptor; > - u32 *request = (u32 *)&descriptor; > - > - descriptor.RequestFlags = MPI25_REQ_DESCRIPT_FLAGS_FAST_PATH_SCSI_IO; > - descriptor.MSIxIndex = _base_get_msix_index(ioc); > - descriptor.SMID = cpu_to_le16(smid); > - > - writel(cpu_to_le32(*request), &ioc->chip->AtomicRequestDescriptorPost); > -} > - > -/** > - * _base_put_smid_hi_priority_atomic - send Task Management request to > - * firmware using Atomic Request Descriptor > - * @ioc: per adapter object > - * @smid: system request message index > - * @msix_task: msix_task will be same as msix of IO incase of task abort else 0 > - * > - * Return nothing. > - */ > -static void > -_base_put_smid_hi_priority_atomic(struct MPT3SAS_ADAPTER *ioc, u16 smid, > - u16 msix_task) > -{ > - Mpi26AtomicRequestDescriptor_t descriptor; > - u32 *request = (u32 *)&descriptor; > - > - descriptor.RequestFlags = MPI2_REQ_DESCRIPT_FLAGS_HIGH_PRIORITY; > - descriptor.MSIxIndex = msix_task; > - descriptor.SMID = cpu_to_le16(smid); > - > - writel(cpu_to_le32(*request), &ioc->chip->AtomicRequestDescriptorPost); > -} > - > -/** > - * _base_put_smid_nvme_encap_atomic - send NVMe encapsulated request to > - * firmware using Atomic Request Descriptor > - * @ioc: per adapter object > - * @smid: system request message index > - * > - * Return nothing. > - */ > -static void > -_base_put_smid_nvme_encap_atomic(struct MPT3SAS_ADAPTER *ioc, u16 smid) > -{ > - Mpi26AtomicRequestDescriptor_t descriptor; > - u32 *request = (u32 *)&descriptor; > - > - descriptor.RequestFlags = MPI26_REQ_DESCRIPT_FLAGS_PCIE_ENCAPSULATED; > - descriptor.MSIxIndex = _base_get_msix_index(ioc); > - descriptor.SMID = cpu_to_le16(smid); > - > - writel(cpu_to_le32(*request), &ioc->chip->AtomicRequestDescriptorPost); > -} > - > -/** > - * _base_put_smid_default - Default, primarily used for config pages > - * use Atomic Request Descriptor > - * @ioc: per adapter object > - * @smid: system request message index > - * > - * Return nothing. > - */ > -static void > -_base_put_smid_default_atomic(struct MPT3SAS_ADAPTER *ioc, u16 smid) > -{ > - Mpi26AtomicRequestDescriptor_t descriptor; > - u32 *request = (u32 *)&descriptor; > - > - descriptor.RequestFlags = MPI2_REQ_DESCRIPT_FLAGS_DEFAULT_TYPE; > - descriptor.MSIxIndex = _base_get_msix_index(ioc); > - descriptor.SMID = cpu_to_le16(smid); > - > - writel(cpu_to_le32(*request), &ioc->chip->AtomicRequestDescriptorPost); > -} > - > -/** > * _base_display_OEMs_branding - Display branding string > * @ioc: per adapter object > * > @@ -5071,8 +4961,6 @@ _base_get_ioc_facts(struct MPT3SAS_ADAPTER *ioc) > if ((facts->IOCCapabilities & > MPI2_IOCFACTS_CAPABILITY_RDPQ_ARRAY_CAPABLE) && (!reset_devices)) > ioc->rdpq_array_capable = 1; > - if (facts->IOCCapabilities & MPI26_IOCFACTS_CAPABILITY_ATOMIC_REQ) > - ioc->atomic_desc_capable = 1; > facts->FWVersion.Word = le32_to_cpu(mpi_reply.FWVersion.Word); > facts->IOCRequestFrameSize = > le16_to_cpu(mpi_reply.IOCRequestFrameSize); > @@ -6006,20 +5894,11 @@ mpt3sas_base_attach(struct MPT3SAS_ADAPTER *ioc) > break; > } > > - if (ioc->atomic_desc_capable) { > - ioc->put_smid_default = &_base_put_smid_default_atomic; > - ioc->put_smid_scsi_io = &_base_put_smid_scsi_io_atomic; > - ioc->put_smid_fast_path = &_base_put_smid_fast_path_atomic; > - ioc->put_smid_hi_priority = &_base_put_smid_hi_priority_atomic; > - ioc->put_smid_nvme_encap = &_base_put_smid_nvme_encap_atomic; > - } else { > ioc->put_smid_default = &_base_put_smid_default; > ioc->put_smid_scsi_io = &_base_put_smid_scsi_io; > ioc->put_smid_fast_path = &_base_put_smid_fast_path; > ioc->put_smid_hi_priority = &_base_put_smid_hi_priority; > ioc->put_smid_nvme_encap = &_base_put_smid_nvme_encap; > - } > - > > /* > * These function pointers for other requests that don't Please remove the 'put_smid_XXX' callbacks, too; they are not needed anymore after this patch. And run checkpatch to fixup the indentation. Cheers, Hannes -- Dr. Hannes Reinecke Teamlead Storage & Networking hare@suse.de +49 911 74053 688 SUSE LINUX GmbH, Maxfeldstr. 5, 90409 Nürnberg GF: F. Imendörffer, J. Smithard, J. Guild, D. Upmanyu, G. Norton HRB 21284 (AG Nürnberg)