summaryrefslogtreecommitdiffstats
path: root/drivers/scsi/pmcraid.c
diff options
context:
space:
mode:
authorChristoph Hellwig <hch@lst.de>2018-10-18 09:05:37 -0400
committerMartin K. Petersen <martin.petersen@oracle.com>2018-11-06 21:31:29 -0500
commit371a6c328ad423c51ffcf68ec211d3eeb80f1874 (patch)
treeec14a63690c0e1ab0d404f8e8b58a187bae7c5fd /drivers/scsi/pmcraid.c
parenta9b9e3adc9a98ce59a8544d31da597807a473bd1 (diff)
scsi: pmcraid: use generic DMA API
Switch from the legacy PCI DMA API to the generic DMA API. Signed-off-by: Christoph Hellwig <hch@lst.de> Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
Diffstat (limited to 'drivers/scsi/pmcraid.c')
-rw-r--r--drivers/scsi/pmcraid.c79
1 files changed, 36 insertions, 43 deletions
diff --git a/drivers/scsi/pmcraid.c b/drivers/scsi/pmcraid.c
index 401e543f1723..707d766c1ee9 100644
--- a/drivers/scsi/pmcraid.c
+++ b/drivers/scsi/pmcraid.c
@@ -3514,7 +3514,7 @@ static int pmcraid_build_passthrough_ioadls(
3514 return -ENOMEM; 3514 return -ENOMEM;
3515 } 3515 }
3516 3516
3517 sglist->num_dma_sg = pci_map_sg(cmd->drv_inst->pdev, 3517 sglist->num_dma_sg = dma_map_sg(&cmd->drv_inst->pdev->dev,
3518 sglist->scatterlist, 3518 sglist->scatterlist,
3519 sglist->num_sg, direction); 3519 sglist->num_sg, direction);
3520 3520
@@ -3563,7 +3563,7 @@ static void pmcraid_release_passthrough_ioadls(
3563 struct pmcraid_sglist *sglist = cmd->sglist; 3563 struct pmcraid_sglist *sglist = cmd->sglist;
3564 3564
3565 if (buflen > 0) { 3565 if (buflen > 0) {
3566 pci_unmap_sg(cmd->drv_inst->pdev, 3566 dma_unmap_sg(&cmd->drv_inst->pdev->dev,
3567 sglist->scatterlist, 3567 sglist->scatterlist,
3568 sglist->num_sg, 3568 sglist->num_sg,
3569 direction); 3569 direction);
@@ -4699,9 +4699,9 @@ static void
4699pmcraid_release_host_rrqs(struct pmcraid_instance *pinstance, int maxindex) 4699pmcraid_release_host_rrqs(struct pmcraid_instance *pinstance, int maxindex)
4700{ 4700{
4701 int i; 4701 int i;
4702 for (i = 0; i < maxindex; i++) {
4703 4702
4704 pci_free_consistent(pinstance->pdev, 4703 for (i = 0; i < maxindex; i++) {
4704 dma_free_coherent(&pinstance->pdev->dev,
4705 HRRQ_ENTRY_SIZE * PMCRAID_MAX_CMD, 4705 HRRQ_ENTRY_SIZE * PMCRAID_MAX_CMD,
4706 pinstance->hrrq_start[i], 4706 pinstance->hrrq_start[i],
4707 pinstance->hrrq_start_bus_addr[i]); 4707 pinstance->hrrq_start_bus_addr[i]);
@@ -4728,11 +4728,9 @@ static int pmcraid_allocate_host_rrqs(struct pmcraid_instance *pinstance)
4728 4728
4729 for (i = 0; i < pinstance->num_hrrq; i++) { 4729 for (i = 0; i < pinstance->num_hrrq; i++) {
4730 pinstance->hrrq_start[i] = 4730 pinstance->hrrq_start[i] =
4731 pci_alloc_consistent( 4731 dma_alloc_coherent(&pinstance->pdev->dev, buffer_size,
4732 pinstance->pdev, 4732 &pinstance->hrrq_start_bus_addr[i],
4733 buffer_size, 4733 GFP_KERNEL);
4734 &(pinstance->hrrq_start_bus_addr[i]));
4735
4736 if (!pinstance->hrrq_start[i]) { 4734 if (!pinstance->hrrq_start[i]) {
4737 pmcraid_err("pci_alloc failed for hrrq vector : %d\n", 4735 pmcraid_err("pci_alloc failed for hrrq vector : %d\n",
4738 i); 4736 i);
@@ -4761,7 +4759,7 @@ static int pmcraid_allocate_host_rrqs(struct pmcraid_instance *pinstance)
4761static void pmcraid_release_hcams(struct pmcraid_instance *pinstance) 4759static void pmcraid_release_hcams(struct pmcraid_instance *pinstance)
4762{ 4760{
4763 if (pinstance->ccn.msg != NULL) { 4761 if (pinstance->ccn.msg != NULL) {
4764 pci_free_consistent(pinstance->pdev, 4762 dma_free_coherent(&pinstance->pdev->dev,
4765 PMCRAID_AEN_HDR_SIZE + 4763 PMCRAID_AEN_HDR_SIZE +
4766 sizeof(struct pmcraid_hcam_ccn_ext), 4764 sizeof(struct pmcraid_hcam_ccn_ext),
4767 pinstance->ccn.msg, 4765 pinstance->ccn.msg,
@@ -4773,7 +4771,7 @@ static void pmcraid_release_hcams(struct pmcraid_instance *pinstance)
4773 } 4771 }
4774 4772
4775 if (pinstance->ldn.msg != NULL) { 4773 if (pinstance->ldn.msg != NULL) {
4776 pci_free_consistent(pinstance->pdev, 4774 dma_free_coherent(&pinstance->pdev->dev,
4777 PMCRAID_AEN_HDR_SIZE + 4775 PMCRAID_AEN_HDR_SIZE +
4778 sizeof(struct pmcraid_hcam_ldn), 4776 sizeof(struct pmcraid_hcam_ldn),
4779 pinstance->ldn.msg, 4777 pinstance->ldn.msg,
@@ -4794,17 +4792,15 @@ static void pmcraid_release_hcams(struct pmcraid_instance *pinstance)
4794 */ 4792 */
4795static int pmcraid_allocate_hcams(struct pmcraid_instance *pinstance) 4793static int pmcraid_allocate_hcams(struct pmcraid_instance *pinstance)
4796{ 4794{
4797 pinstance->ccn.msg = pci_alloc_consistent( 4795 pinstance->ccn.msg = dma_alloc_coherent(&pinstance->pdev->dev,
4798 pinstance->pdev,
4799 PMCRAID_AEN_HDR_SIZE + 4796 PMCRAID_AEN_HDR_SIZE +
4800 sizeof(struct pmcraid_hcam_ccn_ext), 4797 sizeof(struct pmcraid_hcam_ccn_ext),
4801 &(pinstance->ccn.baddr)); 4798 &pinstance->ccn.baddr, GFP_KERNEL);
4802 4799
4803 pinstance->ldn.msg = pci_alloc_consistent( 4800 pinstance->ldn.msg = dma_alloc_coherent(&pinstance->pdev->dev,
4804 pinstance->pdev,
4805 PMCRAID_AEN_HDR_SIZE + 4801 PMCRAID_AEN_HDR_SIZE +
4806 sizeof(struct pmcraid_hcam_ldn), 4802 sizeof(struct pmcraid_hcam_ldn),
4807 &(pinstance->ldn.baddr)); 4803 &pinstance->ldn.baddr, GFP_KERNEL);
4808 4804
4809 if (pinstance->ldn.msg == NULL || pinstance->ccn.msg == NULL) { 4805 if (pinstance->ldn.msg == NULL || pinstance->ccn.msg == NULL) {
4810 pmcraid_release_hcams(pinstance); 4806 pmcraid_release_hcams(pinstance);
@@ -4832,7 +4828,7 @@ static void pmcraid_release_config_buffers(struct pmcraid_instance *pinstance)
4832{ 4828{
4833 if (pinstance->cfg_table != NULL && 4829 if (pinstance->cfg_table != NULL &&
4834 pinstance->cfg_table_bus_addr != 0) { 4830 pinstance->cfg_table_bus_addr != 0) {
4835 pci_free_consistent(pinstance->pdev, 4831 dma_free_coherent(&pinstance->pdev->dev,
4836 sizeof(struct pmcraid_config_table), 4832 sizeof(struct pmcraid_config_table),
4837 pinstance->cfg_table, 4833 pinstance->cfg_table,
4838 pinstance->cfg_table_bus_addr); 4834 pinstance->cfg_table_bus_addr);
@@ -4877,10 +4873,10 @@ static int pmcraid_allocate_config_buffers(struct pmcraid_instance *pinstance)
4877 list_add_tail(&pinstance->res_entries[i].queue, 4873 list_add_tail(&pinstance->res_entries[i].queue,
4878 &pinstance->free_res_q); 4874 &pinstance->free_res_q);
4879 4875
4880 pinstance->cfg_table = 4876 pinstance->cfg_table = dma_alloc_coherent(&pinstance->pdev->dev,
4881 pci_alloc_consistent(pinstance->pdev,
4882 sizeof(struct pmcraid_config_table), 4877 sizeof(struct pmcraid_config_table),
4883 &pinstance->cfg_table_bus_addr); 4878 &pinstance->cfg_table_bus_addr,
4879 GFP_KERNEL);
4884 4880
4885 if (NULL == pinstance->cfg_table) { 4881 if (NULL == pinstance->cfg_table) {
4886 pmcraid_err("couldn't alloc DMA memory for config table\n"); 4882 pmcraid_err("couldn't alloc DMA memory for config table\n");
@@ -4945,7 +4941,7 @@ static void pmcraid_release_buffers(struct pmcraid_instance *pinstance)
4945 pmcraid_release_host_rrqs(pinstance, pinstance->num_hrrq); 4941 pmcraid_release_host_rrqs(pinstance, pinstance->num_hrrq);
4946 4942
4947 if (pinstance->inq_data != NULL) { 4943 if (pinstance->inq_data != NULL) {
4948 pci_free_consistent(pinstance->pdev, 4944 dma_free_coherent(&pinstance->pdev->dev,
4949 sizeof(struct pmcraid_inquiry_data), 4945 sizeof(struct pmcraid_inquiry_data),
4950 pinstance->inq_data, 4946 pinstance->inq_data,
4951 pinstance->inq_data_baddr); 4947 pinstance->inq_data_baddr);
@@ -4955,7 +4951,7 @@ static void pmcraid_release_buffers(struct pmcraid_instance *pinstance)
4955 } 4951 }
4956 4952
4957 if (pinstance->timestamp_data != NULL) { 4953 if (pinstance->timestamp_data != NULL) {
4958 pci_free_consistent(pinstance->pdev, 4954 dma_free_coherent(&pinstance->pdev->dev,
4959 sizeof(struct pmcraid_timestamp_data), 4955 sizeof(struct pmcraid_timestamp_data),
4960 pinstance->timestamp_data, 4956 pinstance->timestamp_data,
4961 pinstance->timestamp_data_baddr); 4957 pinstance->timestamp_data_baddr);
@@ -4972,8 +4968,8 @@ static void pmcraid_release_buffers(struct pmcraid_instance *pinstance)
4972 * This routine pre-allocates memory based on the type of block as below: 4968 * This routine pre-allocates memory based on the type of block as below:
4973 * cmdblocks(PMCRAID_MAX_CMD): kernel memory using kernel's slab_allocator, 4969 * cmdblocks(PMCRAID_MAX_CMD): kernel memory using kernel's slab_allocator,
4974 * IOARCBs(PMCRAID_MAX_CMD) : DMAable memory, using pci pool allocator 4970 * IOARCBs(PMCRAID_MAX_CMD) : DMAable memory, using pci pool allocator
4975 * config-table entries : DMAable memory using pci_alloc_consistent 4971 * config-table entries : DMAable memory using dma_alloc_coherent
4976 * HostRRQs : DMAable memory, using pci_alloc_consistent 4972 * HostRRQs : DMAable memory, using dma_alloc_coherent
4977 * 4973 *
4978 * Return Value 4974 * Return Value
4979 * 0 in case all of the blocks are allocated, -ENOMEM otherwise. 4975 * 0 in case all of the blocks are allocated, -ENOMEM otherwise.
@@ -5010,11 +5006,9 @@ static int pmcraid_init_buffers(struct pmcraid_instance *pinstance)
5010 } 5006 }
5011 5007
5012 /* allocate DMAable memory for page D0 INQUIRY buffer */ 5008 /* allocate DMAable memory for page D0 INQUIRY buffer */
5013 pinstance->inq_data = pci_alloc_consistent( 5009 pinstance->inq_data = dma_alloc_coherent(&pinstance->pdev->dev,
5014 pinstance->pdev,
5015 sizeof(struct pmcraid_inquiry_data), 5010 sizeof(struct pmcraid_inquiry_data),
5016 &pinstance->inq_data_baddr); 5011 &pinstance->inq_data_baddr, GFP_KERNEL);
5017
5018 if (pinstance->inq_data == NULL) { 5012 if (pinstance->inq_data == NULL) {
5019 pmcraid_err("couldn't allocate DMA memory for INQUIRY\n"); 5013 pmcraid_err("couldn't allocate DMA memory for INQUIRY\n");
5020 pmcraid_release_buffers(pinstance); 5014 pmcraid_release_buffers(pinstance);
@@ -5022,11 +5016,10 @@ static int pmcraid_init_buffers(struct pmcraid_instance *pinstance)
5022 } 5016 }
5023 5017
5024 /* allocate DMAable memory for set timestamp data buffer */ 5018 /* allocate DMAable memory for set timestamp data buffer */
5025 pinstance->timestamp_data = pci_alloc_consistent( 5019 pinstance->timestamp_data = dma_alloc_coherent(&pinstance->pdev->dev,
5026 pinstance->pdev,
5027 sizeof(struct pmcraid_timestamp_data), 5020 sizeof(struct pmcraid_timestamp_data),
5028 &pinstance->timestamp_data_baddr); 5021 &pinstance->timestamp_data_baddr,
5029 5022 GFP_KERNEL);
5030 if (pinstance->timestamp_data == NULL) { 5023 if (pinstance->timestamp_data == NULL) {
5031 pmcraid_err("couldn't allocate DMA memory for \ 5024 pmcraid_err("couldn't allocate DMA memory for \
5032 set time_stamp \n"); 5025 set time_stamp \n");
@@ -5315,12 +5308,12 @@ static int pmcraid_resume(struct pci_dev *pdev)
5315 5308
5316 pci_set_master(pdev); 5309 pci_set_master(pdev);
5317 5310
5318 if ((sizeof(dma_addr_t) == 4) || 5311 if (sizeof(dma_addr_t) == 4 ||
5319 pci_set_dma_mask(pdev, DMA_BIT_MASK(64))) 5312 dma_set_mask(&pdev->dev, DMA_BIT_MASK(64)))
5320 rc = pci_set_dma_mask(pdev, DMA_BIT_MASK(32)); 5313 rc = dma_set_mask(&pdev->dev, DMA_BIT_MASK(32));
5321 5314
5322 if (rc == 0) 5315 if (rc == 0)
5323 rc = pci_set_consistent_dma_mask(pdev, DMA_BIT_MASK(32)); 5316 rc = dma_set_coherent_mask(&pdev->dev, DMA_BIT_MASK(32));
5324 5317
5325 if (rc != 0) { 5318 if (rc != 0) {
5326 dev_err(&pdev->dev, "resume: Failed to set PCI DMA mask\n"); 5319 dev_err(&pdev->dev, "resume: Failed to set PCI DMA mask\n");
@@ -5724,19 +5717,19 @@ static int pmcraid_probe(struct pci_dev *pdev,
5724 /* Firmware requires the system bus address of IOARCB to be within 5717 /* Firmware requires the system bus address of IOARCB to be within
5725 * 32-bit addressable range though it has 64-bit IOARRIN register. 5718 * 32-bit addressable range though it has 64-bit IOARRIN register.
5726 * However, firmware supports 64-bit streaming DMA buffers, whereas 5719 * However, firmware supports 64-bit streaming DMA buffers, whereas
5727 * coherent buffers are to be 32-bit. Since pci_alloc_consistent always 5720 * coherent buffers are to be 32-bit. Since dma_alloc_coherent always
5728 * returns memory within 4GB (if not, change this logic), coherent 5721 * returns memory within 4GB (if not, change this logic), coherent
5729 * buffers are within firmware acceptable address ranges. 5722 * buffers are within firmware acceptable address ranges.
5730 */ 5723 */
5731 if ((sizeof(dma_addr_t) == 4) || 5724 if (sizeof(dma_addr_t) == 4 ||
5732 pci_set_dma_mask(pdev, DMA_BIT_MASK(64))) 5725 dma_set_mask(&pdev->dev, DMA_BIT_MASK(64)))
5733 rc = pci_set_dma_mask(pdev, DMA_BIT_MASK(32)); 5726 rc = dma_set_mask(&pdev->dev, DMA_BIT_MASK(32));
5734 5727
5735 /* firmware expects 32-bit DMA addresses for IOARRIN register; set 32 5728 /* firmware expects 32-bit DMA addresses for IOARRIN register; set 32
5736 * bit mask for pci_alloc_consistent to return addresses within 4GB 5729 * bit mask for dma_alloc_coherent to return addresses within 4GB
5737 */ 5730 */
5738 if (rc == 0) 5731 if (rc == 0)
5739 rc = pci_set_consistent_dma_mask(pdev, DMA_BIT_MASK(32)); 5732 rc = dma_set_coherent_mask(&pdev->dev, DMA_BIT_MASK(32));
5740 5733
5741 if (rc != 0) { 5734 if (rc != 0) {
5742 dev_err(&pdev->dev, "Failed to set PCI DMA mask\n"); 5735 dev_err(&pdev->dev, "Failed to set PCI DMA mask\n");