Hello,
On Monday, September 05, 2011 12:44 PM Joerg Roedel wrote:
On Fri, Sep 02, 2011 at 03:53:18PM +0200, Marek Szyprowski wrote:
struct dma_map_ops {
- void* (*alloc_coherent)(struct device *dev, size_t size,
dma_addr_t *dma_handle, gfp_t gfp);
- void (*free_coherent)(struct device *dev, size_t size,
void *vaddr, dma_addr_t dma_handle);
- void* (*alloc)(struct device *dev, size_t size,
dma_addr_t *dma_handle, gfp_t gfp,
struct dma_attrs *attrs);
- void (*free)(struct device *dev, size_t size,
void *vaddr, dma_addr_t dma_handle,
struct dma_attrs *attrs);
- int (*mmap)(struct device *, struct vm_area_struct *,
void *, dma_addr_t, size_t, struct dma_attrs *attrs);
- dma_addr_t (*map_page)(struct device *dev, struct page *page, unsigned long offset, size_t size, enum dma_data_direction dir,
-- 1.7.1.569.g6f426
This needs conversion of all drivers implementing dma_map_ops or you will break a lot of architectures. A better approach is to keep *_coherent and implement alloc/free/mmap side-by-side until all drivers are converted. Also I miss some documentation about the new call-backs.
Right this patch will break all other architectures, however it was just a snapshot of my work-in-progress. Converting all other architectures from alloc_coherent to alloc with NULL attribute shouldn't be really hard and will be added in the final version - together with documentation.
Best regards