Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 91006
b: refs/heads/master
c: 2be6214
h: refs/heads/master
v: v3
  • Loading branch information
Ingo Molnar committed Apr 19, 2008
1 parent b225cdc commit 86f0401
Show file tree
Hide file tree
Showing 8 changed files with 29 additions and 20 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: 4d92fbf231fe23ec07d18820a141c573a7f5017a
refs/heads/master: 2be621498d461b63ca6124f86e3b9582e1a8e722
4 changes: 2 additions & 2 deletions trunk/arch/x86/kernel/pci-base_32.c
Original file line number Diff line number Diff line change
Expand Up @@ -4,12 +4,12 @@
#include <linux/dma-mapping.h>
#include <asm/dma-mapping.h>

static dma_addr_t pci32_map_single(struct device *dev, void *ptr,
static dma_addr_t pci32_map_single(struct device *dev, phys_addr_t ptr,
size_t size, int direction)
{
WARN_ON(size == 0);
flush_write_buffers();
return virt_to_phys(ptr);
return ptr;
}

static int pci32_dma_map_sg(struct device *dev, struct scatterlist *sglist,
Expand Down
3 changes: 2 additions & 1 deletion trunk/arch/x86/kernel/pci-calgary_64.c
Original file line number Diff line number Diff line change
Expand Up @@ -470,10 +470,11 @@ static int calgary_map_sg(struct device *dev, struct scatterlist *sg,
return 0;
}

static dma_addr_t calgary_map_single(struct device *dev, void *vaddr,
static dma_addr_t calgary_map_single(struct device *dev, phys_addr_t paddr,
size_t size, int direction)
{
dma_addr_t dma_handle = bad_dma_address;
void *vaddr = phys_to_virt(paddr);
unsigned long uaddr;
unsigned int npages;
struct iommu_table *tbl = find_iommu_table(dev);
Expand Down
2 changes: 1 addition & 1 deletion trunk/arch/x86/kernel/pci-dma_64.c
Original file line number Diff line number Diff line change
Expand Up @@ -141,7 +141,7 @@ dma_alloc_coherent(struct device *dev, size_t size, dma_addr_t *dma_handle,
}

if (dma_ops->map_simple) {
*dma_handle = dma_ops->map_simple(dev, memory,
*dma_handle = dma_ops->map_simple(dev, virt_to_phys(memory),
size,
PCI_DMA_BIDIRECTIONAL);
if (*dma_handle != bad_dma_address)
Expand Down
15 changes: 7 additions & 8 deletions trunk/arch/x86/kernel/pci-gart_64.c
Original file line number Diff line number Diff line change
Expand Up @@ -264,9 +264,9 @@ static dma_addr_t dma_map_area(struct device *dev, dma_addr_t phys_mem,
}

static dma_addr_t
gart_map_simple(struct device *dev, char *buf, size_t size, int dir)
gart_map_simple(struct device *dev, phys_addr_t paddr, size_t size, int dir)
{
dma_addr_t map = dma_map_area(dev, virt_to_bus(buf), size, dir);
dma_addr_t map = dma_map_area(dev, paddr, size, dir);

flush_gart();

Expand All @@ -275,18 +275,17 @@ gart_map_simple(struct device *dev, char *buf, size_t size, int dir)

/* Map a single area into the IOMMU */
static dma_addr_t
gart_map_single(struct device *dev, void *addr, size_t size, int dir)
gart_map_single(struct device *dev, phys_addr_t paddr, size_t size, int dir)
{
unsigned long phys_mem, bus;
unsigned long bus;

if (!dev)
dev = &fallback_dev;

phys_mem = virt_to_phys(addr);
if (!need_iommu(dev, phys_mem, size))
return phys_mem;
if (!need_iommu(dev, paddr, size))
return paddr;

bus = gart_map_simple(dev, addr, size, dir);
bus = gart_map_simple(dev, paddr, size, dir);

return bus;
}
Expand Down
4 changes: 2 additions & 2 deletions trunk/arch/x86/kernel/pci-nommu_64.c
Original file line number Diff line number Diff line change
Expand Up @@ -26,10 +26,10 @@ check_addr(char *name, struct device *hwdev, dma_addr_t bus, size_t size)
}

static dma_addr_t
nommu_map_single(struct device *hwdev, void *ptr, size_t size,
nommu_map_single(struct device *hwdev, phys_addr_t paddr, size_t size,
int direction)
{
dma_addr_t bus = virt_to_bus(ptr);
dma_addr_t bus = paddr;
if (!check_addr("map_single", hwdev, bus, size))
return bad_dma_address;
return bus;
Expand Down
9 changes: 8 additions & 1 deletion trunk/arch/x86/kernel/pci-swiotlb_64.c
Original file line number Diff line number Diff line change
Expand Up @@ -11,11 +11,18 @@

int swiotlb __read_mostly;

static dma_addr_t
swiotlb_map_single_phys(struct device *hwdev, phys_addr_t paddr, size_t size,
int direction)
{
return swiotlb_map_single(hwdev, phys_to_virt(paddr), size, direction);
}

const struct dma_mapping_ops swiotlb_dma_ops = {
.mapping_error = swiotlb_dma_mapping_error,
.alloc_coherent = swiotlb_alloc_coherent,
.free_coherent = swiotlb_free_coherent,
.map_single = swiotlb_map_single,
.map_single = swiotlb_map_single_phys,
.unmap_single = swiotlb_unmap_single,
.sync_single_for_cpu = swiotlb_sync_single_for_cpu,
.sync_single_for_device = swiotlb_sync_single_for_device,
Expand Down
10 changes: 6 additions & 4 deletions trunk/include/asm-x86/dma-mapping.h
Original file line number Diff line number Diff line change
Expand Up @@ -16,10 +16,10 @@ struct dma_mapping_ops {
dma_addr_t *dma_handle, gfp_t gfp);
void (*free_coherent)(struct device *dev, size_t size,
void *vaddr, dma_addr_t dma_handle);
dma_addr_t (*map_single)(struct device *hwdev, void *ptr,
dma_addr_t (*map_single)(struct device *hwdev, phys_addr_t ptr,
size_t size, int direction);
/* like map_single, but doesn't check the device mask */
dma_addr_t (*map_simple)(struct device *hwdev, char *ptr,
dma_addr_t (*map_simple)(struct device *hwdev, phys_addr_t ptr,
size_t size, int direction);
void (*unmap_single)(struct device *dev, dma_addr_t addr,
size_t size, int direction);
Expand Down Expand Up @@ -73,7 +73,7 @@ dma_map_single(struct device *hwdev, void *ptr, size_t size,
int direction)
{
BUG_ON(!valid_dma_direction(direction));
return dma_ops->map_single(hwdev, ptr, size, direction);
return dma_ops->map_single(hwdev, virt_to_phys(ptr), size, direction);
}

static inline void
Expand Down Expand Up @@ -174,7 +174,9 @@ static inline dma_addr_t dma_map_page(struct device *dev, struct page *page,
size_t offset, size_t size,
int direction)
{
return dma_map_single(dev, page_address(page)+offset, size, direction);
BUG_ON(!valid_dma_direction(direction));
return dma_ops->map_single(dev, page_to_phys(page)+offset,
size, direction);
}

static inline void dma_unmap_page(struct device *dev, dma_addr_t addr,
Expand Down

0 comments on commit 86f0401

Please sign in to comment.