drm/msm: Add priv->mm_lock to protect active/inactive lists
Rather than relying on the big dev->struct_mutex hammer, introduce a more specific lock for protecting the bo lists. Change-Id: I4c876a1c3ae51ff62372703a99a8daff0c4a7950 Signed-off-by: Rob Clark <robdclark@chromium.org> Git-commit: d984457b31c4c53d2af374d5e78b3eb64debd483 Git-repo: git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git [samtran@codeaurora.org: avoid changes related to debugfs and shrinker] Signed-off-by: Samantha Tran <samtran@codeaurora.org>
This commit is contained in:
@@ -1017,11 +1017,15 @@ void msm_gem_free_object(struct drm_gem_object *obj)
|
||||
static void free_object(struct msm_gem_object *msm_obj)
|
||||
{
|
||||
struct drm_gem_object *obj = &msm_obj->base;
|
||||
struct drm_device *dev = obj->dev;
|
||||
struct msm_drm_private *priv = dev->dev_private;
|
||||
|
||||
/* object should not be on active list: */
|
||||
WARN_ON(is_active(msm_obj));
|
||||
|
||||
mutex_lock(&priv->mm_lock);
|
||||
list_del(&msm_obj->mm_list);
|
||||
mutex_unlock(&priv->mm_lock);
|
||||
|
||||
mutex_lock(&msm_obj->lock);
|
||||
|
||||
@@ -1149,14 +1153,9 @@ static int msm_gem_new_impl(struct drm_device *dev,
|
||||
msm_obj->in_active_list = false;
|
||||
msm_obj->obj_dirty = false;
|
||||
|
||||
if (struct_mutex_locked) {
|
||||
WARN_ON(!mutex_is_locked(&dev->struct_mutex));
|
||||
list_add_tail(&msm_obj->mm_list, &priv->inactive_list);
|
||||
} else {
|
||||
mutex_lock(&dev->struct_mutex);
|
||||
list_add_tail(&msm_obj->mm_list, &priv->inactive_list);
|
||||
mutex_unlock(&dev->struct_mutex);
|
||||
}
|
||||
mutex_lock(&priv->mm_lock);
|
||||
list_add_tail(&msm_obj->mm_list, &priv->inactive_list);
|
||||
mutex_unlock(&priv->mm_lock);
|
||||
|
||||
*obj = &msm_obj->base;
|
||||
|
||||
|
Reference in New Issue
Block a user