static int msm_gem_new_impl(struct drm_device *dev,
                uint32_t size, uint32_t flags,
-               struct drm_gem_object **obj,
-               bool struct_mutex_locked)
+               struct drm_gem_object **obj)
 {
-       struct msm_drm_private *priv = dev->dev_private;
        struct msm_gem_object *msm_obj;
 
        switch (flags & MSM_BO_CACHE_MASK) {
        INIT_LIST_HEAD(&msm_obj->submit_entry);
        INIT_LIST_HEAD(&msm_obj->vmas);
 
-       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);
-       }
-
        *obj = &msm_obj->base;
 
        return 0;
                uint32_t size, uint32_t flags, bool struct_mutex_locked)
 {
        struct msm_drm_private *priv = dev->dev_private;
+       struct msm_gem_object *msm_obj;
        struct drm_gem_object *obj = NULL;
        bool use_vram = false;
        int ret;
        if (size == 0)
                return ERR_PTR(-EINVAL);
 
-       ret = msm_gem_new_impl(dev, size, flags, &obj, struct_mutex_locked);
+       ret = msm_gem_new_impl(dev, size, flags, &obj);
        if (ret)
                goto fail;
 
+       msm_obj = to_msm_bo(obj);
+
        if (use_vram) {
                struct msm_gem_vma *vma;
                struct page **pages;
-               struct msm_gem_object *msm_obj = to_msm_bo(obj);
 
                mutex_lock(&msm_obj->lock);
 
                mapping_set_gfp_mask(obj->filp->f_mapping, GFP_HIGHUSER);
        }
 
+       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);
+       }
+
        return obj;
 
 fail:
 struct drm_gem_object *msm_gem_import(struct drm_device *dev,
                struct dma_buf *dmabuf, struct sg_table *sgt)
 {
+       struct msm_drm_private *priv = dev->dev_private;
        struct msm_gem_object *msm_obj;
        struct drm_gem_object *obj;
        uint32_t size;
 
        size = PAGE_ALIGN(dmabuf->size);
 
-       ret = msm_gem_new_impl(dev, size, MSM_BO_WC, &obj, false);
+       ret = msm_gem_new_impl(dev, size, MSM_BO_WC, &obj);
        if (ret)
                goto fail;
 
        }
 
        mutex_unlock(&msm_obj->lock);
+
+       mutex_lock(&dev->struct_mutex);
+       list_add_tail(&msm_obj->mm_list, &priv->inactive_list);
+       mutex_unlock(&dev->struct_mutex);
+
        return obj;
 
 fail: