mutex_lock(&process_info->lock);
 
-       ret = amdgpu_ttm_tt_set_userptr(bo->tbo.ttm, user_addr, 0);
+       ret = amdgpu_ttm_tt_set_userptr(&bo->tbo, user_addr, 0);
        if (ret) {
                pr_err("%s: Failed to set userptr: %d\n", __func__, ret);
                goto out;
 
        bo = gem_to_amdgpu_bo(gobj);
        bo->preferred_domains = AMDGPU_GEM_DOMAIN_GTT;
        bo->allowed_domains = AMDGPU_GEM_DOMAIN_GTT;
-       r = amdgpu_ttm_tt_set_userptr(bo->tbo.ttm, args->addr, args->flags);
+       r = amdgpu_ttm_tt_set_userptr(&bo->tbo, args->addr, args->flags);
        if (r)
                goto release_object;
 
 
  * amdgpu_ttm_tt_set_userptr - Initialize userptr GTT ttm_tt for the current
  * task
  *
- * @ttm: The ttm_tt object to bind this userptr object to
+ * @bo: The ttm_buffer_object to bind this userptr to
  * @addr:  The address in the current tasks VM space to use
  * @flags: Requirements of userptr object.
  *
  * Called by amdgpu_gem_userptr_ioctl() to bind userptr pages
  * to current task
  */
-int amdgpu_ttm_tt_set_userptr(struct ttm_tt *ttm, uint64_t addr,
-                             uint32_t flags)
+int amdgpu_ttm_tt_set_userptr(struct ttm_buffer_object *bo,
+                             uint64_t addr, uint32_t flags)
 {
-       struct amdgpu_ttm_tt *gtt = (void *)ttm;
+       struct amdgpu_ttm_tt *gtt;
 
-       if (gtt == NULL)
-               return -EINVAL;
+       if (!bo->ttm) {
+               /* TODO: We want a separate TTM object type for userptrs */
+               bo->ttm = amdgpu_ttm_tt_create(bo, 0);
+               if (bo->ttm == NULL)
+                       return -ENOMEM;
+       }
 
+       gtt = (void*)bo->ttm;
        gtt->userptr = addr;
        gtt->userflags = flags;
 
 
 #endif
 
 void amdgpu_ttm_tt_set_user_pages(struct ttm_tt *ttm, struct page **pages);
-int amdgpu_ttm_tt_set_userptr(struct ttm_tt *ttm, uint64_t addr,
-                                    uint32_t flags);
+int amdgpu_ttm_tt_set_userptr(struct ttm_buffer_object *bo,
+                             uint64_t addr, uint32_t flags);
 bool amdgpu_ttm_tt_has_userptr(struct ttm_tt *ttm);
 struct mm_struct *amdgpu_ttm_tt_get_usermm(struct ttm_tt *ttm);
 bool amdgpu_ttm_tt_affect_userptr(struct ttm_tt *ttm, unsigned long start,