|
@@ -59,7 +59,9 @@ void *dma_generic_alloc_coherent(struct device *dev, size_t size,
|
|
|
|
|
|
split_page(pfn_to_page(virt_to_phys(ret) >> PAGE_SHIFT), order);
|
|
|
|
|
|
- *dma_handle = virt_to_phys(ret) - PFN_PHYS(dev->dma_pfn_offset);
|
|
|
+ *dma_handle = virt_to_phys(ret);
|
|
|
+ if (!WARN_ON(!dev))
|
|
|
+ *dma_handle -= PFN_PHYS(dev->dma_pfn_offset);
|
|
|
|
|
|
return ret_nocache;
|
|
|
}
|
|
@@ -69,9 +71,12 @@ void dma_generic_free_coherent(struct device *dev, size_t size,
|
|
|
unsigned long attrs)
|
|
|
{
|
|
|
int order = get_order(size);
|
|
|
- unsigned long pfn = (dma_handle >> PAGE_SHIFT) + dev->dma_pfn_offset;
|
|
|
+ unsigned long pfn = dma_handle >> PAGE_SHIFT;
|
|
|
int k;
|
|
|
|
|
|
+ if (!WARN_ON(!dev))
|
|
|
+ pfn += dev->dma_pfn_offset;
|
|
|
+
|
|
|
for (k = 0; k < (1 << order); k++)
|
|
|
__free_pages(pfn_to_page(pfn + k), 0);
|
|
|
|
|
@@ -143,7 +148,7 @@ int __init platform_resource_setup_memory(struct platform_device *pdev,
|
|
|
if (!memsize)
|
|
|
return 0;
|
|
|
|
|
|
- buf = dma_alloc_coherent(NULL, memsize, &dma_handle, GFP_KERNEL);
|
|
|
+ buf = dma_alloc_coherent(&pdev->dev, memsize, &dma_handle, GFP_KERNEL);
|
|
|
if (!buf) {
|
|
|
pr_warning("%s: unable to allocate memory\n", name);
|
|
|
return -ENOMEM;
|