Skip to content

Commit f481973

Browse files
Mahesh Rajashekharamartinkpetersen
authored andcommitted
scsi: aacraid: pci_alloc_consistent() failures on ARM64
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>
1 parent 6cf1611 commit f481973

File tree

6 files changed

+35
-31
lines changed

6 files changed

+35
-31
lines changed

drivers/scsi/aacraid/aachba.c

Lines changed: 6 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1678,8 +1678,8 @@ int aac_issue_bmic_identify(struct aac_dev *dev, u32 bus, u32 target)
16781678
sizeof(struct sgentry) + sizeof(struct sgentry64);
16791679
datasize = sizeof(struct aac_ciss_identify_pd);
16801680

1681-
identify_resp = pci_alloc_consistent(dev->pdev, datasize, &addr);
1682-
1681+
identify_resp = dma_alloc_coherent(&dev->pdev->dev, datasize, &addr,
1682+
GFP_KERNEL);
16831683
if (!identify_resp)
16841684
goto fib_free_ptr;
16851685

@@ -1720,7 +1720,7 @@ int aac_issue_bmic_identify(struct aac_dev *dev, u32 bus, u32 target)
17201720
dev->hba_map[bus][target].qd_limit =
17211721
identify_resp->current_queue_depth_limit;
17221722

1723-
pci_free_consistent(dev->pdev, datasize, (void *)identify_resp, addr);
1723+
dma_free_coherent(&dev->pdev->dev, datasize, identify_resp, addr);
17241724

17251725
aac_fib_complete(fibptr);
17261726

@@ -1814,9 +1814,8 @@ int aac_report_phys_luns(struct aac_dev *dev, struct fib *fibptr, int rescan)
18141814
datasize = sizeof(struct aac_ciss_phys_luns_resp)
18151815
+ (AAC_MAX_TARGETS - 1) * sizeof(struct _ciss_lun);
18161816

1817-
phys_luns = (struct aac_ciss_phys_luns_resp *) pci_alloc_consistent(
1818-
dev->pdev, datasize, &addr);
1819-
1817+
phys_luns = dma_alloc_coherent(&dev->pdev->dev, datasize, &addr,
1818+
GFP_KERNEL);
18201819
if (phys_luns == NULL) {
18211820
rcode = -ENOMEM;
18221821
goto err_out;
@@ -1861,7 +1860,7 @@ int aac_report_phys_luns(struct aac_dev *dev, struct fib *fibptr, int rescan)
18611860
aac_update_hba_map(dev, phys_luns, rescan);
18621861
}
18631862

1864-
pci_free_consistent(dev->pdev, datasize, (void *) phys_luns, addr);
1863+
dma_free_coherent(&dev->pdev->dev, datasize, phys_luns, addr);
18651864
err_out:
18661865
return rcode;
18671866
}

drivers/scsi/aacraid/commctrl.c

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -100,7 +100,8 @@ static int ioctl_send_fib(struct aac_dev * dev, void __user *arg)
100100
goto cleanup;
101101
}
102102

