forked from Minki/linux
drm: Manage drm_gem_init with drmm_
We might want to look into pushing this down into drm_mm_init, but that would mean rolling out return codes to a pile of functions unfortunately. So let's leave that for now. Acked-by: Sam Ravnborg <sam@ravnborg.org> Signed-off-by: Daniel Vetter <daniel.vetter@intel.com> Link: https://patchwork.freedesktop.org/patch/msgid/20200323144950.3018436-24-daniel.vetter@ffwll.ch
This commit is contained in:
parent
f96306f989
commit
641b9103d8
@ -687,13 +687,10 @@ int drm_dev_init(struct drm_device *dev,
|
||||
|
||||
ret = drm_dev_set_unique(dev, dev_name(parent));
|
||||
if (ret)
|
||||
goto err_setunique;
|
||||
goto err;
|
||||
|
||||
return 0;
|
||||
|
||||
err_setunique:
|
||||
if (drm_core_check_feature(dev, DRIVER_GEM))
|
||||
drm_gem_destroy(dev);
|
||||
err:
|
||||
drm_managed_release(dev);
|
||||
|
||||
@ -755,9 +752,6 @@ EXPORT_SYMBOL(devm_drm_dev_init);
|
||||
void drm_dev_fini(struct drm_device *dev)
|
||||
{
|
||||
drm_vblank_cleanup(dev);
|
||||
|
||||
if (drm_core_check_feature(dev, DRIVER_GEM))
|
||||
drm_gem_destroy(dev);
|
||||
}
|
||||
EXPORT_SYMBOL(drm_dev_fini);
|
||||
|
||||
|
@ -44,6 +44,7 @@
|
||||
#include <drm/drm_drv.h>
|
||||
#include <drm/drm_file.h>
|
||||
#include <drm/drm_gem.h>
|
||||
#include <drm/drm_managed.h>
|
||||
#include <drm/drm_print.h>
|
||||
#include <drm/drm_vma_manager.h>
|
||||
|
||||
@ -77,6 +78,12 @@
|
||||
* up at a later date, and as our interface with shmfs for memory allocation.
|
||||
*/
|
||||
|
||||
static void
|
||||
drm_gem_init_release(struct drm_device *dev, void *ptr)
|
||||
{
|
||||
drm_vma_offset_manager_destroy(dev->vma_offset_manager);
|
||||
}
|
||||
|
||||
/**
|
||||
* drm_gem_init - Initialize the GEM device fields
|
||||
* @dev: drm_devic structure to initialize
|
||||
@ -89,7 +96,8 @@ drm_gem_init(struct drm_device *dev)
|
||||
mutex_init(&dev->object_name_lock);
|
||||
idr_init_base(&dev->object_name_idr, 1);
|
||||
|
||||
vma_offset_manager = kzalloc(sizeof(*vma_offset_manager), GFP_KERNEL);
|
||||
vma_offset_manager = drmm_kzalloc(dev, sizeof(*vma_offset_manager),
|
||||
GFP_KERNEL);
|
||||
if (!vma_offset_manager) {
|
||||
DRM_ERROR("out of memory\n");
|
||||
return -ENOMEM;
|
||||
@ -100,16 +108,7 @@ drm_gem_init(struct drm_device *dev)
|
||||
DRM_FILE_PAGE_OFFSET_START,
|
||||
DRM_FILE_PAGE_OFFSET_SIZE);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
void
|
||||
drm_gem_destroy(struct drm_device *dev)
|
||||
{
|
||||
|
||||
drm_vma_offset_manager_destroy(dev->vma_offset_manager);
|
||||
kfree(dev->vma_offset_manager);
|
||||
dev->vma_offset_manager = NULL;
|
||||
return drmm_add_action(dev, drm_gem_init_release, NULL);
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -144,7 +144,6 @@ void drm_sysfs_lease_event(struct drm_device *dev);
|
||||
/* drm_gem.c */
|
||||
struct drm_gem_object;
|
||||
int drm_gem_init(struct drm_device *dev);
|
||||
void drm_gem_destroy(struct drm_device *dev);
|
||||
int drm_gem_handle_create_tail(struct drm_file *file_priv,
|
||||
struct drm_gem_object *obj,
|
||||
u32 *handlep);
|
||||
|
Loading…
Reference in New Issue
Block a user