aboutsummaryrefslogtreecommitdiffstats
path: root/lib/dma-debug.c
diff options
context:
space:
mode:
authorKrzysztof Halasa <[email protected]>2010-01-08 22:42:36 +0000
committerLinus Torvalds <[email protected]>2010-01-11 17:34:04 +0000
commit42d53b4ff7d61487d18274ebdf1f70c1aef6f122 (patch)
tree55ef141c2c6e9ef52c724dd6aec03a8708d288b1 /lib/dma-debug.c
parentkmemcheck: make bitfield annotations truly no-ops when disabled (diff)
downloadkernel-42d53b4ff7d61487d18274ebdf1f70c1aef6f122.tar.gz
kernel-42d53b4ff7d61487d18274ebdf1f70c1aef6f122.zip
dma-debug: allow DMA_BIDIRECTIONAL mappings to be synced with DMA_FROM_DEVICE and
There is no need to perform full BIDIR sync (copying the buffers in case of swiotlb and similar schemes) if we know that the owner (CPU or device) hasn't altered the data. Addresses the false-positive reported at http://bugzilla.kernel.org/show_bug.cgi?id=14169 Signed-off-by: Krzysztof Halasa <[email protected]> Cc: David Miller <[email protected]> Cc: Joerg Roedel <[email protected]> Cc: <[email protected]> Signed-off-by: Andrew Morton <[email protected]> Signed-off-by: Linus Torvalds <[email protected]>
Diffstat (limited to 'lib/dma-debug.c')
-rw-r--r--lib/dma-debug.c7
1 files changed, 3 insertions, 4 deletions
diff --git a/lib/dma-debug.c b/lib/dma-debug.c
index cf906201aecf..7d2f0b33e5a8 100644
--- a/lib/dma-debug.c
+++ b/lib/dma-debug.c
@@ -913,6 +913,9 @@ static void check_sync(struct device *dev,
ref->size);
}
+ if (entry->direction == DMA_BIDIRECTIONAL)
+ goto out;
+
if (ref->direction != entry->direction) {
err_printk(dev, entry, "DMA-API: device driver syncs "
"DMA memory with different direction "
@@ -923,9 +926,6 @@ static void check_sync(struct device *dev,
dir2name[ref->direction]);
}
- if (entry->direction == DMA_BIDIRECTIONAL)
- goto out;
-
if (to_cpu && !(entry->direction == DMA_FROM_DEVICE) &&
!(ref->direction == DMA_TO_DEVICE))
err_printk(dev, entry, "DMA-API: device driver syncs "
@@ -948,7 +948,6 @@ static void check_sync(struct device *dev,
out:
put_hash_bucket(bucket, &flags);
-
}
void debug_dma_map_page(struct device *dev, struct page *page, size_t offset,