scsi: mpt3sas: Don't change DMA mask while reallocating pools
When a pool crosses the 4GB boundary region then before reallocating pools change the coherent DMA mask to 32 bits and keep the normal DMA mask set to 63/64 bits. Link: https://lore.kernel.org/r/20220825075457.16422-2-sreekanth.reddy@broadcom.com Signed-off-by: Sreekanth Reddy <sreekanth.reddy@broadcom.com> Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
This commit is contained in:
parent
e75c8ea0d7
commit
9df650963b
@ -2990,19 +2990,26 @@ static int
|
|||||||
_base_config_dma_addressing(struct MPT3SAS_ADAPTER *ioc, struct pci_dev *pdev)
|
_base_config_dma_addressing(struct MPT3SAS_ADAPTER *ioc, struct pci_dev *pdev)
|
||||||
{
|
{
|
||||||
struct sysinfo s;
|
struct sysinfo s;
|
||||||
|
u64 coherent_dma_mask, dma_mask;
|
||||||
|
|
||||||
if (ioc->is_mcpu_endpoint ||
|
if (ioc->is_mcpu_endpoint || sizeof(dma_addr_t) == 4 ||
|
||||||
sizeof(dma_addr_t) == 4 || ioc->use_32bit_dma ||
|
dma_get_required_mask(&pdev->dev) <= 32) {
|
||||||
dma_get_required_mask(&pdev->dev) <= 32)
|
|
||||||
ioc->dma_mask = 32;
|
ioc->dma_mask = 32;
|
||||||
|
coherent_dma_mask = dma_mask = DMA_BIT_MASK(32);
|
||||||
/* Set 63 bit DMA mask for all SAS3 and SAS35 controllers */
|
/* Set 63 bit DMA mask for all SAS3 and SAS35 controllers */
|
||||||
else if (ioc->hba_mpi_version_belonged > MPI2_VERSION)
|
} else if (ioc->hba_mpi_version_belonged > MPI2_VERSION) {
|
||||||
ioc->dma_mask = 63;
|
ioc->dma_mask = 63;
|
||||||
else
|
coherent_dma_mask = dma_mask = DMA_BIT_MASK(63);
|
||||||
|
} else {
|
||||||
ioc->dma_mask = 64;
|
ioc->dma_mask = 64;
|
||||||
|
coherent_dma_mask = dma_mask = DMA_BIT_MASK(64);
|
||||||
|
}
|
||||||
|
|
||||||
if (dma_set_mask(&pdev->dev, DMA_BIT_MASK(ioc->dma_mask)) ||
|
if (ioc->use_32bit_dma)
|
||||||
dma_set_coherent_mask(&pdev->dev, DMA_BIT_MASK(ioc->dma_mask)))
|
coherent_dma_mask = DMA_BIT_MASK(32);
|
||||||
|
|
||||||
|
if (dma_set_mask(&pdev->dev, dma_mask) ||
|
||||||
|
dma_set_coherent_mask(&pdev->dev, coherent_dma_mask))
|
||||||
return -ENODEV;
|
return -ENODEV;
|
||||||
|
|
||||||
if (ioc->dma_mask > 32) {
|
if (ioc->dma_mask > 32) {
|
||||||
|
Loading…
Reference in New Issue
Block a user