mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-05-05 18:18:06 +02:00
i965/drm: Drop softpin support for now.
We may want this eventually, but simplify for now. We can add it back later when we actually intend to use it. Reviewed-by: Chris Wilson <chris@chris-wilson.co.uk> Acked-by: Jason Ekstrand <jason@jlekstrand.net>
This commit is contained in:
parent
0314eed3b1
commit
d606f64e2d
2 changed files with 8 additions and 143 deletions
|
|
@ -255,13 +255,6 @@ int drm_bacon_bo_busy(drm_bacon_bo *bo);
|
|||
*/
|
||||
int drm_bacon_bo_madvise(drm_bacon_bo *bo, int madv);
|
||||
|
||||
/**
|
||||
* Set the offset at which this buffer will be softpinned
|
||||
* \param bo Buffer to set the softpin offset for
|
||||
* \param offset Softpin offset
|
||||
*/
|
||||
int drm_bacon_bo_set_softpin_offset(drm_bacon_bo *bo, uint64_t offset);
|
||||
|
||||
/**
|
||||
* Disable buffer reuse for buffers which will be shared in some way,
|
||||
* as with scanout buffers. When the buffer reference count goes to
|
||||
|
|
|
|||
|
|
@ -198,13 +198,6 @@ struct _drm_bacon_bo_gem {
|
|||
drm_bacon_reloc_target *reloc_target_info;
|
||||
/** Number of entries in relocs */
|
||||
int reloc_count;
|
||||
/** Array of BOs that are referenced by this buffer and will be softpinned */
|
||||
drm_bacon_bo **softpin_target;
|
||||
/** Number softpinned BOs that are referenced by this buffer */
|
||||
int softpin_target_count;
|
||||
/** Maximum amount of softpinned BOs that are referenced by this buffer */
|
||||
int softpin_target_size;
|
||||
|
||||
/** Mapped address for the buffer, saved across map/unmap cycles */
|
||||
void *mem_virtual;
|
||||
/** GTT virtual address for the buffer, saved across map/unmap cycles */
|
||||
|
|
@ -345,9 +338,8 @@ drm_bacon_gem_dump_validation_list(drm_bacon_bufmgr *bufmgr)
|
|||
drm_bacon_bo *bo = bufmgr->exec_bos[i];
|
||||
drm_bacon_bo_gem *bo_gem = (drm_bacon_bo_gem *) bo;
|
||||
|
||||
if (bo_gem->relocs == NULL && bo_gem->softpin_target == NULL) {
|
||||
DBG("%2d: %d %s(%s)\n", i, bo_gem->gem_handle,
|
||||
bo_gem->kflags & EXEC_OBJECT_PINNED ? "*" : "",
|
||||
if (bo_gem->relocs == NULL) {
|
||||
DBG("%2d: %d (%s)\n", i, bo_gem->gem_handle,
|
||||
bo_gem->name);
|
||||
continue;
|
||||
}
|
||||
|
|
@ -357,11 +349,10 @@ drm_bacon_gem_dump_validation_list(drm_bacon_bufmgr *bufmgr)
|
|||
drm_bacon_bo_gem *target_gem =
|
||||
(drm_bacon_bo_gem *) target_bo;
|
||||
|
||||
DBG("%2d: %d %s(%s)@0x%08x %08x -> "
|
||||
DBG("%2d: %d (%s)@0x%08x %08x -> "
|
||||
"%d (%s)@0x%08x %08x + 0x%08x\n",
|
||||
i,
|
||||
bo_gem->gem_handle,
|
||||
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),
|
||||
|
|
@ -371,22 +362,6 @@ drm_bacon_gem_dump_validation_list(drm_bacon_bufmgr *bufmgr)
|
|||
lower_32_bits(target_bo->offset64),
|
||||
bo_gem->relocs[j].delta);
|
||||
}
|
||||
|
||||
for (j = 0; j < bo_gem->softpin_target_count; j++) {
|
||||
drm_bacon_bo *target_bo = bo_gem->softpin_target[j];
|
||||
drm_bacon_bo_gem *target_gem =
|
||||
(drm_bacon_bo_gem *) target_bo;
|
||||
DBG("%2d: %d %s(%s) -> "
|
||||
"%d *(%s)@0x%08x %08x\n",
|
||||
i,
|
||||
bo_gem->gem_handle,
|
||||
bo_gem->kflags & EXEC_OBJECT_PINNED ? "*" : "",
|
||||
bo_gem->name,
|
||||
target_gem->gem_handle,
|
||||
target_gem->name,
|
||||
upper_32_bits(target_bo->offset64),
|
||||
lower_32_bits(target_bo->offset64));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -1043,13 +1018,9 @@ drm_bacon_gem_bo_unreference_final(drm_bacon_bo *bo, time_t time)
|
|||
time);
|
||||
}
|
||||
}
|
||||
for (i = 0; i < bo_gem->softpin_target_count; i++)
|
||||
drm_bacon_gem_bo_unreference_locked_timed(bo_gem->softpin_target[i],
|
||||
time);
|
||||
bo_gem->kflags = 0;
|
||||
bo_gem->reloc_count = 0;
|
||||
bo_gem->used_as_reloc_target = false;
|
||||
bo_gem->softpin_target_count = 0;
|
||||
|
||||
DBG("bo_unreference final: %d (%s)\n",
|
||||
bo_gem->gem_handle, bo_gem->name);
|
||||
|
|
@ -1063,11 +1034,6 @@ drm_bacon_gem_bo_unreference_final(drm_bacon_bo *bo, time_t time)
|
|||
free(bo_gem->relocs);
|
||||
bo_gem->relocs = NULL;
|
||||
}
|
||||
if (bo_gem->softpin_target) {
|
||||
free(bo_gem->softpin_target);
|
||||
bo_gem->softpin_target = NULL;
|
||||
bo_gem->softpin_target_size = 0;
|
||||
}
|
||||
|
||||
/* Clear any left-over mappings */
|
||||
if (bo_gem->map_count) {
|
||||
|
|
@ -1573,10 +1539,10 @@ drm_bacon_bufmgr_gem_destroy(drm_bacon_bufmgr *bufmgr)
|
|||
* the relocation entry write when the buffer hasn't moved from the
|
||||
* last known offset in target_bo.
|
||||
*/
|
||||
static int
|
||||
do_bo_emit_reloc(drm_bacon_bo *bo, uint32_t offset,
|
||||
drm_bacon_bo *target_bo, uint32_t target_offset,
|
||||
uint32_t read_domains, uint32_t write_domain)
|
||||
int
|
||||
drm_bacon_bo_emit_reloc(drm_bacon_bo *bo, uint32_t offset,
|
||||
drm_bacon_bo *target_bo, uint32_t target_offset,
|
||||
uint32_t read_domains, uint32_t write_domain)
|
||||
{
|
||||
drm_bacon_bufmgr *bufmgr = bo->bufmgr;
|
||||
drm_bacon_bo_gem *bo_gem = (drm_bacon_bo_gem *) bo;
|
||||
|
|
@ -1626,59 +1592,6 @@ do_bo_emit_reloc(drm_bacon_bo *bo, uint32_t offset,
|
|||
return 0;
|
||||
}
|
||||
|
||||
static int
|
||||
drm_bacon_gem_bo_add_softpin_target(drm_bacon_bo *bo, drm_bacon_bo *target_bo)
|
||||
{
|
||||
drm_bacon_bufmgr *bufmgr = bo->bufmgr;
|
||||
drm_bacon_bo_gem *bo_gem = (drm_bacon_bo_gem *) bo;
|
||||
drm_bacon_bo_gem *target_bo_gem = (drm_bacon_bo_gem *) target_bo;
|
||||
|
||||
if (bo_gem->has_error)
|
||||
return -ENOMEM;
|
||||
|
||||
if (target_bo_gem->has_error) {
|
||||
bo_gem->has_error = true;
|
||||
return -ENOMEM;
|
||||
}
|
||||
|
||||
if (!(target_bo_gem->kflags & EXEC_OBJECT_PINNED))
|
||||
return -EINVAL;
|
||||
if (target_bo_gem == bo_gem)
|
||||
return -EINVAL;
|
||||
|
||||
if (bo_gem->softpin_target_count == bo_gem->softpin_target_size) {
|
||||
int new_size = bo_gem->softpin_target_size * 2;
|
||||
if (new_size == 0)
|
||||
new_size = bufmgr->max_relocs;
|
||||
|
||||
bo_gem->softpin_target = realloc(bo_gem->softpin_target, new_size *
|
||||
sizeof(drm_bacon_bo *));
|
||||
if (!bo_gem->softpin_target)
|
||||
return -ENOMEM;
|
||||
|
||||
bo_gem->softpin_target_size = new_size;
|
||||
}
|
||||
bo_gem->softpin_target[bo_gem->softpin_target_count] = target_bo;
|
||||
drm_bacon_bo_reference(target_bo);
|
||||
bo_gem->softpin_target_count++;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
int
|
||||
drm_bacon_bo_emit_reloc(drm_bacon_bo *bo, uint32_t offset,
|
||||
drm_bacon_bo *target_bo, uint32_t target_offset,
|
||||
uint32_t read_domains, uint32_t write_domain)
|
||||
{
|
||||
drm_bacon_bo_gem *target_bo_gem = (drm_bacon_bo_gem *)target_bo;
|
||||
|
||||
if (target_bo_gem->kflags & EXEC_OBJECT_PINNED)
|
||||
return drm_bacon_gem_bo_add_softpin_target(bo, target_bo);
|
||||
else
|
||||
return do_bo_emit_reloc(bo, offset, target_bo, target_offset,
|
||||
read_domains, write_domain);
|
||||
}
|
||||
|
||||
int
|
||||
drm_bacon_gem_bo_get_reloc_count(drm_bacon_bo *bo)
|
||||
{
|
||||
|
|
@ -1699,8 +1612,6 @@ drm_bacon_gem_bo_get_reloc_count(drm_bacon_bo *bo)
|
|||
*
|
||||
* Any further drm_bacon_bufmgr_check_aperture_space() queries
|
||||
* involving this buffer in the tree are undefined after this call.
|
||||
*
|
||||
* This also removes all softpinned targets being referenced by the BO.
|
||||
*/
|
||||
void
|
||||
drm_bacon_gem_bo_clear_relocs(drm_bacon_bo *bo, int start)
|
||||
|
|
@ -1726,12 +1637,6 @@ drm_bacon_gem_bo_clear_relocs(drm_bacon_bo *bo, int start)
|
|||
}
|
||||
bo_gem->reloc_count = start;
|
||||
|
||||
for (i = 0; i < bo_gem->softpin_target_count; i++) {
|
||||
drm_bacon_bo_gem *target_bo_gem = (drm_bacon_bo_gem *) bo_gem->softpin_target[i];
|
||||
drm_bacon_gem_bo_unreference_locked_timed(&target_bo_gem->bo, time.tv_sec);
|
||||
}
|
||||
bo_gem->softpin_target_count = 0;
|
||||
|
||||
pthread_mutex_unlock(&bufmgr->lock);
|
||||
|
||||
}
|
||||
|
|
@ -1742,7 +1647,7 @@ drm_bacon_gem_bo_process_reloc2(drm_bacon_bo *bo)
|
|||
drm_bacon_bo_gem *bo_gem = (drm_bacon_bo_gem *)bo;
|
||||
int i;
|
||||
|
||||
if (bo_gem->relocs == NULL && bo_gem->softpin_target == NULL)
|
||||
if (bo_gem->relocs == NULL)
|
||||
return;
|
||||
|
||||
for (i = 0; i < bo_gem->reloc_count; i++) {
|
||||
|
|
@ -1759,17 +1664,6 @@ drm_bacon_gem_bo_process_reloc2(drm_bacon_bo *bo)
|
|||
/* Add the target to the validate list */
|
||||
drm_bacon_add_validate_buffer2(target_bo);
|
||||
}
|
||||
|
||||
for (i = 0; i < bo_gem->softpin_target_count; i++) {
|
||||
drm_bacon_bo *target_bo = bo_gem->softpin_target[i];
|
||||
|
||||
if (target_bo == bo)
|
||||
continue;
|
||||
|
||||
drm_bacon_gem_bo_mark_mmaps_incoherent(bo);
|
||||
drm_bacon_gem_bo_process_reloc2(target_bo);
|
||||
drm_bacon_add_validate_buffer2(target_bo);
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
|
|
@ -1783,10 +1677,6 @@ drm_bacon_update_buffer_offsets2 (drm_bacon_bufmgr *bufmgr)
|
|||
|
||||
/* Update the buffer offset */
|
||||
if (bufmgr->exec2_objects[i].offset != bo->offset64) {
|
||||
/* If we're seeing softpinned object here it means that the kernel
|
||||
* has relocated our object... Indicating a programming error
|
||||
*/
|
||||
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),
|
||||
|
|
@ -1987,17 +1877,6 @@ drm_bacon_bo_get_tiling(drm_bacon_bo *bo, uint32_t * tiling_mode,
|
|||
return 0;
|
||||
}
|
||||
|
||||
int
|
||||
drm_bacon_bo_set_softpin_offset(drm_bacon_bo *bo, uint64_t offset)
|
||||
{
|
||||
drm_bacon_bo_gem *bo_gem = (drm_bacon_bo_gem *) bo;
|
||||
|
||||
bo->offset64 = offset;
|
||||
bo_gem->kflags |= EXEC_OBJECT_PINNED;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
drm_bacon_bo *
|
||||
drm_bacon_bo_gem_create_from_prime(drm_bacon_bufmgr *bufmgr, int prime_fd, int size)
|
||||
{
|
||||
|
|
@ -2362,13 +2241,6 @@ _drm_bacon_gem_bo_references(drm_bacon_bo *bo, drm_bacon_bo *target_bo)
|
|||
return 1;
|
||||
}
|
||||
|
||||
for (i = 0; i< bo_gem->softpin_target_count; i++) {
|
||||
if (bo_gem->softpin_target[i] == target_bo)
|
||||
return 1;
|
||||
if (_drm_bacon_gem_bo_references(bo_gem->softpin_target[i], target_bo))
|
||||
return 1;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue