This simplifies drm fb lifetime, and if the crtc/plane needs to hold a ref to the fb when disabling a pipe until the next vblank, this avoids the need to make disabling an overlay synchronous. This is a problem that shows up when userspace is using a drm plane to implement a hw cursor.. making overlay disable synchronous causes a performance problem when x11 is rapidly enabling/disabling the hw cursor. But not making it synchronous opens up a race condition for crashing if userspace turns around and immediately deletes the fb. Refcnt'ing the fb makes it possible to solve this problem. v1: original v2: add drm_framebuffer_remove() which is called in all paths where fb->funcs->destroy() was directly called before. This cleans up the CRTCs/planes that the fb was attached to. You should only directly use drm_framebuffer_unreference() if you are also using drm_framebuffer_reference() to keep a ref to the fb. v3: add comment explaining the fb refcount v4: remove duplicate 'list_del(&fb->filp_head)' [airlied: v4.1: fix local rejection] Signed-off-by: Rob Clark <rob@ti.com> Signed-off-by: Dave Airlie <airlied@redhat.com> |
||
---|---|---|
.. | ||
Kconfig | ||
Makefile | ||
omap_connector.c | ||
omap_crtc.c | ||
omap_debugfs.c | ||
omap_dmm_priv.h | ||
omap_dmm_tiler.c | ||
omap_dmm_tiler.h | ||
omap_drm.h | ||
omap_drv.c | ||
omap_drv.h | ||
omap_encoder.c | ||
omap_fb.c | ||
omap_fbdev.c | ||
omap_gem_dmabuf.c | ||
omap_gem_helpers.c | ||
omap_gem.c | ||
omap_plane.c | ||
tcm-sita.c | ||
tcm-sita.h | ||
tcm.h | ||
TODO |