]> git.proxmox.com Git - mirror_ubuntu-bionic-kernel.git/commitdiff
scsi: aacraid: pci_alloc_consistent() failures on ARM64
authorMahesh Rajashekhara <mahesh.rajashekhara@microsemi.com>
Wed, 5 Apr 2017 10:44:16 +0000 (16:14 +0530)
committerMartin K. Petersen <martin.petersen@oracle.com>
Wed, 26 Apr 2017 22:28:06 +0000 (18:28 -0400)
There were pci_alloc_consistent() failures on ARM64 platform.  Use
dma_alloc_coherent() with GFP_KERNEL flag DMA memory allocations.

Signed-off-by: Mahesh Rajashekhara <mahesh.rajashekhara@microsemi.com>
[hch: tweaked indentation, removed memsets]
Signed-off-by: Christoph Hellwig <hch@lst.de>
Acked-by: Dave Carroll <david.carroll@microsemi.com>
Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
drivers/scsi/aacraid/aachba.c
drivers/scsi/aacraid/commctrl.c
drivers/scsi/aacraid/comminit.c
drivers/scsi/aacraid/commsup.c
drivers/scsi/aacraid/linit.c
drivers/scsi/aacraid/rx.c

index e3e93def722b045b4c690d5c9490173e2bee5665..43d88389e899fb2f992fbf9b1868204437f1c0da 100644 (file)
@@ -1678,8 +1678,8 @@ int aac_issue_bmic_identify(struct aac_dev *dev, u32 bus, u32 target)
                        sizeof(struct sgentry) + sizeof(struct sgentry64);
        datasize = sizeof(struct aac_ciss_identify_pd);
 
-       identify_resp =  pci_alloc_consistent(dev->pdev, datasize, &addr);
-
+       identify_resp = dma_alloc_coherent(&dev->pdev->dev, datasize, &addr,
+                                          GFP_KERNEL);
        if (!identify_resp)
                goto fib_free_ptr;
 
@@ -1720,7 +1720,7 @@ int aac_issue_bmic_identify(struct aac_dev *dev, u32 bus, u32 target)
                dev->hba_map[bus][target].qd_limit =
                        identify_resp->current_queue_depth_limit;
 
-       pci_free_consistent(dev->pdev, datasize, (void *)identify_resp, addr);
+       dma_free_coherent(&dev->pdev->dev, datasize, identify_resp, addr);
 
        aac_fib_complete(fibptr);
 
@@ -1814,9 +1814,8 @@ int aac_report_phys_luns(struct aac_dev *dev, struct fib *fibptr, int rescan)
        datasize = sizeof(struct aac_ciss_phys_luns_resp)
                        + (AAC_MAX_TARGETS - 1) * sizeof(struct _ciss_lun);
 
-       phys_luns = (struct aac_ciss_phys_luns_resp *) pci_alloc_consistent(
-                       dev->pdev, datasize, &addr);
-
+       phys_luns = dma_alloc_coherent(&dev->pdev->dev, datasize, &addr,
+                                      GFP_KERNEL);
        if (phys_luns == NULL) {
                rcode = -ENOMEM;
                goto err_out;
@@ -1861,7 +1860,7 @@ int aac_report_phys_luns(struct aac_dev *dev, struct fib *fibptr, int rescan)
                aac_update_hba_map(dev, phys_luns, rescan);
        }
 
-       pci_free_consistent(dev->pdev, datasize, (void *) phys_luns, addr);
+       dma_free_coherent(&dev->pdev->dev, datasize, phys_luns, addr);
 err_out:
        return rcode;
 }
index f6afd50579c038bcf0f2257a62733a828344e59d..d2f8d5954840e739d38b86a023a9651dc89b7fcb 100644 (file)
@@ -100,7 +100,8 @@ static int ioctl_send_fib(struct aac_dev * dev, void __user *arg)
                        goto cleanup;
                }
 
