diff options
Diffstat (limited to 'drivers/dma/ioat/dma.c')
-rw-r--r-- | drivers/dma/ioat/dma.c | 11 |
1 files changed, 7 insertions, 4 deletions
diff --git a/drivers/dma/ioat/dma.c b/drivers/dma/ioat/dma.c index 1a68a8ba87e6..1879a5942bfc 100644 --- a/drivers/dma/ioat/dma.c +++ b/drivers/dma/ioat/dma.c | |||
@@ -833,14 +833,14 @@ int ioat_dma_self_test(struct ioatdma_device *device) | |||
833 | 833 | ||
834 | dma_src = dma_map_single(dev, src, IOAT_TEST_SIZE, DMA_TO_DEVICE); | 834 | dma_src = dma_map_single(dev, src, IOAT_TEST_SIZE, DMA_TO_DEVICE); |
835 | dma_dest = dma_map_single(dev, dest, IOAT_TEST_SIZE, DMA_FROM_DEVICE); | 835 | dma_dest = dma_map_single(dev, dest, IOAT_TEST_SIZE, DMA_FROM_DEVICE); |
836 | flags = DMA_COMPL_SRC_UNMAP_SINGLE | DMA_COMPL_DEST_UNMAP_SINGLE | | 836 | flags = DMA_COMPL_SKIP_SRC_UNMAP | DMA_COMPL_SKIP_DEST_UNMAP | |
837 | DMA_PREP_INTERRUPT; | 837 | DMA_PREP_INTERRUPT; |
838 | tx = device->common.device_prep_dma_memcpy(dma_chan, dma_dest, dma_src, | 838 | tx = device->common.device_prep_dma_memcpy(dma_chan, dma_dest, dma_src, |
839 | IOAT_TEST_SIZE, flags); | 839 | IOAT_TEST_SIZE, flags); |
840 | if (!tx) { | 840 | if (!tx) { |
841 | dev_err(dev, "Self-test prep failed, disabling\n"); | 841 | dev_err(dev, "Self-test prep failed, disabling\n"); |
842 | err = -ENODEV; | 842 | err = -ENODEV; |
843 | goto free_resources; | 843 | goto unmap_dma; |
844 | } | 844 | } |
845 | 845 | ||
846 | async_tx_ack(tx); | 846 | async_tx_ack(tx); |
@@ -851,7 +851,7 @@ int ioat_dma_self_test(struct ioatdma_device *device) | |||
851 | if (cookie < 0) { | 851 | if (cookie < 0) { |
852 | dev_err(dev, "Self-test setup failed, disabling\n"); | 852 | dev_err(dev, "Self-test setup failed, disabling\n"); |
853 | err = -ENODEV; | 853 | err = -ENODEV; |
854 | goto free_resources; | 854 | goto unmap_dma; |
855 | } | 855 | } |
856 | dma->device_issue_pending(dma_chan); | 856 | dma->device_issue_pending(dma_chan); |
857 | 857 | ||
@@ -862,7 +862,7 @@ int ioat_dma_self_test(struct ioatdma_device *device) | |||
862 | != DMA_SUCCESS) { | 862 | != DMA_SUCCESS) { |
863 | dev_err(dev, "Self-test copy timed out, disabling\n"); | 863 | dev_err(dev, "Self-test copy timed out, disabling\n"); |
864 | err = -ENODEV; | 864 | err = -ENODEV; |
865 | goto free_resources; | 865 | goto unmap_dma; |
866 | } | 866 | } |
867 | if (memcmp(src, dest, IOAT_TEST_SIZE)) { | 867 | if (memcmp(src, dest, IOAT_TEST_SIZE)) { |
868 | dev_err(dev, "Self-test copy failed compare, disabling\n"); | 868 | dev_err(dev, "Self-test copy failed compare, disabling\n"); |
@@ -870,6 +870,9 @@ int ioat_dma_self_test(struct ioatdma_device *device) | |||
870 | goto free_resources; | 870 | goto free_resources; |
871 | } | 871 | } |
872 | 872 | ||
873 | unmap_dma: | ||
874 | dma_unmap_single(dev, dma_src, IOAT_TEST_SIZE, DMA_TO_DEVICE); | ||
875 | dma_unmap_single(dev, dma_dest, IOAT_TEST_SIZE, DMA_FROM_DEVICE); | ||
873 | free_resources: | 876 | free_resources: |
874 | dma->device_free_chan_resources(dma_chan); | 877 | dma->device_free_chan_resources(dma_chan); |
875 | out: | 878 | out: |