intel: Move is_softpin to obj->kflags
Use obj->kflags to set EXEC_OBJECT_PINNED when the object is softpinned, and so remember to clear the softpin status when the object is freed (and reused). Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>main
parent
fe7cb34eda
commit
e0f05b2fad
|
@ -278,11 +278,6 @@ struct _drm_intel_bo_gem {
|
|||
*/
|
||||
bool use_48b_address_range;
|
||||
|
||||
/**
|
||||
* Whether this buffer is softpinned at offset specified by the user
|
||||
*/
|
||||
bool is_softpin;
|
||||
|
||||
/**
|
||||
* Size in bytes of this buffer and its relocation descendents.
|
||||
*
|
||||
|
@ -438,7 +433,7 @@ drm_intel_gem_dump_validation_list(drm_intel_bufmgr_gem *bufmgr_gem)
|
|||
|
||||
if (bo_gem->relocs == NULL && bo_gem->softpin_target == NULL) {
|
||||
DBG("%2d: %d %s(%s)\n", i, bo_gem->gem_handle,
|
||||
bo_gem->is_softpin ? "*" : "",
|
||||
bo_gem->kflags & EXEC_OBJECT_PINNED ? "*" : "",
|
||||
bo_gem->name);
|
||||
continue;
|
||||
}
|
||||
|
@ -452,7 +447,7 @@ drm_intel_gem_dump_validation_list(drm_intel_bufmgr_gem *bufmgr_gem)
|
|||
"%d (%s)@0x%08x %08x + 0x%08x\n",
|
||||
i,
|
||||
bo_gem->gem_handle,
|
||||
bo_gem->is_softpin ? "*" : "",
|
||||
bo_gem->kflags & EXEC_OBJECT_PINNED ? "*" : "",
|
||||
bo_gem->name,
|
||||
upper_32_bits(bo_gem->relocs[j].offset),
|
||||
lower_32_bits(bo_gem->relocs[j].offset),
|
||||
|
@ -471,7 +466,7 @@ drm_intel_gem_dump_validation_list(drm_intel_bufmgr_gem *bufmgr_gem)
|
|||
"%d *(%s)@0x%08x %08x\n",
|
||||
i,
|
||||
bo_gem->gem_handle,
|
||||
bo_gem->is_softpin ? "*" : "",
|
||||
bo_gem->kflags & EXEC_OBJECT_PINNED ? "*" : "",
|
||||
bo_gem->name,
|
||||
target_gem->gem_handle,
|
||||
target_gem->name,
|
||||
|
@ -541,14 +536,13 @@ drm_intel_add_validate_buffer2(drm_intel_bo *bo, int need_fence)
|
|||
drm_intel_bufmgr_gem *bufmgr_gem = (drm_intel_bufmgr_gem *)bo->bufmgr;
|
||||
drm_intel_bo_gem *bo_gem = (drm_intel_bo_gem *)bo;
|
||||
int index;
|
||||
int flags = 0;
|
||||
unsigned long flags;
|
||||
|
||||
flags = 0;
|
||||
if (need_fence)
|
||||
flags |= EXEC_OBJECT_NEEDS_FENCE;
|
||||
if (bo_gem->use_48b_address_range)
|
||||
flags |= EXEC_OBJECT_SUPPORTS_48B_ADDRESS;
|
||||
if (bo_gem->is_softpin)
|
||||
flags |= EXEC_OBJECT_PINNED;
|
||||
|
||||
if (bo_gem->validate_index != -1) {
|
||||
bufmgr_gem->exec2_objects[bo_gem->validate_index].flags |= flags;
|
||||
|
@ -579,7 +573,7 @@ drm_intel_add_validate_buffer2(drm_intel_bo *bo, int need_fence)
|
|||
bufmgr_gem->exec2_objects[index].relocs_ptr = (uintptr_t)bo_gem->relocs;
|
||||
bufmgr_gem->exec2_objects[index].alignment = bo->align;
|
||||
bufmgr_gem->exec2_objects[index].offset = bo->offset64;
|
||||
bufmgr_gem->exec2_objects[index].flags = flags | bo_gem->kflags;
|
||||
bufmgr_gem->exec2_objects[index].flags = bo_gem->kflags | flags;
|
||||
bufmgr_gem->exec2_objects[index].rsvd1 = 0;
|
||||
bufmgr_gem->exec2_objects[index].rsvd2 = 0;
|
||||
bufmgr_gem->exec_bos[index] = bo;
|
||||
|
@ -1411,8 +1405,6 @@ drm_intel_gem_bo_unreference_final(drm_intel_bo *bo, time_t time)
|
|||
bo_gem->name = NULL;
|
||||
bo_gem->validate_index = -1;
|
||||
|
||||
bo_gem->kflags = 0;
|
||||
|
||||
DRMLISTADDTAIL(&bo_gem->head, &bucket->head);
|
||||
} else {
|
||||
drm_intel_gem_bo_free(bo);
|
||||
|
@ -2071,7 +2063,7 @@ drm_intel_gem_bo_add_softpin_target(drm_intel_bo *bo, drm_intel_bo *target_bo)
|
|||
return -ENOMEM;
|
||||
}
|
||||
|
||||
if (!target_bo_gem->is_softpin)
|
||||
if (!(target_bo_gem->kflags & EXEC_OBJECT_PINNED))
|
||||
return -EINVAL;
|
||||
if (target_bo_gem == bo_gem)
|
||||
return -EINVAL;
|
||||
|
@ -2103,7 +2095,7 @@ drm_intel_gem_bo_emit_reloc(drm_intel_bo *bo, uint32_t offset,
|
|||
drm_intel_bufmgr_gem *bufmgr_gem = (drm_intel_bufmgr_gem *)bo->bufmgr;
|
||||
drm_intel_bo_gem *target_bo_gem = (drm_intel_bo_gem *)target_bo;
|
||||
|
||||
if (target_bo_gem->is_softpin)
|
||||
if (target_bo_gem->kflags & EXEC_OBJECT_PINNED)
|
||||
return drm_intel_gem_bo_add_softpin_target(bo, target_bo);
|
||||
else
|
||||
return do_bo_emit_reloc(bo, offset, target_bo, target_offset,
|
||||
|
@ -2287,7 +2279,7 @@ drm_intel_update_buffer_offsets2 (drm_intel_bufmgr_gem *bufmgr_gem)
|
|||
/* If we're seeing softpinned object here it means that the kernel
|
||||
* has relocated our object... Indicating a programming error
|
||||
*/
|
||||
assert(!bo_gem->is_softpin);
|
||||
assert(!(bo_gem->kflags & EXEC_OBJECT_PINNED));
|
||||
DBG("BO %d (%s) migrated: 0x%08x %08x -> 0x%08x %08x\n",
|
||||
bo_gem->gem_handle, bo_gem->name,
|
||||
upper_32_bits(bo->offset64),
|
||||
|
@ -2643,9 +2635,10 @@ drm_intel_gem_bo_set_softpin_offset(drm_intel_bo *bo, uint64_t offset)
|
|||
{
|
||||
drm_intel_bo_gem *bo_gem = (drm_intel_bo_gem *) bo;
|
||||
|
||||
bo_gem->is_softpin = true;
|
||||
bo->offset64 = offset;
|
||||
bo->offset = offset;
|
||||
bo_gem->kflags |= EXEC_OBJECT_PINNED;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue