vmd: use the proper dma_* APIs instead of direct methods calls
With the bypass support for the direct mapping we might not always have methods to call, so use the proper APIs instead. The only downside is that we will create two dma-debug entries for each mapping if CONFIG_DMA_DEBUG is enabled. Signed-off-by: Christoph Hellwig <hch@lst.de> Acked-by: Jesper Dangaard Brouer <brouer@redhat.com> Tested-by: Jesper Dangaard Brouer <brouer@redhat.com> Tested-by: Tony Luck <tony.luck@intel.com>
This commit is contained in:
parent
55897af630
commit
190d4e5916
|
@ -307,39 +307,32 @@ static struct device *to_vmd_dev(struct device *dev)
|
||||||
return &vmd->dev->dev;
|
return &vmd->dev->dev;
|
||||||
}
|
}
|
||||||
|
|
||||||
static const struct dma_map_ops *vmd_dma_ops(struct device *dev)
|
|
||||||
{
|
|
||||||
return get_dma_ops(to_vmd_dev(dev));
|
|
||||||
}
|
|
||||||
|
|
||||||
static void *vmd_alloc(struct device *dev, size_t size, dma_addr_t *addr,
|
static void *vmd_alloc(struct device *dev, size_t size, dma_addr_t *addr,
|
||||||
gfp_t flag, unsigned long attrs)
|
gfp_t flag, unsigned long attrs)
|
||||||
{
|
{
|
||||||
return vmd_dma_ops(dev)->alloc(to_vmd_dev(dev), size, addr, flag,
|
return dma_alloc_attrs(to_vmd_dev(dev), size, addr, flag, attrs);
|
||||||
attrs);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void vmd_free(struct device *dev, size_t size, void *vaddr,
|
static void vmd_free(struct device *dev, size_t size, void *vaddr,
|
||||||
dma_addr_t addr, unsigned long attrs)
|
dma_addr_t addr, unsigned long attrs)
|
||||||
{
|
{
|
||||||
return vmd_dma_ops(dev)->free(to_vmd_dev(dev), size, vaddr, addr,
|
return dma_free_attrs(to_vmd_dev(dev), size, vaddr, addr, attrs);
|
||||||
attrs);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static int vmd_mmap(struct device *dev, struct vm_area_struct *vma,
|
static int vmd_mmap(struct device *dev, struct vm_area_struct *vma,
|
||||||
void *cpu_addr, dma_addr_t addr, size_t size,
|
void *cpu_addr, dma_addr_t addr, size_t size,
|
||||||
unsigned long attrs)
|
unsigned long attrs)
|
||||||
{
|
{
|
||||||
return vmd_dma_ops(dev)->mmap(to_vmd_dev(dev), vma, cpu_addr, addr,
|
return dma_mmap_attrs(to_vmd_dev(dev), vma, cpu_addr, addr, size,
|
||||||
size, attrs);
|
attrs);
|
||||||
}
|
}
|
||||||
|
|
||||||
static int vmd_get_sgtable(struct device *dev, struct sg_table *sgt,
|
static int vmd_get_sgtable(struct device *dev, struct sg_table *sgt,
|
||||||
void *cpu_addr, dma_addr_t addr, size_t size,
|
void *cpu_addr, dma_addr_t addr, size_t size,
|
||||||
unsigned long attrs)
|
unsigned long attrs)
|
||||||
{
|
{
|
||||||
return vmd_dma_ops(dev)->get_sgtable(to_vmd_dev(dev), sgt, cpu_addr,
|
return dma_get_sgtable_attrs(to_vmd_dev(dev), sgt, cpu_addr, addr, size,
|
||||||
addr, size, attrs);
|
attrs);
|
||||||
}
|
}
|
||||||
|
|
||||||
static dma_addr_t vmd_map_page(struct device *dev, struct page *page,
|
static dma_addr_t vmd_map_page(struct device *dev, struct page *page,
|
||||||
|
@ -347,61 +340,60 @@ static dma_addr_t vmd_map_page(struct device *dev, struct page *page,
|
||||||
enum dma_data_direction dir,
|
enum dma_data_direction dir,
|
||||||
unsigned long attrs)
|
unsigned long attrs)
|
||||||
{
|
{
|
||||||
return vmd_dma_ops(dev)->map_page(to_vmd_dev(dev), page, offset, size,
|
return dma_map_page_attrs(to_vmd_dev(dev), page, offset, size, dir,
|
||||||
dir, attrs);
|
attrs);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void vmd_unmap_page(struct device *dev, dma_addr_t addr, size_t size,
|
static void vmd_unmap_page(struct device *dev, dma_addr_t addr, size_t size,
|
||||||
enum dma_data_direction dir, unsigned long attrs)
|
enum dma_data_direction dir, unsigned long attrs)
|
||||||
{
|
{
|
||||||
vmd_dma_ops(dev)->unmap_page(to_vmd_dev(dev), addr, size, dir, attrs);
|
dma_unmap_page_attrs(to_vmd_dev(dev), addr, size, dir, attrs);
|
||||||
}
|
}
|
||||||
|
|
||||||
static int vmd_map_sg(struct device *dev, struct scatterlist *sg, int nents,
|
static int vmd_map_sg(struct device *dev, struct scatterlist *sg, int nents,
|
||||||
enum dma_data_direction dir, unsigned long attrs)
|
enum dma_data_direction dir, unsigned long attrs)
|
||||||
{
|
{
|
||||||
return vmd_dma_ops(dev)->map_sg(to_vmd_dev(dev), sg, nents, dir, attrs);
|
return dma_map_sg_attrs(to_vmd_dev(dev), sg, nents, dir, attrs);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void vmd_unmap_sg(struct device *dev, struct scatterlist *sg, int nents,
|
static void vmd_unmap_sg(struct device *dev, struct scatterlist *sg, int nents,
|
||||||
enum dma_data_direction dir, unsigned long attrs)
|
enum dma_data_direction dir, unsigned long attrs)
|
||||||
{
|
{
|
||||||
vmd_dma_ops(dev)->unmap_sg(to_vmd_dev(dev), sg, nents, dir, attrs);
|
dma_unmap_sg_attrs(to_vmd_dev(dev), sg, nents, dir, attrs);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void vmd_sync_single_for_cpu(struct device *dev, dma_addr_t addr,
|
static void vmd_sync_single_for_cpu(struct device *dev, dma_addr_t addr,
|
||||||
size_t size, enum dma_data_direction dir)
|
size_t size, enum dma_data_direction dir)
|
||||||
{
|
{
|
||||||
vmd_dma_ops(dev)->sync_single_for_cpu(to_vmd_dev(dev), addr, size, dir);
|
dma_sync_single_for_cpu(to_vmd_dev(dev), addr, size, dir);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void vmd_sync_single_for_device(struct device *dev, dma_addr_t addr,
|
static void vmd_sync_single_for_device(struct device *dev, dma_addr_t addr,
|
||||||
size_t size, enum dma_data_direction dir)
|
size_t size, enum dma_data_direction dir)
|
||||||
{
|
{
|
||||||
vmd_dma_ops(dev)->sync_single_for_device(to_vmd_dev(dev), addr, size,
|
dma_sync_single_for_device(to_vmd_dev(dev), addr, size, dir);
|
||||||
dir);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void vmd_sync_sg_for_cpu(struct device *dev, struct scatterlist *sg,
|
static void vmd_sync_sg_for_cpu(struct device *dev, struct scatterlist *sg,
|
||||||
int nents, enum dma_data_direction dir)
|
int nents, enum dma_data_direction dir)
|
||||||
{
|
{
|
||||||
vmd_dma_ops(dev)->sync_sg_for_cpu(to_vmd_dev(dev), sg, nents, dir);
|
dma_sync_sg_for_cpu(to_vmd_dev(dev), sg, nents, dir);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void vmd_sync_sg_for_device(struct device *dev, struct scatterlist *sg,
|
static void vmd_sync_sg_for_device(struct device *dev, struct scatterlist *sg,
|
||||||
int nents, enum dma_data_direction dir)
|
int nents, enum dma_data_direction dir)
|
||||||
{
|
{
|
||||||
vmd_dma_ops(dev)->sync_sg_for_device(to_vmd_dev(dev), sg, nents, dir);
|
dma_sync_sg_for_device(to_vmd_dev(dev), sg, nents, dir);
|
||||||
}
|
}
|
||||||
|
|
||||||
static int vmd_dma_supported(struct device *dev, u64 mask)
|
static int vmd_dma_supported(struct device *dev, u64 mask)
|
||||||
{
|
{
|
||||||
return vmd_dma_ops(dev)->dma_supported(to_vmd_dev(dev), mask);
|
return dma_supported(to_vmd_dev(dev), mask);
|
||||||
}
|
}
|
||||||
|
|
||||||
static u64 vmd_get_required_mask(struct device *dev)
|
static u64 vmd_get_required_mask(struct device *dev)
|
||||||
{
|
{
|
||||||
return vmd_dma_ops(dev)->get_required_mask(to_vmd_dev(dev));
|
return dma_get_required_mask(to_vmd_dev(dev));
|
||||||
}
|
}
|
||||||
|
|
||||||
static void vmd_teardown_dma_ops(struct vmd_dev *vmd)
|
static void vmd_teardown_dma_ops(struct vmd_dev *vmd)
|
||||||
|
|
Loading…
Reference in New Issue