forked from Minki/linux
f7eff60ea0
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> |
||
---|---|---|
.. | ||
i2c | ||
ttm | ||
drm_buffer.h | ||
drm_cache.h | ||
drm_core.h | ||
drm_crtc_helper.h | ||
drm_crtc.h | ||
drm_dp_helper.h | ||
drm_edid.h | ||
drm_encoder_slave.h | ||
drm_fb_cma_helper.h | ||
drm_fb_helper.h | ||
drm_fixed.h | ||
drm_fourcc.h | ||
drm_gem_cma_helper.h | ||
drm_global.h | ||
drm_hashtab.h | ||
drm_mem_util.h | ||
drm_memory.h | ||
drm_mm.h | ||
drm_mode.h | ||
drm_os_linux.h | ||
drm_pciids.h | ||
drm_sarea.h | ||
drm_sysfs.h | ||
drm_usb.h | ||
drm.h | ||
drmP.h | ||
exynos_drm.h | ||
gma_drm.h | ||
i810_drm.h | ||
i915_drm.h | ||
intel-gtt.h | ||
Kbuild | ||
mga_drm.h | ||
nouveau_drm.h | ||
r128_drm.h | ||
radeon_drm.h | ||
savage_drm.h | ||
sis_drm.h | ||
via_drm.h | ||
vmwgfx_drm.h |