if (unlikely(r)) {
                goto out_cleanup;
        }
-       r = ttm_bo_move_ttm(bo, ctx->interruptible, ctx->no_wait_gpu, new_mem);
+       r = ttm_bo_move_ttm(bo, ctx, new_mem);
 out_cleanup:
        ttm_bo_mem_put(bo, &tmp_mem);
        return r;
        if (unlikely(r)) {
                return r;
        }
-       r = ttm_bo_move_ttm(bo, ctx->interruptible, ctx->no_wait_gpu, &tmp_mem);
+       r = ttm_bo_move_ttm(bo, ctx, &tmp_mem);
        if (unlikely(r)) {
                goto out_cleanup;
        }
 
        if (r) {
 memcpy:
-               r = ttm_bo_move_memcpy(bo, ctx->interruptible,
-                                      ctx->no_wait_gpu, new_mem);
+               r = ttm_bo_move_memcpy(bo, ctx, new_mem);
                if (r) {
                        return r;
                }
 
        if (ret)
                goto out;
 
-       ret = ttm_bo_move_ttm(bo, intr, no_wait_gpu, new_reg);
+       ret = ttm_bo_move_ttm(bo, &ctx, new_reg);
 out:
        ttm_bo_mem_put(bo, &tmp_reg);
        return ret;
        if (ret)
                return ret;
 
-       ret = ttm_bo_move_ttm(bo, intr, no_wait_gpu, &tmp_reg);
+       ret = ttm_bo_move_ttm(bo, &ctx, &tmp_reg);
        if (ret)
                goto out;
 
        /* Fallback to software copy. */
        ret = ttm_bo_wait(bo, ctx->interruptible, ctx->no_wait_gpu);
        if (ret == 0)
-               ret = ttm_bo_move_memcpy(bo, ctx->interruptible,
-                                        ctx->no_wait_gpu, new_reg);
+               ret = ttm_bo_move_memcpy(bo, ctx, new_reg);
 
 out:
        if (drm->client.device.info.family < NV_DEVICE_INFO_V0_TESLA) {
 
                qxl_move_null(bo, new_mem);
                return 0;
        }
-       return ttm_bo_move_memcpy(bo, ctx->interruptible, ctx->no_wait_gpu,
-                                 new_mem);
+       return ttm_bo_move_memcpy(bo, ctx, new_mem);
 }
 
 static void qxl_bo_move_notify(struct ttm_buffer_object *bo,
 
        if (unlikely(r)) {
                goto out_cleanup;
        }
-       r = ttm_bo_move_ttm(bo, interruptible, no_wait_gpu, new_mem);
+       r = ttm_bo_move_ttm(bo, &ctx, new_mem);
 out_cleanup:
        ttm_bo_mem_put(bo, &tmp_mem);
        return r;
        if (unlikely(r)) {
                return r;
        }
-       r = ttm_bo_move_ttm(bo, interruptible, no_wait_gpu, &tmp_mem);
+       r = ttm_bo_move_ttm(bo, &ctx, &tmp_mem);
        if (unlikely(r)) {
                goto out_cleanup;
        }
 
        if (r) {
 memcpy:
-               r = ttm_bo_move_memcpy(bo, ctx->interruptible,
-                                      ctx->no_wait_gpu, new_mem);
+               r = ttm_bo_move_memcpy(bo, ctx, new_mem);
                if (r) {
                        return r;
                }
 
 
        if (!(old_man->flags & TTM_MEMTYPE_FLAG_FIXED) &&
            !(new_man->flags & TTM_MEMTYPE_FLAG_FIXED))
-               ret = ttm_bo_move_ttm(bo, ctx->interruptible,
-                                     ctx->no_wait_gpu, mem);
+               ret = ttm_bo_move_ttm(bo, ctx, mem);
        else if (bdev->driver->move)
                ret = bdev->driver->move(bo, evict, ctx, mem);
        else
-               ret = ttm_bo_move_memcpy(bo, ctx->interruptible,
-                                        ctx->no_wait_gpu, mem);
+               ret = ttm_bo_move_memcpy(bo, ctx, mem);
 
        if (ret) {
                if (bdev->driver->move_notify) {
 
 }
 
 int ttm_bo_move_ttm(struct ttm_buffer_object *bo,
-                   bool interruptible, bool no_wait_gpu,
+                  struct ttm_operation_ctx *ctx,
                    struct ttm_mem_reg *new_mem)
 {
        struct ttm_tt *ttm = bo->ttm;
        int ret;
 
        if (old_mem->mem_type != TTM_PL_SYSTEM) {
-               ret = ttm_bo_wait(bo, interruptible, no_wait_gpu);
+               ret = ttm_bo_wait(bo, ctx->interruptible, ctx->no_wait_gpu);
 
                if (unlikely(ret != 0)) {
                        if (ret != -ERESTARTSYS)
 }
 
 int ttm_bo_move_memcpy(struct ttm_buffer_object *bo,
-                      bool interruptible, bool no_wait_gpu,
+                      struct ttm_operation_ctx *ctx,
                       struct ttm_mem_reg *new_mem)
 {
        struct ttm_bo_device *bdev = bo->bdev;
        unsigned long add = 0;
        int dir;
 
-       ret = ttm_bo_wait(bo, interruptible, no_wait_gpu);
+       ret = ttm_bo_wait(bo, ctx->interruptible, ctx->no_wait_gpu);
        if (ret)
                return ret;
 
 
  */
 
 int ttm_bo_move_ttm(struct ttm_buffer_object *bo,
-                   bool interruptible, bool no_wait_gpu,
+                   struct ttm_operation_ctx *ctx,
                    struct ttm_mem_reg *new_mem);
 
 /**
  */
 
 int ttm_bo_move_memcpy(struct ttm_buffer_object *bo,
-                      bool interruptible, bool no_wait_gpu,
+                      struct ttm_operation_ctx *ctx,
                       struct ttm_mem_reg *new_mem);
 
 /**