drm/gem-vram: Share code between GEM VRAM's _{prepare, cleanup}_fb()
The error-recovery code in drm_gem_vram_plane_helper_prepare_fb() is of the same pattern as drm_gem_vram_plane_helper_cleanup_fb(). Implement both of them using an internal helper. No functional changes. Signed-off-by: Thomas Zimmermann <tzimmermann@suse.de> Reviewed-by: Javier Martinez Canillas <javierm@redhat.com> Acked-by: Christian König <christian.koenig@amd.com> Link: https://patchwork.freedesktop.org/patch/msgid/20220517113327.26919-4-tzimmermann@suse.de
This commit is contained in:
parent
746b9c62cc
commit
1c89b4b718
|
@ -9,6 +9,7 @@
|
|||
#include <drm/drm_file.h>
|
||||
#include <drm/drm_framebuffer.h>
|
||||
#include <drm/drm_gem_atomic_helper.h>
|
||||
#include <drm/drm_gem_framebuffer_helper.h>
|
||||
#include <drm/drm_gem_ttm_helper.h>
|
||||
#include <drm/drm_gem_vram_helper.h>
|
||||
#include <drm/drm_managed.h>
|
||||
|
@ -630,6 +631,24 @@ EXPORT_SYMBOL(drm_gem_vram_driver_dumb_create);
|
|||
* Helpers for struct drm_plane_helper_funcs
|
||||
*/
|
||||
|
||||
static void __drm_gem_vram_plane_helper_cleanup_fb(struct drm_plane *plane,
|
||||
struct drm_plane_state *state,
|
||||
unsigned int num_planes)
|
||||
{
|
||||
struct drm_gem_object *obj;
|
||||
struct drm_gem_vram_object *gbo;
|
||||
struct drm_framebuffer *fb = state->fb;
|
||||
|
||||
while (num_planes) {
|
||||
--num_planes;
|
||||
obj = drm_gem_fb_get_obj(fb, num_planes);
|
||||
if (!obj)
|
||||
continue;
|
||||
gbo = drm_gem_vram_of_gem(obj);
|
||||
drm_gem_vram_unpin(gbo);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* drm_gem_vram_plane_helper_prepare_fb() - \
|
||||
* Implements &struct drm_plane_helper_funcs.prepare_fb
|
||||
|
@ -671,11 +690,7 @@ drm_gem_vram_plane_helper_prepare_fb(struct drm_plane *plane,
|
|||
return 0;
|
||||
|
||||
err_drm_gem_vram_unpin:
|
||||
while (i) {
|
||||
--i;
|
||||
gbo = drm_gem_vram_of_gem(new_state->fb->obj[i]);
|
||||
drm_gem_vram_unpin(gbo);
|
||||
}
|
||||
__drm_gem_vram_plane_helper_cleanup_fb(plane, new_state, i);
|
||||
return ret;
|
||||
}
|
||||
EXPORT_SYMBOL(drm_gem_vram_plane_helper_prepare_fb);
|
||||
|
@ -694,18 +709,12 @@ void
|
|||
drm_gem_vram_plane_helper_cleanup_fb(struct drm_plane *plane,
|
||||
struct drm_plane_state *old_state)
|
||||
{
|
||||
size_t i;
|
||||
struct drm_gem_vram_object *gbo;
|
||||
struct drm_framebuffer *fb = old_state->fb;
|
||||
|
||||
if (!old_state->fb)
|
||||
if (!fb)
|
||||
return;
|
||||
|
||||
for (i = 0; i < ARRAY_SIZE(old_state->fb->obj); ++i) {
|
||||
if (!old_state->fb->obj[i])
|
||||
continue;
|
||||
gbo = drm_gem_vram_of_gem(old_state->fb->obj[i]);
|
||||
drm_gem_vram_unpin(gbo);
|
||||
}
|
||||
__drm_gem_vram_plane_helper_cleanup_fb(plane, old_state, ARRAY_SIZE(fb->obj));
|
||||
}
|
||||
EXPORT_SYMBOL(drm_gem_vram_plane_helper_cleanup_fb);
|
||||
|
||||
|
|
Loading…
Reference in New Issue