Hi, On 04/10/2012 12:11 PM, Tomasz Stanislawski wrote:
From: Dave Airlie<airlied@xxxxxxxxxx> Add vmap to dmabuf interface. Signed-off-by: Dave Airlie<airlied@xxxxxxxxxx> --- drivers/base/dma-buf.c | 29 +++++++++++++++++++++++++++++ include/linux/dma-buf.h | 16 ++++++++++++++++ 2 files changed, 45 insertions(+), 0 deletions(-) diff --git a/drivers/base/dma-buf.c b/drivers/base/dma-buf.c index 07cbbc6..3068258 100644 --- a/drivers/base/dma-buf.c +++ b/drivers/base/dma-buf.c @@ -406,3 +406,32 @@ void dma_buf_kunmap(struct dma_buf *dmabuf, unsigned long page_num, dmabuf->ops->kunmap(dmabuf, page_num, vaddr); } EXPORT_SYMBOL_GPL(dma_buf_kunmap); + +/** + * dma_buf_vmap - Create virtual mapping for the buffer object into kernel address space. The same restrictions as for vmap and friends apply. + * @dma_buf: [in] buffer to vmap + * + * This call may fail due to lack of virtual mapping address space. + */ +void *dma_buf_vmap(struct dma_buf *dmabuf) +{ + WARN_ON(!dmabuf);
How about replacing this with: if (WARN_ON(!dmabuf)) return NULL; to avoid null pointer dereference right below ?
+ if (dmabuf->ops->vmap) + return dmabuf->ops->vmap(dmabuf); + return NULL; +} +EXPORT_SYMBOL(dma_buf_vmap); + +/** + * dma_buf_vunmap - Unmap a page obtained by dma_buf_vmap. + * @dma_buf: [in] buffer to vmap + */ +void dma_buf_vunmap(struct dma_buf *dmabuf, void *vaddr) +{ + WARN_ON(!dmabuf);
and here if (WARN_ON(!dmabuf)) return; ?
+ if (dmabuf->ops->vunmap) + dmabuf->ops->vunmap(dmabuf, vaddr); +} +EXPORT_SYMBOL(dma_buf_vunmap);
-- Regards, Sylwester _______________________________________________ dri-devel mailing list dri-devel@xxxxxxxxxxxxxxxxxxxxx http://lists.freedesktop.org/mailman/listinfo/dri-devel