|
@@ -833,14 +833,14 @@ int __devinit ioat_dma_self_test(struct ioatdma_device *device)
|
|
|
|
|
|
dma_src = dma_map_single(dev, src, IOAT_TEST_SIZE, DMA_TO_DEVICE);
|
|
|
dma_dest = dma_map_single(dev, dest, IOAT_TEST_SIZE, DMA_FROM_DEVICE);
|
|
|
- flags = DMA_COMPL_SRC_UNMAP_SINGLE | DMA_COMPL_DEST_UNMAP_SINGLE |
|
|
|
+ flags = DMA_COMPL_SKIP_SRC_UNMAP | DMA_COMPL_SKIP_DEST_UNMAP |
|
|
|
DMA_PREP_INTERRUPT;
|
|
|
tx = device->common.device_prep_dma_memcpy(dma_chan, dma_dest, dma_src,
|
|
|
IOAT_TEST_SIZE, flags);
|
|
|
if (!tx) {
|
|
|
dev_err(dev, "Self-test prep failed, disabling\n");
|
|
|
err = -ENODEV;
|
|
|
- goto free_resources;
|
|
|
+ goto unmap_dma;
|
|
|
}
|
|
|
|
|
|
async_tx_ack(tx);
|
|
@@ -851,7 +851,7 @@ int __devinit ioat_dma_self_test(struct ioatdma_device *device)
|
|
|
if (cookie < 0) {
|
|
|
dev_err(dev, "Self-test setup failed, disabling\n");
|
|
|
err = -ENODEV;
|
|
|
- goto free_resources;
|
|
|
+ goto unmap_dma;
|
|
|
}
|
|
|
dma->device_issue_pending(dma_chan);
|
|
|
|
|
@@ -862,7 +862,7 @@ int __devinit ioat_dma_self_test(struct ioatdma_device *device)
|
|
|
!= DMA_SUCCESS) {
|
|
|
dev_err(dev, "Self-test copy timed out, disabling\n");
|
|
|
err = -ENODEV;
|
|
|
- goto free_resources;
|
|
|
+ goto unmap_dma;
|
|
|
}
|
|
|
if (memcmp(src, dest, IOAT_TEST_SIZE)) {
|
|
|
dev_err(dev, "Self-test copy failed compare, disabling\n");
|
|
@@ -870,6 +870,9 @@ int __devinit ioat_dma_self_test(struct ioatdma_device *device)
|
|
|
goto free_resources;
|
|
|
}
|
|
|
|
|
|
+unmap_dma:
|
|
|
+ dma_unmap_single(dev, dma_src, IOAT_TEST_SIZE, DMA_TO_DEVICE);
|
|
|
+ dma_unmap_single(dev, dma_dest, IOAT_TEST_SIZE, DMA_FROM_DEVICE);
|
|
|
free_resources:
|
|
|
dma->device_free_chan_resources(dma_chan);
|
|
|
out:
|