Mesa (master): gallium/radeon: Delete uppermost virtual address space hole if it's at the top.

Michel Dänzer daenzer at kemper.freedesktop.org
Thu Aug 16 10:00:41 UTC 2012


Module: Mesa
Branch: master
Commit: 6d59b7f6dc3131e773e9c9729388c08a2f987364
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=6d59b7f6dc3131e773e9c9729388c08a2f987364

Author: Michel Dänzer <michel.daenzer at amd.com>
Date:   Thu Apr 26 20:41:17 2012 +0200

gallium/radeon: Delete uppermost virtual address space hole if it's at the top.

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 |   13 ++++++++++++-
 1 files changed, 12 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 a01cc15..1bf22a7 100644
--- a/src/gallium/winsys/radeon/drm/radeon_drm_bo.c
+++ b/src/gallium/winsys/radeon/drm/radeon_drm_bo.c
@@ -287,11 +287,22 @@ static void radeon_bomgr_force_va(struct radeon_bomgr *mgr, uint64_t va, uint64_
 
 static void radeon_bomgr_free_va(struct radeon_bomgr *mgr, uint64_t va, uint64_t size)
 {
+    struct radeon_bo_va_hole *hole;
+
     pipe_mutex_lock(mgr->bo_va_mutex);
     if ((va + size) == mgr->va_offset) {
         mgr->va_offset = va;
+        /* Delete uppermost hole if it reaches the new top */
+        if (!LIST_IS_EMPTY(&mgr->va_holes)) {
+            hole = container_of(mgr->va_holes.next, hole, list);
+            if ((hole->offset + hole->size) == va) {
+                mgr->va_offset = hole->offset;
+                list_del(&hole->list);
+                FREE(hole);
+            }
+        }
     } else {
-        struct radeon_bo_va_hole *hole, *next;
+        struct radeon_bo_va_hole *next;
 
         hole = container_of(&mgr->va_holes, hole, list);
         LIST_FOR_EACH_ENTRY(next, &mgr->va_holes, list) {




More information about the mesa-commit mailing list