[PATCH v2 0/5] Clean up DMA API & IOMMU dma_addr_t usage

From: Bjorn Helgaas
Date: Tue May 06 2014 - 18:48:10 EST


I thought this was going to be a simple doc clarification patch, but
it's suffered a bit of feature creep.

The main point is that the DMA API uses "dma_addr_t" as the type for
addresses to be programmed into devices for doing DMA, but the
documentation sometimes refers to these as "bus addresses" and sometimes as
"physical addresses." So I tried to use "bus address" consistently.

I added a few comments about what dma_addr_t is. These are likely the most
controversial changes. For example:

A dma_addr_t can hold any valid DMA or bus address for the platform.
It can be given to a device to use as a DMA source or target, or it
may appear on the bus when a cpu performs programmed I/O. A cpu
cannot reference a dma_addr_t directly because there may be
translation between its physical address space and the bus address
space.

This type can hold any valid DMA or bus address for the platform and
should be used everywhere you hold a DMA address returned from the DMA
mapping functions or a bus address read from a device register such as a
PCI BAR.

I also made minor capitalization, punctuation, and wording changes for
consistency and clarity.

Secondly, dma_declare_coherent_memory() takes two addresses for a region of
memory: a "dma_addr_t bus_addr" and a "dma_addr_t device_addr". I thought
this was misleading, so the second patch converts "bus_addr" to a
"phys_addr_t phys_addr" since it should be a CPU physical address suitable
for ioremapping.

The third patch fixes up one dma_declare_coherent_memory() caller to
convert a PCI bus address to a CPU physical address (only a theoretical
issue, since they are identical on the affected platform).

Some of the IOMMU API uses dma_addr_t for bus addresses (also known as
IOVAs), but not all of it, so the fourth patch uses dma_addr_t more
consistently.

The last patch is a trivial cleanup of exynos_iommu_ops to be consistent
with other iommu_ops structures.

---

Bjorn Helgaas (5):
DMA-API: Clarify physical/bus address distinction
DMA-API: Change dma_declare_coherent_memory() CPU address to phys_addr_t
sh/PCI: Pass GAPSPCI_DMA_BASE CPU address to dma_declare_coherent_memory()
iommu: Use dma_addr_t for IOVA arguments
iommu/exynos: Remove unnecessary "&" from function pointers


Documentation/DMA-API-HOWTO.txt | 122 +++++++++++--------------
Documentation/DMA-API.txt | 149 ++++++++++++++++--------------
Documentation/DMA-ISA-LPC.txt | 4 -
arch/sh/drivers/pci/fixups-dreamcast.c | 8 +-
drivers/base/dma-coherent.c | 10 +-
drivers/base/dma-mapping.c | 6 +
drivers/gpu/drm/msm/msm_iommu.c | 2
drivers/infiniband/hw/usnic/usnic_uiom.c | 2
drivers/iommu/amd_iommu.c | 4 -
drivers/iommu/arm-smmu.c | 4 -
drivers/iommu/exynos-iommu.c | 18 ++--
drivers/iommu/intel-iommu.c | 4 -
drivers/iommu/iommu.c | 6 +
drivers/iommu/msm_iommu.c | 6 +
drivers/iommu/omap-iommu.c | 4 -
drivers/iommu/shmobile-iommu.c | 4 -
drivers/iommu/tegra-gart.c | 4 -
drivers/iommu/tegra-smmu.c | 4 -
drivers/remoteproc/remoteproc_core.c | 2
include/asm-generic/dma-coherent.h | 13 +--
include/linux/dma-mapping.h | 14 ++-
include/linux/iommu.h | 16 ++-
include/linux/types.h | 1
23 files changed, 208 insertions(+), 199 deletions(-)
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/