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