From aa5fa66139e8656c6b1fc36725481cd6db797c5b Mon Sep 17 00:00:00 2001 From: Joerg Roedel Date: Tue, 19 Aug 2008 16:32:41 +0200 Subject: [PATCH] --- yaml --- r: 112555 b: refs/heads/master c: e4ad68b651f22fa71820c0b30bb2807999b2b49f h: refs/heads/master i: 112553: 0e4557473d498cdfd2438c9fc28cabfb615afc07 112551: 18c7638fc14bc2a6b0b4d6f262e19524c88da9e1 v: v3 --- [refs] | 2 +- trunk/arch/x86/kernel/pci-calgary_64.c | 14 ++++++++++++++ 2 files changed, 15 insertions(+), 1 deletion(-) diff --git a/[refs] b/[refs] index 5317dced2ac4..3c73e728e78d 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 43a5a5a09b8cfd56047706cf904718d073ccfd33 +refs/heads/master: e4ad68b651f22fa71820c0b30bb2807999b2b49f diff --git a/trunk/arch/x86/kernel/pci-calgary_64.c b/trunk/arch/x86/kernel/pci-calgary_64.c index 218d783ed7a8..afb020fdb19c 100644 --- a/trunk/arch/x86/kernel/pci-calgary_64.c +++ b/trunk/arch/x86/kernel/pci-calgary_64.c @@ -511,8 +511,22 @@ static void* calgary_alloc_coherent(struct device *dev, size_t size, return ret; } +static void calgary_free_coherent(struct device *dev, size_t size, + void *vaddr, dma_addr_t dma_handle) +{ + unsigned int npages; + struct iommu_table *tbl = find_iommu_table(dev); + + size = PAGE_ALIGN(size); + npages = size >> PAGE_SHIFT; + + iommu_free(tbl, dma_handle, npages); + free_pages((unsigned long)vaddr, get_order(size)); +} + static struct dma_mapping_ops calgary_dma_ops = { .alloc_coherent = calgary_alloc_coherent, + .free_coherent = calgary_free_coherent, .map_single = calgary_map_single, .unmap_single = calgary_unmap_single, .map_sg = calgary_map_sg,