Hi Daniel, sorry for being late.
2013/7/16 Daniel Vetter <daniel.vetter@xxxxxxxx>
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
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@xxxxxxxxxxxxxxxxxxxxx
http://lists.freedesktop.org/mailman/listinfo/dri-devel
_______________________________________________ dri-devel mailing list dri-devel@xxxxxxxxxxxxxxxxxxxxx http://lists.freedesktop.org/mailman/listinfo/dri-devel