Thread (25 messages) 25 messages, 6 authors, 2012-01-26

[PATCH v3 0/2] ARM: IOMMU: tegra: Add iommu_ops for GART/SMMU driver

From: Russell King - ARM Linux <hidden>
Date: 2012-01-05 12:53:45
Also in: linux-tegra, lkml

On Thu, Jan 05, 2012 at 09:17:18AM +0200, Hiroshi Doyu wrote:
Just for DMA mapping test from MPU side, the following one is used.
This patch is buggy.
+static void dmaapi_test_map_page(struct device *dev)
+{
+	struct page *page;
+	dma_addr_t dma_addr;
+	void *cpu_addr;
+
+	page = alloc_page(GFP_KERNEL);
+	BUG_ON(!page);
+
+	dma_addr = dma_map_page(dev, page, 0, PAGE_SIZE, DMA_TO_DEVICE);
+	BUG_ON(!dma_addr);
+
+	cpu_addr = kmap(page);
+	BUG_ON(!cpu_addr);
+	memset(cpu_addr, 0xa5, PAGE_SIZE);
+	kunmap(cpu_addr);
The DMA API works like this:

- The CPU owns the page or buffer and can access it.
- You map the page or buffer.
- The device owns the page or buffer; the CPU must explicitly access it.
- You unmap the page or buffer.
- The CPU again owns the page/buffer and can access it.

Please respect the DMA API rules.

So.  Once dma_map_page() has returned, you must not kmap() or otherwise
access the data contained in that page until after you have unmapped it.
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help