gallium/radeon: Fix losing holes when allocating virtual address space.
If a hole exactly matches the allocated size plus alignment, we would fail to preserve the alignment as a hole. This would result in never being able to use the alignment area for an allocation again. Signed-off-by: Michel Dänzer <michel.daenzer@amd.com> Reviewed-by: Alex Deucher <alexander.deucher@amd.com>
This commit is contained in:
committed by
Michel Dänzer
parent
206d07625c
commit
f5fe81daea
@@ -221,7 +221,7 @@ static uint64_t radeon_bomgr_find_va(struct radeon_bomgr *mgr, uint64_t size, ui
|
|||||||
pipe_mutex_unlock(mgr->bo_va_mutex);
|
pipe_mutex_unlock(mgr->bo_va_mutex);
|
||||||
return offset;
|
return offset;
|
||||||
}
|
}
|
||||||
if ((hole->size - waste) >= size) {
|
if ((hole->size - waste) > size) {
|
||||||
if (waste) {
|
if (waste) {
|
||||||
n = CALLOC_STRUCT(radeon_bo_va_hole);
|
n = CALLOC_STRUCT(radeon_bo_va_hole);
|
||||||
n->size = waste;
|
n->size = waste;
|
||||||
@@ -233,6 +233,11 @@ static uint64_t radeon_bomgr_find_va(struct radeon_bomgr *mgr, uint64_t size, ui
|
|||||||
pipe_mutex_unlock(mgr->bo_va_mutex);
|
pipe_mutex_unlock(mgr->bo_va_mutex);
|
||||||
return offset;
|
return offset;
|
||||||
}
|
}
|
||||||
|
if ((hole->size - waste) == size) {
|
||||||
|
hole->size = waste;
|
||||||
|
pipe_mutex_unlock(mgr->bo_va_mutex);
|
||||||
|
return offset;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
offset = mgr->va_offset;
|
offset = mgr->va_offset;
|
||||||
|
|||||||
Reference in New Issue
Block a user