diff options
| author | Simon Ser <[email protected]> | 2023-10-20 10:19:45 +0000 |
|---|---|---|
| committer | Simon Ser <[email protected]> | 2023-10-27 11:47:56 +0000 |
| commit | d208d875667e2a29beeec5d475f4b6b164b632fa (patch) | |
| tree | acecbcfbae15bd4e0edf88ed536ecf4638ae3f61 /drivers/gpu/drm/drm_framebuffer.c | |
| parent | drm: extract closefb logic in separate function (diff) | |
| download | kernel-d208d875667e2a29beeec5d475f4b6b164b632fa.tar.gz kernel-d208d875667e2a29beeec5d475f4b6b164b632fa.zip | |
drm: introduce CLOSEFB IOCTL
This new IOCTL allows callers to close a framebuffer without
disabling planes or CRTCs. This takes inspiration from Rob Clark's
unref_fb IOCTL [1] and DRM_MODE_FB_PERSIST [2].
User-space patch for wlroots available at [3]. IGT test available
at [4].
v2: add an extra pad field just in case we want to extend this IOCTL
in the future (Pekka, Sima).
[1]: https://lore.kernel.org/dri-devel/[email protected]/
[2]: https://lore.kernel.org/dri-devel/[email protected]/
[3]: https://gitlab.freedesktop.org/wlroots/wlroots/-/merge_requests/4394
[4]: https://lists.freedesktop.org/archives/igt-dev/2023-October/063294.html
Signed-off-by: Simon Ser <[email protected]>
Reviewed-by: Daniel Stone <[email protected]>
Acked-by: Pekka Paalanen <[email protected]>
Cc: Hans de Goede <[email protected]>
Cc: Dennis Filder <[email protected]>
Cc: Daniel Vetter <[email protected]>
Cc: Rob Clark <[email protected]>
Cc: Sean Paul <[email protected]>
Link: https://patchwork.freedesktop.org/patch/msgid/[email protected]
Diffstat (limited to 'drivers/gpu/drm/drm_framebuffer.c')
| -rw-r--r-- | drivers/gpu/drm/drm_framebuffer.c | 22 |
1 files changed, 22 insertions, 0 deletions
diff --git a/drivers/gpu/drm/drm_framebuffer.c b/drivers/gpu/drm/drm_framebuffer.c index ef3f1e4bc334..09e289fca5c3 100644 --- a/drivers/gpu/drm/drm_framebuffer.c +++ b/drivers/gpu/drm/drm_framebuffer.c @@ -480,6 +480,28 @@ int drm_mode_rmfb_ioctl(struct drm_device *dev, return drm_mode_rmfb(dev, *fb_id, file_priv); } +int drm_mode_closefb_ioctl(struct drm_device *dev, + void *data, struct drm_file *file_priv) +{ + struct drm_mode_closefb *r = data; + struct drm_framebuffer *fb; + int ret; + + if (!drm_core_check_feature(dev, DRIVER_MODESET)) + return -EOPNOTSUPP; + + if (r->pad) + return -EINVAL; + + fb = drm_framebuffer_lookup(dev, file_priv, r->fb_id); + if (!fb) + return -ENOENT; + + ret = drm_mode_closefb(fb, file_priv); + drm_framebuffer_put(fb); + return ret; +} + /** * drm_mode_getfb - get FB info * @dev: drm device for the ioctl |
