summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEric Anholt <eric@anholt.net>2007-08-02 14:08:04 -0700
committerEric Anholt <eric@anholt.net>2007-08-02 14:08:04 -0700
commit3a0bc518e35c62bb9c64c9105f836584d949653f (patch)
tree7eef725bfd65961b02cec1b7b3638d8db08cfbad
parentcf4f1a85af69c2c2e5ba9c822d30863f16ce6821 (diff)
Remove the pinned buffer from the LRU when pinning.
Also, be a little safer with setting the pinned flag within the struct lock. I'm not 100% sure if this is required, but it seems like it might be.
-rw-r--r--linux-core/Makefile1
-rw-r--r--linux-core/drm_bo.c12
2 files changed, 9 insertions, 4 deletions
diff --git a/linux-core/Makefile b/linux-core/Makefile
index 1758777c..46c821a4 100644
--- a/linux-core/Makefile
+++ b/linux-core/Makefile
@@ -268,6 +268,7 @@ PAGE_AGP := $(shell cat $(LINUXDIR)/include/asm/agp.h 2>/dev/null | \
ifneq ($(PAGE_AGP),0)
EXTRA_CFLAGS += -DHAVE_PAGE_AGP
endif
+EXTRA_CFLAGS += -g -O0
# Start with all modules turned off.
CONFIG_DRM_GAMMA := n
diff --git a/linux-core/drm_bo.c b/linux-core/drm_bo.c
index 4ce5f480..53fb5afc 100644
--- a/linux-core/drm_bo.c
+++ b/linux-core/drm_bo.c
@@ -1990,8 +1990,8 @@ drm_bo_set_pin(struct drm_device *dev, struct drm_buffer_object *bo,
return ret;
}
- /* Validate the buffer into its pinned location, with no pending
- * fence.
+ /* Validate the buffer into its pinned location, with no
+ * pending fence.
*/
ret = drm_buffer_object_validate(bo, 0, 0, 0);
if (ret) {
@@ -1999,9 +1999,12 @@ drm_bo_set_pin(struct drm_device *dev, struct drm_buffer_object *bo,
return ret;
}
- /* Add our buffer to the pinned list */
+ /* Pull the buffer off of the LRU and add it to the pinned
+ * list
+ */
bo->pinned_mem_type = bo->mem.mem_type;
mutex_lock(&dev->struct_mutex);
+ list_del_init(&bo->lru);
list_del_init(&bo->pinned_lru);
drm_bo_add_to_pinned_lru(bo);
@@ -2011,6 +2014,7 @@ drm_bo_set_pin(struct drm_device *dev, struct drm_buffer_object *bo,
bo->pinned_node = bo->mem.mm_node;
}
+ bo->pinned = pin;
mutex_unlock(&dev->struct_mutex);
} else {
@@ -2022,9 +2026,9 @@ drm_bo_set_pin(struct drm_device *dev, struct drm_buffer_object *bo,
list_del_init(&bo->pinned_lru);
bo->pinned_node = NULL;
+ bo->pinned = pin;
mutex_unlock(&dev->struct_mutex);
}
- bo->pinned = pin;
mutex_unlock(&bo->mutex);
return 0;
}