103-
kfib = pci_alloc_consistent(dev->pdev, size, &daddr);
103+
kfib = dma_alloc_coherent(&dev->pdev->dev, size, &daddr,
104+
GFP_KERNEL);
104105
if (!kfib) {
105106
retval = -ENOMEM;
106107
goto cleanup;
@@ -160,7 +161,8 @@ static int ioctl_send_fib(struct aac_dev * dev, void __user *arg)
160161
retval = -EFAULT;
161162
cleanup:
162163
if (hw_fib) {
163-
pci_free_consistent(dev->pdev, size, kfib, fibptr->hw_fib_pa);
164+
dma_free_coherent(&dev->pdev->dev, size, kfib,
165+
fibptr->hw_fib_pa);
164166
fibptr->hw_fib_pa = hw_fib_pa;
165167
fibptr->hw_fib_va = hw_fib;
166168
}

drivers/scsi/aacraid/comminit.c

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -99,8 +99,7 @@ static int aac_alloc_comm(struct aac_dev *dev, void **commaddr, unsigned long co
9999
size = fibsize + aac_init_size + commsize + commalign +
100100
printfbufsiz + host_rrq_size;
101101

102-
base = pci_alloc_consistent(dev->pdev, size, &phys);
103-
102+
base = dma_alloc_coherent(&dev->pdev->dev, size, &phys, GFP_KERNEL);
104103
if (base == NULL) {
105104
printk(KERN_ERR "aacraid: unable to create mapping.\n");
106105
return 0;

drivers/scsi/aacraid/commsup.c

Lines changed: 11 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -73,13 +73,13 @@ static int fib_map_alloc(struct aac_dev *dev)
7373
}
7474

7575
dprintk((KERN_INFO
76-
"allocate hardware fibs pci_alloc_consistent(%p, %d * (%d + %d), %p)\n",
77-
dev->pdev, dev->max_cmd_size, dev->scsi_host_ptr->can_queue,
76+
"allocate hardware fibs dma_alloc_coherent(%p, %d * (%d + %d), %p)\n",
77+
&dev->pdev->dev, dev->max_cmd_size, dev->scsi_host_ptr->can_queue,
7878
AAC_NUM_MGT_FIB, &dev->hw_fib_pa));
79-
dev->hw_fib_va = pci_alloc_consistent(dev->pdev,
79+
dev->hw_fib_va = dma_alloc_coherent(&dev->pdev->dev,
8080
(dev->max_cmd_size + sizeof(struct aac_fib_xporthdr))
8181
* (dev->scsi_host_ptr->can_queue + AAC_NUM_MGT_FIB) + (ALIGN32 - 1),
82-
&dev->hw_fib_pa);
82+
&dev->hw_fib_pa, GFP_KERNEL);
8383
if (dev->hw_fib_va == NULL)
8484
return -ENOMEM;
8585
return 0;
@@ -106,8 +106,8 @@ void aac_fib_map_free(struct aac_dev *dev)
106106
fib_size = dev->max_fib_size + sizeof(struct aac_fib_xporthdr);
107107
alloc_size = fib_size * num_fibs + ALIGN32 - 1;
108108

109-
pci_free_consistent(dev->pdev, alloc_size, dev->hw_fib_va,
110-
dev->hw_fib_pa);
109+
dma_free_coherent(&dev->pdev->dev, alloc_size, dev->hw_fib_va,
110+
dev->hw_fib_pa);
111111

112112
dev->hw_fib_va = NULL;
113113
dev->hw_fib_pa = 0;
@@ -1571,7 +1571,8 @@ static int _aac_reset_adapter(struct aac_dev *aac, int forced, u8 reset_type)
15711571
* case.
15721572
*/
15731573
aac_fib_map_free(aac);
1574-
pci_free_consistent(aac->pdev, aac->comm_size, aac->comm_addr, aac->comm_phys);
1574+
dma_free_coherent(&aac->pdev->dev, aac->comm_size, aac->comm_addr,
1575+
aac->comm_phys);
15751576
aac->comm_addr = NULL;
15761577
aac->comm_phys = 0;
15771578
kfree(aac->queues);
@@ -2320,7 +2321,8 @@ static int aac_send_wellness_command(struct aac_dev *dev, char *wellness_str,
23202321
if (!fibptr)
23212322
goto out;
23222323

2323-
dma_buf = pci_alloc_consistent(dev->pdev, datasize, &addr);
2324+
dma_buf = dma_alloc_coherent(&dev->pdev->dev, datasize, &addr,
2325+
GFP_KERNEL);
23242326
if (!dma_buf)
23252327
goto fib_free_out;
23262328

@@ -2355,7 +2357,7 @@ static int aac_send_wellness_command(struct aac_dev *dev, char *wellness_str,
23552357
ret = aac_fib_send(ScsiPortCommand64, fibptr, sizeof(struct aac_srb),
23562358
FsaNormal, 1, 1, NULL, NULL);
23572359

2358-
pci_free_consistent(dev->pdev, datasize, (void *)dma_buf, addr);
2360+
dma_free_coherent(&dev->pdev->dev, datasize, dma_buf, addr);
23592361

23602362
/*
23612363
* Do not set XferState to zero unless

drivers/scsi/aacraid/linit.c

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1592,8 +1592,8 @@ static int aac_probe_one(struct pci_dev *pdev, const struct pci_device_id *id)
15921592
out_unmap:
15931593
aac_fib_map_free(aac);
15941594
if (aac->comm_addr)
1595-
pci_free_consistent(aac->pdev, aac->comm_size, aac->comm_addr,
1596-
aac->comm_phys);
1595+
dma_free_coherent(&aac->pdev->dev, aac->comm_size,
1596+
aac->comm_addr, aac->comm_phys);
15971597
kfree(aac->queues);
15981598
aac_adapter_ioremap(aac, 0);
15991599
kfree(aac->fibs);
@@ -1729,8 +1729,8 @@ static void aac_remove_one(struct pci_dev *pdev)
17291729

17301730
__aac_shutdown(aac);
17311731
aac_fib_map_free(aac);
1732-
pci_free_consistent(aac->pdev, aac->comm_size, aac->comm_addr,
1733-
aac->comm_phys);
1732+
dma_free_coherent(&aac->pdev->dev, aac->comm_size, aac->comm_addr,
1733+
aac->comm_phys);
17341734
kfree(aac->queues);
17351735

17361736
aac_adapter_ioremap(aac, 0);

drivers/scsi/aacraid/rx.c

Lines changed: 9 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -355,14 +355,16 @@ static int aac_rx_check_health(struct aac_dev *dev)
355355

356356
if (likely((status & 0xFF000000L) == 0xBC000000L))
357357
return (status >> 16) & 0xFF;
358-
buffer = pci_alloc_consistent(dev->pdev, 512, &baddr);
358+
buffer = dma_alloc_coherent(&dev->pdev->dev, 512, &baddr,
359+
GFP_KERNEL);
359360
ret = -2;
360361
if (unlikely(buffer == NULL))
361362
return ret;
362-
post = pci_alloc_consistent(dev->pdev,
363-
sizeof(struct POSTSTATUS), &paddr);
363+
post = dma_alloc_coherent(&dev->pdev->dev,
364+
sizeof(struct POSTSTATUS), &paddr,
365+
GFP_KERNEL);
364366
if (unlikely(post == NULL)) {
365-
pci_free_consistent(dev->pdev, 512, buffer, baddr);
367+
dma_free_coherent(&dev->pdev->dev, 512, buffer, baddr);
366368
return ret;
367369
}
368370
memset(buffer, 0, 512);
@@ -371,13 +373,13 @@ static int aac_rx_check_health(struct aac_dev *dev)
371373
rx_writel(dev, MUnit.IMRx[0], paddr);
372374
rx_sync_cmd(dev, COMMAND_POST_RESULTS, baddr, 0, 0, 0, 0, 0,
373375
NULL, NULL, NULL, NULL, NULL);
374-
pci_free_consistent(dev->pdev, sizeof(struct POSTSTATUS),
375-
post, paddr);
376+
dma_free_coherent(&dev->pdev->dev, sizeof(struct POSTSTATUS),
377+
post, paddr);
376378
if (likely((buffer[0] == '0') && ((buffer[1] == 'x') || (buffer[1] == 'X')))) {
377379
ret = (hex_to_bin(buffer[2]) << 4) +
378380
hex_to_bin(buffer[3]);
379381
}
380-
pci_free_consistent(dev->pdev, 512, buffer, baddr);
382+
dma_free_coherent(&dev->pdev->dev, 512, buffer, baddr);
381383
return ret;
382384
}
383385
/*

0 commit comments

Comments
 (0)