return;
 
        vm->bulk_moveable = false;
-       if (bo->tbo.type == ttm_bo_type_kernel)
+       if (bo->tbo.type == ttm_bo_type_kernel && bo->parent)
                amdgpu_vm_bo_relocated(base);
        else
                amdgpu_vm_bo_idle(base);
                        amdgpu_vm_bo_moved(bo_base);
                } else {
                        vm->update_funcs->map_table(bo);
-                       amdgpu_vm_bo_relocated(bo_base);
+                       if (bo->parent)
+                               amdgpu_vm_bo_relocated(bo_base);
+                       else
+                               amdgpu_vm_bo_idle(bo_base);
                }
        }
 
  *
  * @param: parameters for the update
  * @vm: requested vm
- * @parent: parent directory
  * @entry: entry to update
  *
  * Makes sure the requested entry in parent is up to date.
  */
 static int amdgpu_vm_update_pde(struct amdgpu_vm_update_params *params,
                                struct amdgpu_vm *vm,
-                               struct amdgpu_vm_pt *parent,
                                struct amdgpu_vm_pt *entry)
 {
+       struct amdgpu_vm_pt *parent = amdgpu_vm_pt_parent(entry);
        struct amdgpu_bo *bo = parent->base.bo, *pbo;
        uint64_t pde, pt, flags;
        unsigned level;
                return r;
 
        while (!list_empty(&vm->relocated)) {
-               struct amdgpu_vm_pt *pt, *entry;
+               struct amdgpu_vm_pt *entry;
 
                entry = list_first_entry(&vm->relocated, struct amdgpu_vm_pt,
                                         base.vm_status);
                amdgpu_vm_bo_idle(&entry->base);
 
-               pt = amdgpu_vm_pt_parent(entry);
-               if (!pt)
-                       continue;
-
-               r = amdgpu_vm_update_pde(¶ms, vm, pt, entry);
+               r = amdgpu_vm_update_pde(¶ms, vm, entry);
                if (r)
                        goto error;
        }