[PATCH 14/28] mpt3sas: switch to generic DMA API

2018-10-14 Thread Christoph Hellwig
Switch from the legacy PCI DMA API to the generic DMA API.

Also simplify setting the DMA mask a bit.

Signed-off-by: Christoph Hellwig 
Reviewed-by: Johannes Thumshirn 
---
 drivers/scsi/mpt3sas/mpt3sas_base.c  | 67 
 drivers/scsi/mpt3sas/mpt3sas_ctl.c   | 34 ++--
 drivers/scsi/mpt3sas/mpt3sas_transport.c | 18 ---
 3 files changed, 61 insertions(+), 58 deletions(-)

diff --git a/drivers/scsi/mpt3sas/mpt3sas_base.c 
b/drivers/scsi/mpt3sas/mpt3sas_base.c
index 166b607690a1..2500377d0723 100644
--- a/drivers/scsi/mpt3sas/mpt3sas_base.c
+++ b/drivers/scsi/mpt3sas/mpt3sas_base.c
@@ -2259,7 +2259,7 @@ _base_build_sg_scmd(struct MPT3SAS_ADAPTER *ioc,
sges_left = scsi_dma_map(scmd);
if (sges_left < 0) {
sdev_printk(KERN_ERR, scmd->device,
-"pci_map_sg failed: request for %d bytes!\n",
+"scsi_dma_map failed: request for %d bytes!\n",
 scsi_bufflen(scmd));
return -ENOMEM;
}
@@ -2407,7 +2407,7 @@ _base_build_sg_scmd_ieee(struct MPT3SAS_ADAPTER *ioc,
sges_left = scsi_dma_map(scmd);
if (sges_left < 0) {
sdev_printk(KERN_ERR, scmd->device,
-   "pci_map_sg failed: request for %d bytes!\n",
+   "scsi_dma_map failed: request for %d bytes!\n",
scsi_bufflen(scmd));
return -ENOMEM;
}
@@ -2552,39 +2552,37 @@ _base_build_sg_ieee(struct MPT3SAS_ADAPTER *ioc, void 
*psge,
 static int
 _base_config_dma_addressing(struct MPT3SAS_ADAPTER *ioc, struct pci_dev *pdev)
 {
+   u64 required_mask, coherent_mask;
struct sysinfo s;
-   u64 consistent_dma_mask;
 
if (ioc->is_mcpu_endpoint)
goto try_32bit;
 
+   required_mask = dma_get_required_mask(>dev);
+   if (sizeof(dma_addr_t) == 4 || required_mask == 32)
+   goto try_32bit;
+
if (ioc->dma_mask)
-   consistent_dma_mask = DMA_BIT_MASK(64);
+   coherent_mask = DMA_BIT_MASK(64);
else
-   consistent_dma_mask = DMA_BIT_MASK(32);
-
-   if (sizeof(dma_addr_t) > 4) {
-   const uint64_t required_mask =
-   dma_get_required_mask(>dev);
-   if ((required_mask > DMA_BIT_MASK(32)) &&
-   !pci_set_dma_mask(pdev, DMA_BIT_MASK(64)) &&
-   !pci_set_consistent_dma_mask(pdev, consistent_dma_mask)) {
-   ioc->base_add_sg_single = &_base_add_sg_single_64;
-   ioc->sge_size = sizeof(Mpi2SGESimple64_t);
-   ioc->dma_mask = 64;
-   goto out;
-   }
-   }
+   coherent_mask = DMA_BIT_MASK(32);
+
+   if (dma_set_mask(>dev, DMA_BIT_MASK(64)) ||
+   dma_set_coherent_mask(>dev, coherent_mask))
+   goto try_32bit;
+
+   ioc->base_add_sg_single = &_base_add_sg_single_64;
+   ioc->sge_size = sizeof(Mpi2SGESimple64_t);
+   ioc->dma_mask = 64;
+   goto out;
 
  try_32bit:
-   if (!pci_set_dma_mask(pdev, DMA_BIT_MASK(32))
-   && !pci_set_consistent_dma_mask(pdev, DMA_BIT_MASK(32))) {
-   ioc->base_add_sg_single = &_base_add_sg_single_32;
-   ioc->sge_size = sizeof(Mpi2SGESimple32_t);
-   ioc->dma_mask = 32;
-   } else
+   if (dma_set_mask_and_coherent(>dev, DMA_BIT_MASK(32)))
return -ENODEV;
 
+   ioc->base_add_sg_single = &_base_add_sg_single_32;
+   ioc->sge_size = sizeof(Mpi2SGESimple32_t);
+   ioc->dma_mask = 32;
  out:
si_meminfo();
ioc_info(ioc, "%d BIT PCI BUS DMA ADDRESSING SUPPORTED, total mem (%ld 
kB)\n",
@@ -3777,8 +3775,8 @@ _base_display_fwpkg_version(struct MPT3SAS_ADAPTER *ioc)
}
 
data_length = sizeof(Mpi2FWImageHeader_t);
-   fwpkg_data = pci_alloc_consistent(ioc->pdev, data_length,
-   _data_dma);
+   fwpkg_data = dma_alloc_coherent(>pdev->dev, data_length,
+   _data_dma, GFP_KERNEL);
if (!fwpkg_data) {
ioc_err(ioc, "failure at %s:%d/%s()!\n",
__FILE__, __LINE__, __func__);
@@ -3837,7 +3835,7 @@ _base_display_fwpkg_version(struct MPT3SAS_ADAPTER *ioc)
ioc->base_cmds.status = MPT3_CMD_NOT_USED;
 out:
if (fwpkg_data)
-   pci_free_consistent(ioc->pdev, data_length, fwpkg_data,
+   dma_free_coherent(>pdev->dev, data_length, fwpkg_data,
fwpkg_data_dma);
return r;
 }
@@ -4146,7 +4144,7 @@ _base_release_memory_pools(struct MPT3SAS_ADAPTER *ioc)
dexitprintk(ioc, ioc_info(ioc, "%s\n", __func__));
 
if (ioc->request) {
-   pci_free_consistent(ioc->pdev, ioc->request_dma_sz,
+   dma_free_coherent(>pdev->dev, ioc->request_dma_sz,
ioc->request,  ioc->request_dma);
   

Re: [PATCH 14/28] mpt3sas: switch to generic DMA API

2018-10-12 Thread Johannes Thumshirn
Looks good,
Reviewed-by: Johannes Thumshirn 
-- 
Johannes ThumshirnSUSE Labs 
jthumsh...@suse.de+49 911 74053 689
SUSE LINUX GmbH, Maxfeldstr. 5, 90409 Nürnberg
GF: Felix Imendörffer, Jane Smithard, Graham Norton
HRB 21284 (AG Nürnberg)
Key fingerprint = EC38 9CAB C2C4 F25D 8600 D0D0 0393 969D 2D76 0850


[PATCH 14/28] mpt3sas: switch to generic DMA API

2018-10-11 Thread Christoph Hellwig
Switch from the legacy PCI DMA API to the generic DMA API.

Also simplify setting the DMA mask a bit.

Signed-off-by: Christoph Hellwig 
---
 drivers/scsi/mpt3sas/mpt3sas_base.c  | 67 
 drivers/scsi/mpt3sas/mpt3sas_ctl.c   | 34 ++--
 drivers/scsi/mpt3sas/mpt3sas_transport.c | 18 ---
 3 files changed, 61 insertions(+), 58 deletions(-)

diff --git a/drivers/scsi/mpt3sas/mpt3sas_base.c 
b/drivers/scsi/mpt3sas/mpt3sas_base.c
index 166b607690a1..2500377d0723 100644
--- a/drivers/scsi/mpt3sas/mpt3sas_base.c
+++ b/drivers/scsi/mpt3sas/mpt3sas_base.c
@@ -2259,7 +2259,7 @@ _base_build_sg_scmd(struct MPT3SAS_ADAPTER *ioc,
sges_left = scsi_dma_map(scmd);
if (sges_left < 0) {
sdev_printk(KERN_ERR, scmd->device,
-"pci_map_sg failed: request for %d bytes!\n",
+"scsi_dma_map failed: request for %d bytes!\n",
 scsi_bufflen(scmd));
return -ENOMEM;
}
@@ -2407,7 +2407,7 @@ _base_build_sg_scmd_ieee(struct MPT3SAS_ADAPTER *ioc,
sges_left = scsi_dma_map(scmd);
if (sges_left < 0) {
sdev_printk(KERN_ERR, scmd->device,
-   "pci_map_sg failed: request for %d bytes!\n",
+   "scsi_dma_map failed: request for %d bytes!\n",
scsi_bufflen(scmd));
return -ENOMEM;
}
@@ -2552,39 +2552,37 @@ _base_build_sg_ieee(struct MPT3SAS_ADAPTER *ioc, void 
*psge,
 static int
 _base_config_dma_addressing(struct MPT3SAS_ADAPTER *ioc, struct pci_dev *pdev)
 {
+   u64 required_mask, coherent_mask;
struct sysinfo s;
-   u64 consistent_dma_mask;
 
if (ioc->is_mcpu_endpoint)
goto try_32bit;
 
+   required_mask = dma_get_required_mask(>dev);
+   if (sizeof(dma_addr_t) == 4 || required_mask == 32)
+   goto try_32bit;
+
if (ioc->dma_mask)
-   consistent_dma_mask = DMA_BIT_MASK(64);
+   coherent_mask = DMA_BIT_MASK(64);
else
-   consistent_dma_mask = DMA_BIT_MASK(32);
-
-   if (sizeof(dma_addr_t) > 4) {
-   const uint64_t required_mask =
-   dma_get_required_mask(>dev);
-   if ((required_mask > DMA_BIT_MASK(32)) &&
-   !pci_set_dma_mask(pdev, DMA_BIT_MASK(64)) &&
-   !pci_set_consistent_dma_mask(pdev, consistent_dma_mask)) {
-   ioc->base_add_sg_single = &_base_add_sg_single_64;
-   ioc->sge_size = sizeof(Mpi2SGESimple64_t);
-   ioc->dma_mask = 64;
-   goto out;
-   }
-   }
+   coherent_mask = DMA_BIT_MASK(32);
+
+   if (dma_set_mask(>dev, DMA_BIT_MASK(64)) ||
+   dma_set_coherent_mask(>dev, coherent_mask))
+   goto try_32bit;
+
+   ioc->base_add_sg_single = &_base_add_sg_single_64;
+   ioc->sge_size = sizeof(Mpi2SGESimple64_t);
+   ioc->dma_mask = 64;
+   goto out;
 
  try_32bit:
-   if (!pci_set_dma_mask(pdev, DMA_BIT_MASK(32))
-   && !pci_set_consistent_dma_mask(pdev, DMA_BIT_MASK(32))) {
-   ioc->base_add_sg_single = &_base_add_sg_single_32;
-   ioc->sge_size = sizeof(Mpi2SGESimple32_t);
-   ioc->dma_mask = 32;
-   } else
+   if (dma_set_mask_and_coherent(>dev, DMA_BIT_MASK(32)))
return -ENODEV;
 
+   ioc->base_add_sg_single = &_base_add_sg_single_32;
+   ioc->sge_size = sizeof(Mpi2SGESimple32_t);
+   ioc->dma_mask = 32;
  out:
si_meminfo();
ioc_info(ioc, "%d BIT PCI BUS DMA ADDRESSING SUPPORTED, total mem (%ld 
kB)\n",
@@ -3777,8 +3775,8 @@ _base_display_fwpkg_version(struct MPT3SAS_ADAPTER *ioc)
}
 
data_length = sizeof(Mpi2FWImageHeader_t);
-   fwpkg_data = pci_alloc_consistent(ioc->pdev, data_length,
-   _data_dma);
+   fwpkg_data = dma_alloc_coherent(>pdev->dev, data_length,
+   _data_dma, GFP_KERNEL);
if (!fwpkg_data) {
ioc_err(ioc, "failure at %s:%d/%s()!\n",
__FILE__, __LINE__, __func__);
@@ -3837,7 +3835,7 @@ _base_display_fwpkg_version(struct MPT3SAS_ADAPTER *ioc)
ioc->base_cmds.status = MPT3_CMD_NOT_USED;
 out:
if (fwpkg_data)
-   pci_free_consistent(ioc->pdev, data_length, fwpkg_data,
+   dma_free_coherent(>pdev->dev, data_length, fwpkg_data,
fwpkg_data_dma);
return r;
 }
@@ -4146,7 +4144,7 @@ _base_release_memory_pools(struct MPT3SAS_ADAPTER *ioc)
dexitprintk(ioc, ioc_info(ioc, "%s\n", __func__));
 
if (ioc->request) {
-   pci_free_consistent(ioc->pdev, ioc->request_dma_sz,
+   dma_free_coherent(>pdev->dev, ioc->request_dma_sz,
ioc->request,  ioc->request_dma);
dexitprintk(ioc,