• Daniel Vetter's avatar
    dma-buf: implement vmap refcounting in the interface logic · f00b4dad
    Daniel Vetter authored
    All drivers which implement this need to have some sort of refcount to
    allow concurrent vmap usage. Hence implement this in the dma-buf core.
    
    To protect against concurrent calls we need a lock, which potentially
    causes new funny locking inversions. But this shouldn't be a problem
    for exporters with statically allocated backing storage, and more
    dynamic drivers have decent issues already anyway.
    
    Inspired by some refactoring patches from Aaron Plattner, who
    implemented the same idea, but only for drm/prime drivers.
    
    v2: Check in dma_buf_release that no dangling vmaps are left.
    Suggested by Aaron Plattner. We might want to do similar checks for
    attachments, but that's for another patch. Also fix up ERR_PTR return
    for vmap.
    
    v3: Check whether the passed-in vmap address matches with the cached
    one for vunmap. Eventually we might want to remove that parameter -
    compared to the kmap functions there's no need for the vaddr for
    unmapping.  Suggested by Chris Wilson.
    
    v4: Fix a brown-paper-bag bug spotted by Aaron Plattner.
    
    Cc: Aaron Plattner <aplattner@nvidia.com>
    Reviewed-by: default avatarAaron Plattner <aplattner@nvidia.com>
    Tested-by: default avatarAaron Plattner <aplattner@nvidia.com>
    Reviewed-by: default avatarRob Clark <rob@ti.com>
    Signed-off-by: default avatarDaniel Vetter <daniel.vetter@ffwll.ch>
    Signed-off-by: default avatarSumit Semwal <sumit.semwal@linaro.org>
    f00b4dad
dma-buf.c 14.2 KB