Mesa (master): gallium/radeon: Fix losing holes when allocating virtual address space.
Michel Dänzer
daenzer at kemper.freedesktop.org
Thu Aug 16 10:00:41 UTC 2012
Module: Mesa
Branch: master
Commit: f5fe81daea622f8f043edc19fb61ba367b6958aa
URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=f5fe81daea622f8f043edc19fb61ba367b6958aa
Author: Michel Dänzer <michel.daenzer at amd.com>
Date: Thu Apr 26 11:44:11 2012 +0200
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 at amd.com>
Reviewed-by: Alex Deucher <alexander.deucher at amd.com>
---
src/gallium/winsys/radeon/drm/radeon_drm_bo.c | 7 ++++++-
1 files changed, 6 insertions(+), 1 deletions(-)
diff --git a/src/gallium/winsys/radeon/drm/radeon_drm_bo.c b/src/gallium/winsys/radeon/drm/radeon_drm_bo.c
index f09e7e8..a01cc15 100644
--- a/src/gallium/winsys/radeon/drm/radeon_drm_bo.c
+++ b/src/gallium/winsys/radeon/drm/radeon_drm_bo.c
@@ -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);
return offset;
}
- if ((hole->size - waste) >= size) {
+ if ((hole->size - waste) > size) {
if (waste) {
n = CALLOC_STRUCT(radeon_bo_va_hole);
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);
return offset;
}
+ if ((hole->size - waste) == size) {
+ hole->size = waste;
+ pipe_mutex_unlock(mgr->bo_va_mutex);
+ return offset;
+ }
}
offset = mgr->va_offset;
More information about the mesa-commit
mailing list