From 957a2d0e7ea38d84d4b3cf9a951bccadeb803a24 Mon Sep 17 00:00:00 2001 From: Thomas Zimmermann Date: Fri, 15 Oct 2021 10:40:47 +0200 Subject: drm/gma500: Allocate GTT ranges in stolen memory with psb_gem_create() Support private objects for stolen memory in psb_gem_create() and convert users to psb_gem_create(). For stolen memory, psb_gem_create() now initializes the GEM object via drm_gem_private_object_init(). In the fbdev setup, replace the open-coded initialization of struct gtt_range with a call to psb_gem_create(). Use drm_gem_object_put() for release. In the cursor setup, use psb_gem_create() and get a real GEM object. Previously the allocated instance of struct gtt_range was only partially initialized. Release the cursor GEM object in gma_crtc_destroy(). The release was missing from the original code. With the conversion of all callers to psb_gem_create(), the extern declarations of psb_gtt_alloc_range, psb_gtt_free_range and psb_gem_object_func are not required any longer. Declare them as static. Signed-off-by: Thomas Zimmermann Acked-by: Patrik Jakobsson Link: https://patchwork.freedesktop.org/patch/msgid/20211015084053.13708-5-tzimmermann@suse.de --- drivers/gpu/drm/gma500/gem.c | 22 +++++++++++++--------- 1 file changed, 13 insertions(+), 9 deletions(-) (limited to 'drivers/gpu/drm/gma500/gem.c') diff --git a/drivers/gpu/drm/gma500/gem.c b/drivers/gpu/drm/gma500/gem.c index 0c094d4e3f1c..97b7f3bdbdc3 100644 --- a/drivers/gpu/drm/gma500/gem.c +++ b/drivers/gpu/drm/gma500/gem.c @@ -101,7 +101,7 @@ void psb_gtt_unpin(struct gtt_range *gt) mutex_unlock(&dev_priv->gtt_mutex); } -void psb_gtt_free_range(struct drm_device *dev, struct gtt_range *gt) +static void psb_gtt_free_range(struct drm_device *dev, struct gtt_range *gt) { /* Undo the mmap pin if we are destroying the object */ if (gt->mmapping) { @@ -133,13 +133,13 @@ static const struct vm_operations_struct psb_gem_vm_ops = { .close = drm_gem_vm_close, }; -const struct drm_gem_object_funcs psb_gem_object_funcs = { +static const struct drm_gem_object_funcs psb_gem_object_funcs = { .free = psb_gem_free_object, .vm_ops = &psb_gem_vm_ops, }; -struct gtt_range *psb_gtt_alloc_range(struct drm_device *dev, int len, - const char *name, int backed, u32 align) +static struct gtt_range *psb_gtt_alloc_range(struct drm_device *dev, int len, + const char *name, int backed, u32 align) { struct drm_psb_private *dev_priv = to_drm_psb_private(dev); struct gtt_range *gt; @@ -193,12 +193,16 @@ psb_gem_create(struct drm_device *dev, u64 size, const char *name, bool stolen, obj->funcs = &psb_gem_object_funcs; - ret = drm_gem_object_init(dev, obj, size); - if (ret) - goto err_psb_gtt_free_range; + if (stolen) { + drm_gem_private_object_init(dev, obj, size); + } else { + ret = drm_gem_object_init(dev, obj, size); + if (ret) + goto err_psb_gtt_free_range; - /* Limit the object to 32-bit mappings */ - mapping_set_gfp_mask(obj->filp->f_mapping, GFP_KERNEL | __GFP_DMA32); + /* Limit the object to 32-bit mappings */ + mapping_set_gfp_mask(obj->filp->f_mapping, GFP_KERNEL | __GFP_DMA32); + } return gt; -- cgit v1.2.3