drm/ttm: Fix a bug occuring when validating a buffer object in a range.
authorThomas Hellstrom <thellstrom@vmware.com>
Thu, 11 Feb 2010 23:18:00 +0000 (00:18 +0100)
committerDave Airlie <airlied@redhat.com>
Mon, 15 Feb 2010 01:19:14 +0000 (11:19 +1000)
If the buffer object was already in the requested memory type, but
outside of the requested range it was never moved into the requested range.

Signed-off-by: Thomas Hellstrom <thellstrom@vmware.com>
Signed-off-by: Dave Airlie <airlied@redhat.com>
drivers/gpu/drm/ttm/ttm_bo.c

index 1a3e909b7bba6e926cd5aa3b90e5a51419b1db03..c7320ce4567de25569eb23c6fe352ae9f62a3bf9 100644 (file)
@@ -1020,6 +1020,12 @@ static int ttm_bo_mem_compat(struct ttm_placement *placement,
                             struct ttm_mem_reg *mem)
 {
        int i;
+       struct drm_mm_node *node = mem->mm_node;
+
+       if (node && placement->lpfn != 0 &&
+           (node->start < placement->fpfn ||
+            node->start + node->size > placement->lpfn))
+               return -1;
 
        for (i = 0; i < placement->num_placement; i++) {
                if ((placement->placement[i] & mem->placement &