drm/mode: use _object_find to find framebuffers.
No point have this code dupliated at this point, use the _object_find code instead now. Signed-off-by: Dave Airlie <airlied@redhat.com> Reviewed-by: Daniel Vetter <daniel.vetter@ffwll.ch>
This commit is contained in:
parent
d0f37cf629
commit
cee26ac47d
|
@ -362,8 +362,7 @@ static struct drm_mode_object *_object_find(struct drm_device *dev,
|
|||
obj = NULL;
|
||||
/* don't leak out unref'd fb's */
|
||||
if (obj &&
|
||||
(obj->type == DRM_MODE_OBJECT_FB ||
|
||||
obj->type == DRM_MODE_OBJECT_BLOB))
|
||||
obj->type == DRM_MODE_OBJECT_BLOB)
|
||||
obj = NULL;
|
||||
mutex_unlock(&dev->mode_config.idr_mutex);
|
||||
|
||||
|
@ -478,23 +477,6 @@ int drm_framebuffer_init(struct drm_device *dev, struct drm_framebuffer *fb,
|
|||
}
|
||||
EXPORT_SYMBOL(drm_framebuffer_init);
|
||||
|
||||
static struct drm_framebuffer *__drm_framebuffer_lookup(struct drm_device *dev,
|
||||
uint32_t id)
|
||||
{
|
||||
struct drm_mode_object *obj = NULL;
|
||||
struct drm_framebuffer *fb;
|
||||
|
||||
mutex_lock(&dev->mode_config.idr_mutex);
|
||||
obj = idr_find(&dev->mode_config.crtc_idr, id);
|
||||
if (!obj || (obj->type != DRM_MODE_OBJECT_FB) || (obj->id != id))
|
||||
fb = NULL;
|
||||
else
|
||||
fb = obj_to_fb(obj);
|
||||
mutex_unlock(&dev->mode_config.idr_mutex);
|
||||
|
||||
return fb;
|
||||
}
|
||||
|
||||
/**
|
||||
* drm_framebuffer_lookup - look up a drm framebuffer and grab a reference
|
||||
* @dev: drm device
|
||||
|
@ -507,11 +489,13 @@ static struct drm_framebuffer *__drm_framebuffer_lookup(struct drm_device *dev,
|
|||
struct drm_framebuffer *drm_framebuffer_lookup(struct drm_device *dev,
|
||||
uint32_t id)
|
||||
{
|
||||
struct drm_framebuffer *fb;
|
||||
struct drm_mode_object *obj;
|
||||
struct drm_framebuffer *fb = NULL;
|
||||
|
||||
mutex_lock(&dev->mode_config.fb_lock);
|
||||
fb = __drm_framebuffer_lookup(dev, id);
|
||||
if (fb) {
|
||||
obj = _object_find(dev, id, DRM_MODE_OBJECT_FB);
|
||||
if (obj) {
|
||||
fb = obj_to_fb(obj);
|
||||
if (!kref_get_unless_zero(&fb->base.refcount))
|
||||
fb = NULL;
|
||||
}
|
||||
|
@ -3489,6 +3473,7 @@ int drm_mode_rmfb(struct drm_device *dev,
|
|||
{
|
||||
struct drm_framebuffer *fb = NULL;
|
||||
struct drm_framebuffer *fbl = NULL;
|
||||
struct drm_mode_object *obj;
|
||||
uint32_t *id = data;
|
||||
int found = 0;
|
||||
|
||||
|
@ -3497,10 +3482,10 @@ int drm_mode_rmfb(struct drm_device *dev,
|
|||
|
||||
mutex_lock(&file_priv->fbs_lock);
|
||||
mutex_lock(&dev->mode_config.fb_lock);
|
||||
fb = __drm_framebuffer_lookup(dev, *id);
|
||||
if (!fb)
|
||||
obj = _object_find(dev, *id, DRM_MODE_OBJECT_FB);
|
||||
if (!obj)
|
||||
goto fail_lookup;
|
||||
|
||||
fb = obj_to_fb(obj);
|
||||
list_for_each_entry(fbl, &file_priv->fbs, filp_head)
|
||||
if (fb == fbl)
|
||||
found = 1;
|
||||
|
|
Loading…
Reference in New Issue