__i915_gem_object_free_mmaps(obj);
 
        atomic_set(&obj->mm.pages_pin_count, 0);
+
+       /*
+        * dma_buf_unmap_attachment() requires reservation to be
+        * locked. The imported GEM shouldn't share reservation lock
+        * and ttm_bo_cleanup_memtype_use() shouldn't be invoked for
+        * dma-buf, so it's safe to take the lock.
+        */
+       if (obj->base.import_attach)
+               i915_gem_object_lock(obj, NULL);
+
        __i915_gem_object_put_pages(obj);
+
+       if (obj->base.import_attach)
+               i915_gem_object_unlock(obj);
+
        GEM_BUG_ON(i915_gem_object_has_pages(obj));
 }
 
 
                goto out_import;
        }
 
-       st = dma_buf_map_attachment(import_attach, DMA_BIDIRECTIONAL);
+       st = dma_buf_map_attachment_unlocked(import_attach, DMA_BIDIRECTIONAL);
        if (IS_ERR(st)) {
                err = PTR_ERR(st);
                goto out_detach;
                timeout = -ETIME;
        }
        err = timeout > 0 ? 0 : timeout;
-       dma_buf_unmap_attachment(import_attach, st, DMA_BIDIRECTIONAL);
+       dma_buf_unmap_attachment_unlocked(import_attach, st, DMA_BIDIRECTIONAL);
 out_detach:
        dma_buf_detach(dmabuf, import_attach);
 out_import:
                goto out_obj;
        }
 
-       err = dma_buf_vmap(dmabuf, &map);
+       err = dma_buf_vmap_unlocked(dmabuf, &map);
        dma_map = err ? NULL : map.vaddr;
        if (!dma_map) {
                pr_err("dma_buf_vmap failed\n");
 
        err = 0;
 out_dma_map:
-       dma_buf_vunmap(dmabuf, &map);
+       dma_buf_vunmap_unlocked(dmabuf, &map);
 out_obj:
        i915_gem_object_put(obj);
 out_dmabuf:
        if (IS_ERR(dmabuf))
                return PTR_ERR(dmabuf);
 
-       err = dma_buf_vmap(dmabuf, &map);
+       err = dma_buf_vmap_unlocked(dmabuf, &map);
        ptr = err ? NULL : map.vaddr;
        if (!ptr) {
                pr_err("dma_buf_vmap failed\n");
        }
 
        memset(ptr, 0xc5, PAGE_SIZE);
-       dma_buf_vunmap(dmabuf, &map);
+       dma_buf_vunmap_unlocked(dmabuf, &map);
 
        obj = to_intel_bo(i915_gem_prime_import(&i915->drm, dmabuf));
        if (IS_ERR(obj)) {
        }
        i915_gem_object_put(obj);
 
-       err = dma_buf_vmap(dmabuf, &map);
+       err = dma_buf_vmap_unlocked(dmabuf, &map);
        ptr = err ? NULL : map.vaddr;
        if (!ptr) {
                pr_err("dma_buf_vmap failed\n");
        memset(ptr, 0xc5, dmabuf->size);
 
        err = 0;
-       dma_buf_vunmap(dmabuf, &map);
+       dma_buf_vunmap_unlocked(dmabuf, &map);
 out:
        dma_buf_put(dmabuf);
        return err;