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

Author: Henri Verbeet <[email protected]>
Date:   Sun Sep 19 19:27:30 2010 +0200

r600g: Check for other references before checking for existing mappings in 
radeon_bo_pb_map_internal().

Having a non-NULL data pointer doesn't imply it's safe to reuse that mapping,
it may have been unmapped but not flushed yet.

---

 src/gallium/winsys/r600/drm/radeon_bo_pb.c |   14 ++++++++------
 1 files changed, 8 insertions(+), 6 deletions(-)

diff --git a/src/gallium/winsys/r600/drm/radeon_bo_pb.c 
b/src/gallium/winsys/r600/drm/radeon_bo_pb.c
index 65ba962..8cf6a78 100644
--- a/src/gallium/winsys/r600/drm/radeon_bo_pb.c
+++ b/src/gallium/winsys/r600/drm/radeon_bo_pb.c
@@ -53,11 +53,16 @@ radeon_bo_pb_map_internal(struct pb_buffer *_buf,
                          unsigned flags, void *ctx)
 {
        struct radeon_bo_pb *buf = radeon_bo_pb(_buf);
-       
-       if (flags & PB_USAGE_DONTBLOCK) {
-               if (p_atomic_read(&buf->bo->reference.count) > 1)
+
+       if (p_atomic_read(&buf->bo->reference.count) > 1) {
+               if (flags & PB_USAGE_DONTBLOCK) {
                        return NULL;
+               }
+               if (ctx) {
+                       r600_flush_ctx(ctx);
+               }
        }
+
        if (buf->bo->data != NULL) {
                LIST_DELINIT(&buf->maplist);
                return buf->bo->data;
@@ -69,9 +74,6 @@ radeon_bo_pb_map_internal(struct pb_buffer *_buf,
                        return NULL;
        }
 
-       if (p_atomic_read(&buf->bo->reference.count) > 1 && ctx) {
-               r600_flush_ctx(ctx);
-       }
        if (radeon_bo_map(buf->mgr->radeon, buf->bo)) {
                return NULL;
        }

_______________________________________________
mesa-commit mailing list
[email protected]
http://lists.freedesktop.org/mailman/listinfo/mesa-commit

Reply via email to