Hi Daniel, sorry for being late. 2013/7/16 Daniel Vetter > Hi all, > > This patch series is my 2nd real stab at fixing up the locking issues > around our > two buffer sharing mechanisms in gem: flink and prime. > > I think the approach taken here is much better than my first stab, and it > also > seems to no longer leak buffers ;-) There some assorted cleanup and prep > work > (and one i915 fix) thrown into the mix, it's all stuff I've stumbled over > while > digging through the code. > > Open issues left in prime-land after these patches: > - exynos probably wants a similar patch to "drm/i915: explicit store base > gem > object in dma_buf->priv". The current code should be correct, but it's a > bit > How about using stuffs of drm_prime instead of specific ones? Seem like that we could replace specific dmabuf stuffs with common ones of drm_prime, at least in case of Exynos: i.e. each driver can export a gem to a dmabuf through drm_gem_prime_export function of drm_prime instead of specific one. By doing so, I think we could remove duplicated codes of drivers, specific dmabuf stuffs. I'm not sure but it seems like that there is any reason you try to use existing stuffs with a little change: maybe the stuffs of drm_prime couldn't be used for all drm drivers commonly. Thanks, Inki Dae > tricky. I've opted not to do that since last time around I've touched > exynos a > bit it broke horribly ;-) > - The prime core should now no longer depend upon obj->import_attach being > set > by drivers in their prime_import callback. This should allos us to fix > udl > which really doesn't need (nor want, it confuses swiotlb among other > things) > a device attachment. Didn't write that patch since my displaylink seems > to > have died. > - There's still the issue Inki's team pointed out where if you import a > foreign > object on different fds you'll get different gem objects. So we need > some form > of a per-device import cache (on top of the per-file-priv dma-buf cache > we > already have). Didn't do this yet since I want to have good test coverage > (already started a bit), it looks like a bit more work and I'm not sure > about > the exact design of the code yet. > > Review and testing highly welcome. > > Cheers, Daniel > > Daniel Vetter (20): > drm: use common drm_gem_dmabuf_release in i915/exynos drivers > drm/i915: unpin backing storage in dmabuf_unmap > drm/i915: explicit store base gem object in dma_buf->priv > drm/prime: add a bit of documentation about gem_obj->import_attach > drm/gem: remove drm_gem_object_handle_unreference > drm/gem: inline drm_gem_object_handle_reference > drm/gem: move drm_gem_object_handle_unreference_unlocked into > drm_gem.c > drm/gem: remove bogus NULL check from > drm_gem_object_handle_unreference_unlocked > drm/gem: WARN about unbalanced handle refcounts > drm/gem: fix up flink name create race > drm/prime: fix error path in drm_gem_prime_fd_to_handle > drm/gem: make drm_gem_object_handle_unreference_unlocked static > drm/gem: create drm_gem_dumb_destroy > drm/prime: use proper pointer in drm_gem_prime_handle_to_fd > drm/prime: shrink critical section protected by prime lock > drm/prime: clarify logic a bit in drm_gem_prime_fd_to_handle > drm/gem: switch dev->object_name_lock to a mutex > drm/gem: completely close gem_open vs. gem_close races > drm/prime: proper locking+refcounting for obj->dma_buf link > drm/prime: Simplify drm_gem_remove_prime_handles > > drivers/gpu/drm/ast/ast_drv.c | 2 +- > drivers/gpu/drm/ast/ast_drv.h | 3 - > drivers/gpu/drm/ast/ast_main.c | 7 -- > drivers/gpu/drm/cirrus/cirrus_drv.c | 2 +- > drivers/gpu/drm/cirrus/cirrus_drv.h | 3 - > drivers/gpu/drm/cirrus/cirrus_main.c | 7 -- > drivers/gpu/drm/drm_fops.c | 1 + > drivers/gpu/drm/drm_gem.c | 192 > ++++++++++++++++++++--------- > drivers/gpu/drm/drm_gem_cma_helper.c | 10 -- > drivers/gpu/drm/drm_info.c | 2 +- > drivers/gpu/drm/drm_prime.c | 96 ++++++++++----- > drivers/gpu/drm/exynos/exynos_drm_dmabuf.c | 23 +--- > drivers/gpu/drm/exynos/exynos_drm_drv.c | 2 +- > drivers/gpu/drm/exynos/exynos_drm_gem.c | 22 +--- > drivers/gpu/drm/exynos/exynos_drm_gem.h | 9 -- > drivers/gpu/drm/gma500/gem.c | 17 --- > drivers/gpu/drm/gma500/psb_drv.c | 2 +- > drivers/gpu/drm/gma500/psb_drv.h | 2 - > drivers/gpu/drm/i915/i915_drv.c | 2 +- > drivers/gpu/drm/i915/i915_drv.h | 2 - > drivers/gpu/drm/i915/i915_gem.c | 7 -- > drivers/gpu/drm/i915/i915_gem_dmabuf.c | 34 +++-- > drivers/gpu/drm/mgag200/mgag200_drv.c | 2 +- > drivers/gpu/drm/mgag200/mgag200_drv.h | 3 - > drivers/gpu/drm/mgag200/mgag200_main.c | 7 -- > drivers/gpu/drm/nouveau/nouveau_display.c | 7 -- > drivers/gpu/drm/nouveau/nouveau_display.h | 2 - > drivers/gpu/drm/nouveau/nouveau_drm.c | 2 +- > drivers/gpu/drm/omapdrm/omap_drv.c | 2 +- > drivers/gpu/drm/omapdrm/omap_drv.h | 2 - > drivers/gpu/drm/omapdrm/omap_gem.c | 15 --- > drivers/gpu/drm/qxl/qxl_drv.c | 2 +- > drivers/gpu/drm/qxl/qxl_drv.h | 3 - > drivers/gpu/drm/qxl/qxl_dumb.c | 7 -- > drivers/gpu/drm/radeon/radeon.h | 3 - > drivers/gpu/drm/radeon/radeon_drv.c | 5 +- > drivers/gpu/drm/radeon/radeon_gem.c | 7 -- > drivers/gpu/drm/rcar-du/rcar_du_drv.c | 2 +- > drivers/gpu/drm/shmobile/shmob_drm_drv.c | 2 +- > drivers/gpu/drm/tilcdc/tilcdc_drv.c | 2 +- > drivers/gpu/drm/udl/udl_drv.c | 2 +- > drivers/gpu/drm/udl/udl_drv.h | 2 - > drivers/gpu/drm/udl/udl_gem.c | 6 - > drivers/gpu/host1x/drm/drm.c | 2 +- > drivers/gpu/host1x/drm/gem.c | 6 - > drivers/gpu/host1x/drm/gem.h | 2 - > drivers/staging/imx-drm/imx-drm-core.c | 2 +- > include/drm/drmP.h | 94 +++++++------- > include/drm/drm_gem_cma_helper.h | 8 -- > 49 files changed, 279 insertions(+), 367 deletions(-) > > -- > 1.8.3.2 > > _______________________________________________ > dri-devel mailing list > dri-devel@lists.freedesktop.org > http://lists.freedesktop.org/mailman/listinfo/dri-devel >