ACK/cmt: [cosmic,bionic][PATCH] scsi: megaraid_sas: Use 63-bit DMA addressing
Khaled Elmously
khalid.elmously at canonical.com
Tue Jan 29 17:14:22 UTC 2019
On 2019-01-29 15:07:59 , Marcelo Henrique Cerri wrote:
> From: Shivasharan S <shivasharan.srikanteshwara at broadcom.com>
>
> BugLink: http://bugs.launchpad.net/bugs/1795453
>
> Although MegaRAID controllers support 64-bit DMA addressing, as per
> hardware design, DMA address with all 64-bits set
> (0xFFFFFFFF-FFFFFFFF) results in a firmware fault.
>
> Driver will set 63-bit DMA mask to ensure the above address will not be
> used.
>
> Cc: stable at vger.kernel.org
> Signed-off-by: Shivasharan S <shivasharan.srikanteshwara at broadcom.com>
> Signed-off-by: Martin K. Petersen <martin.petersen at oracle.com>
> (cherry picked from commit 894169db12463cea08d0e2a9e35f42b291340e5a)
> [mhcerri: fixed context]
> Signed-off-by: Marcelo Henrique Cerri <marcelo.cerri at canonical.com>
>
> Conflicts:
> drivers/scsi/megaraid/megaraid_sas_base.c
> ---
> drivers/scsi/megaraid/megaraid_sas_base.c | 18 +++++++++---------
> 1 file changed, 9 insertions(+), 9 deletions(-)
>
> diff --git a/drivers/scsi/megaraid/megaraid_sas_base.c b/drivers/scsi/megaraid/megaraid_sas_base.c
> index 2d6f6414a2a2..7b1a92dd844f 100644
> --- a/drivers/scsi/megaraid/megaraid_sas_base.c
> +++ b/drivers/scsi/megaraid/megaraid_sas_base.c
> @@ -6000,13 +6000,13 @@ static int megasas_io_attach(struct megasas_instance *instance)
> * @instance: Adapter soft state
> * Description:
> *
> - * For Ventura, driver/FW will operate in 64bit DMA addresses.
> + * For Ventura, driver/FW will operate in 63bit DMA addresses.
> *
> * For invader-
> * By default, driver/FW will operate in 32bit DMA addresses
> * for consistent DMA mapping but if 32 bit consistent
> - * DMA mask fails, driver will try with 64 bit consistent
> - * mask provided FW is true 64bit DMA capable
> + * DMA mask fails, driver will try with 63 bit consistent
> + * mask provided FW is true 63bit DMA capable
> *
> * For older controllers(Thunderbolt and MFI based adapters)-
> * driver/FW will operate in 32 bit consistent DMA addresses.
> @@ -6020,14 +6020,14 @@ megasas_set_dma_mask(struct megasas_instance *instance)
>
> pdev = instance->pdev;
> consistent_mask = (instance->adapter_type == VENTURA_SERIES) ?
> - DMA_BIT_MASK(64) : DMA_BIT_MASK(32);
> + DMA_BIT_MASK(63) : DMA_BIT_MASK(32);
>
> if (IS_DMA64) {
> - if (dma_set_mask(&pdev->dev, DMA_BIT_MASK(64)) &&
> + if (dma_set_mask(&pdev->dev, DMA_BIT_MASK(63)) &&
> dma_set_mask_and_coherent(&pdev->dev, DMA_BIT_MASK(32)))
> goto fail_set_dma_mask;
>
> - if ((*pdev->dev.dma_mask == DMA_BIT_MASK(64)) &&
> + if ((*pdev->dev.dma_mask == DMA_BIT_MASK(63)) &&
> (dma_set_coherent_mask(&pdev->dev, consistent_mask) &&
> dma_set_mask_and_coherent(&pdev->dev, DMA_BIT_MASK(32)))) {
> /*
> @@ -6040,7 +6040,7 @@ megasas_set_dma_mask(struct megasas_instance *instance)
> if (!(scratch_pad_2 & MR_CAN_HANDLE_64_BIT_DMA_OFFSET))
> goto fail_set_dma_mask;
> else if (dma_set_mask_and_coherent(&pdev->dev,
> - DMA_BIT_MASK(64)))
> + DMA_BIT_MASK(63)))
> goto fail_set_dma_mask;
> }
> } else if (dma_set_mask_and_coherent(&pdev->dev, DMA_BIT_MASK(32)))
> @@ -6052,8 +6052,8 @@ megasas_set_dma_mask(struct megasas_instance *instance)
> instance->consistent_mask_64bit = true;
>
> dev_info(&pdev->dev, "%s bit DMA mask and %s bit consistent mask\n",
> - ((*pdev->dev.dma_mask == DMA_BIT_MASK(64)) ? "64" : "32"),
> - (instance->consistent_mask_64bit ? "64" : "32"));
> + ((*pdev->dev.dma_mask == DMA_BIT_MASK(64)) ? "63" : "32"),
> + (instance->consistent_mask_64bit ? "63" : "32"));
>
> return 0;
>
I guess that should be "backported from" since you had to adjust. I'll fix that
Acked-by: Khalid Elmously <khalid.elmously at canonical.com>
More information about the kernel-team
mailing list