-               kfib = pci_alloc_consistent(dev->pdev, size, &daddr);
+               kfib = dma_alloc_coherent(&dev->pdev->dev, size, &daddr,
+                                         GFP_KERNEL);
                if (!kfib) {
                        retval = -ENOMEM;
                        goto cleanup;
@@ -160,7 +161,8 @@ static int ioctl_send_fib(struct aac_dev * dev, void __user *arg)
                retval = -EFAULT;
 cleanup:
        if (hw_fib) {
-               pci_free_consistent(dev->pdev, size, kfib, fibptr->hw_fib_pa);
+               dma_free_coherent(&dev->pdev->dev, size, kfib,
+                                 fibptr->hw_fib_pa);
                fibptr->hw_fib_pa = hw_fib_pa;
                fibptr->hw_fib_va = hw_fib;
        }
index 35607005f7e1fbf920581c772e7f0c000ee9d876..1151505853cf8c75d27a9335916bfe72f4cccc62 100644 (file)
@@ -99,8 +99,7 @@ static int aac_alloc_comm(struct aac_dev *dev, void **commaddr, unsigned long co
        size = fibsize + aac_init_size + commsize + commalign +
                        printfbufsiz + host_rrq_size;
 
-       base = pci_alloc_consistent(dev->pdev, size, &phys);
-
+       base = dma_alloc_coherent(&dev->pdev->dev, size, &phys, GFP_KERNEL);
        if (base == NULL) {
                printk(KERN_ERR "aacraid: unable to create mapping.\n");
                return 0;
index a3ad042934870d4bd8bd5ded29a00516156d9168..d08920d4b92c5fc3940ec47a4a35a66be5fb26c0 100644 (file)
@@ -73,13 +73,13 @@ static int fib_map_alloc(struct aac_dev *dev)
        }
 
        dprintk((KERN_INFO
-         "allocate hardware fibs pci_alloc_consistent(%p, %d * (%d + %d), %p)\n",
-         dev->pdev, dev->max_cmd_size, dev->scsi_host_ptr->can_queue,
+         "allocate hardware fibs dma_alloc_coherent(%p, %d * (%d + %d), %p)\n",
+         &dev->pdev->dev, dev->max_cmd_size, dev->scsi_host_ptr->can_queue,
          AAC_NUM_MGT_FIB, &dev->hw_fib_pa));
-       dev->hw_fib_va = pci_alloc_consistent(dev->pdev,
+       dev->hw_fib_va = dma_alloc_coherent(&dev->pdev->dev,
                (dev->max_cmd_size + sizeof(struct aac_fib_xporthdr))
                * (dev->scsi_host_ptr->can_queue + AAC_NUM_MGT_FIB) + (ALIGN32 - 1),
-               &dev->hw_fib_pa);
+               &dev->hw_fib_pa, GFP_KERNEL);
        if (dev->hw_fib_va == NULL)
                return -ENOMEM;
        return 0;
@@ -106,8 +106,8 @@ void aac_fib_map_free(struct aac_dev *dev)
        fib_size = dev->max_fib_size + sizeof(struct aac_fib_xporthdr);
        alloc_size = fib_size * num_fibs + ALIGN32 - 1;
 
-       pci_free_consistent(dev->pdev, alloc_size, dev->hw_fib_va,
-                                                       dev->hw_fib_pa);
+       dma_free_coherent(&dev->pdev->dev, alloc_size, dev->hw_fib_va,
+                         dev->hw_fib_pa);
 
        dev->hw_fib_va = NULL;
        dev->hw_fib_pa = 0;
@@ -1571,7 +1571,8 @@ static int _aac_reset_adapter(struct aac_dev *aac, int forced, u8 reset_type)
         * case.
         */
        aac_fib_map_free(aac);
-       pci_free_consistent(aac->pdev, aac->comm_size, aac->comm_addr, aac->comm_phys);
+       dma_free_coherent(&aac->pdev->dev, aac->comm_size, aac->comm_addr,
+                         aac->comm_phys);
        aac->comm_addr = NULL;
        aac->comm_phys = 0;
        kfree(aac->queues);
@@ -2320,7 +2321,8 @@ static int aac_send_wellness_command(struct aac_dev *dev, char *wellness_str,
        if (!fibptr)
                goto out;
 
-       dma_buf = pci_alloc_consistent(dev->pdev, datasize, &addr);
+       dma_buf = dma_alloc_coherent(&dev->pdev->dev, datasize, &addr,
+                                    GFP_KERNEL);
        if (!dma_buf)
                goto fib_free_out;
 
@@ -2355,7 +2357,7 @@ static int aac_send_wellness_command(struct aac_dev *dev, char *wellness_str,
        ret = aac_fib_send(ScsiPortCommand64, fibptr, sizeof(struct aac_srb),
                                FsaNormal, 1, 1, NULL, NULL);
 
-       pci_free_consistent(dev->pdev, datasize, (void *)dma_buf, addr);
+       dma_free_coherent(&dev->pdev->dev, datasize, dma_buf, addr);
 
        /*
         * Do not set XferState to zero unless
index 520ada8266af10c586d3c9994187f1352dc78478..372a075330263ab0d0d289b3583d72823e29f597 100644 (file)
@@ -1592,8 +1592,8 @@ static int aac_probe_one(struct pci_dev *pdev, const struct pci_device_id *id)
  out_unmap:
        aac_fib_map_free(aac);
        if (aac->comm_addr)
-               pci_free_consistent(aac->pdev, aac->comm_size, aac->comm_addr,
-                 aac->comm_phys);
+               dma_free_coherent(&aac->pdev->dev, aac->comm_size,
+                                 aac->comm_addr, aac->comm_phys);
        kfree(aac->queues);
        aac_adapter_ioremap(aac, 0);
        kfree(aac->fibs);
@@ -1729,8 +1729,8 @@ static void aac_remove_one(struct pci_dev *pdev)
 
        __aac_shutdown(aac);
        aac_fib_map_free(aac);
-       pci_free_consistent(aac->pdev, aac->comm_size, aac->comm_addr,
-                       aac->comm_phys);
+       dma_free_coherent(&aac->pdev->dev, aac->comm_size, aac->comm_addr,
+                         aac->comm_phys);
        kfree(aac->queues);
 
        aac_adapter_ioremap(aac, 0);
index 5d19c31e3bbac58b9f63908af81c656545c43690..93ef7c37e568e0e2ca4a38d8a08dd1b987482626 100644 (file)
@@ -355,14 +355,16 @@ static int aac_rx_check_health(struct aac_dev *dev)
 
                if (likely((status & 0xFF000000L) == 0xBC000000L))
                        return (status >> 16) & 0xFF;
-               buffer = pci_alloc_consistent(dev->pdev, 512, &baddr);
+               buffer = dma_alloc_coherent(&dev->pdev->dev, 512, &baddr,
+                                           GFP_KERNEL);
                ret = -2;
                if (unlikely(buffer == NULL))
                        return ret;
-               post = pci_alloc_consistent(dev->pdev,
-                 sizeof(struct POSTSTATUS), &paddr);
+               post = dma_alloc_coherent(&dev->pdev->dev,
+                                         sizeof(struct POSTSTATUS), &paddr,
+                                         GFP_KERNEL);
                if (unlikely(post == NULL)) {
-                       pci_free_consistent(dev->pdev, 512, buffer, baddr);
+                       dma_free_coherent(&dev->pdev->dev, 512, buffer, baddr);
                        return ret;
                }
                memset(buffer, 0, 512);
@@ -371,13 +373,13 @@ static int aac_rx_check_health(struct aac_dev *dev)
                rx_writel(dev, MUnit.IMRx[0], paddr);
                rx_sync_cmd(dev, COMMAND_POST_RESULTS, baddr, 0, 0, 0, 0, 0,
                  NULL, NULL, NULL, NULL, NULL);
-               pci_free_consistent(dev->pdev, sizeof(struct POSTSTATUS),
-                 post, paddr);
+               dma_free_coherent(&dev->pdev->dev, sizeof(struct POSTSTATUS),
+                                 post, paddr);
                if (likely((buffer[0] == '0') && ((buffer[1] == 'x') || (buffer[1] == 'X')))) {
                        ret = (hex_to_bin(buffer[2]) << 4) +
                                hex_to_bin(buffer[3]);
                }
-               pci_free_consistent(dev->pdev, 512, buffer, baddr);
+               dma_free_coherent(&dev->pdev->dev, 512, buffer, baddr);
                return ret;
        }
        /*