summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorThomas Hellstrom <thomas-at-shipmail-dot-org>2009-05-04 15:15:10 +0200
committerThomas Hellstrom <thomas-at-shipmail-dot-org>2009-05-04 22:57:57 +0200
commitf421b2b10fc49e0197ad5213e31a2a57230062af (patch)
treecceab745ce6d2a2f11683543f87f402805484503
parent05abf16c2bbb41921f5ce4fc8ac548327cd5a2b7 (diff)
ttm: Remove the struct ttm_mem_reg::proposed_flags member.
Signed-off-by: Thomas Hellstrom <thomas-at-shipmail-dot-org>
-rw-r--r--linux-core/openchrome/via_buffer.c8
-rw-r--r--linux-core/openchrome/via_execbuf.c7
-rw-r--r--linux-core/ttm/ttm_bo.c64
-rw-r--r--linux-core/ttm/ttm_bo_api.h3
-rw-r--r--linux-core/ttm/ttm_bo_driver.h5
-rw-r--r--linux-core/ttm/ttm_bo_util.c6
-rw-r--r--linux-core/ttm/ttm_placement_user.c2
7 files changed, 38 insertions, 57 deletions
diff --git a/linux-core/openchrome/via_buffer.c b/linux-core/openchrome/via_buffer.c
index 57d1d592..84f20e0d 100644
--- a/linux-core/openchrome/via_buffer.c
+++ b/linux-core/openchrome/via_buffer.c
@@ -178,9 +178,6 @@ static int via_move_vram_tt(struct ttm_buffer_object *bo,
struct ttm_mem_reg tmp_mem = *old_mem;
tmp_mem.mm_node = NULL;
- tmp_mem.proposed_flags &= ~TTM_PL_MASK_MEM;
- tmp_mem.proposed_flags |= (TTM_PL_FLAG_SYSTEM |
- TTM_PL_FLAG_CACHED);
tmp_mem.mem_type = TTM_PL_SYSTEM;
ret = ttm_bo_move_ttm(bo, evict, no_wait, &tmp_mem);
if (ret)
@@ -191,9 +188,6 @@ static int via_move_vram_tt(struct ttm_buffer_object *bo,
struct ttm_mem_reg tmp_mem = *new_mem;
tmp_mem.mm_node = NULL;
- tmp_mem.proposed_flags &= ~TTM_PL_MASK_MEM;
- tmp_mem.proposed_flags |= (TTM_PL_FLAG_SYSTEM |
- TTM_PL_FLAG_CACHED);
tmp_mem.mem_type = TTM_PL_SYSTEM;
ret = via_move_dmablit(bo, true, no_wait, &tmp_mem);
if (ret)
@@ -207,12 +201,10 @@ static void via_move_null(struct ttm_buffer_object *bo,
struct ttm_mem_reg *new_mem)
{
struct ttm_mem_reg *old_mem = &bo->mem;
- uint32_t save_proposed_flags = old_mem->proposed_flags;
BUG_ON(old_mem->mm_node != NULL);
*old_mem = *new_mem;
new_mem->mm_node = NULL;
- old_mem->proposed_flags = save_proposed_flags;
}
int via_bo_move(struct ttm_buffer_object *bo,
diff --git a/linux-core/openchrome/via_execbuf.c b/linux-core/openchrome/via_execbuf.c
index 6c5e3eaa..aef39779 100644
--- a/linux-core/openchrome/via_execbuf.c
+++ b/linux-core/openchrome/via_execbuf.c
@@ -110,8 +110,8 @@ via_placement_fence_type(struct ttm_buffer_object *bo,
return ret;
}
- bo->proposed_flags = (bo->proposed_flags | set_flags)
- & ~clr_flags & TTM_PL_MASK_MEMTYPE;
+ bo->proposed_flags |= set_flags & TTM_PL_MASK_MEMTYPE;
+ bo->proposed_flags &= ~(clr_flags & TTM_PL_MASK_MEMTYPE);
return 0;
}
@@ -559,7 +559,8 @@ static int via_validate_buffer_list(struct drm_file *file_priv,
if (unlikely(ret != 0))
goto out_err;
- ret = ttm_buffer_object_validate(bo, true, false);
+ ret = ttm_buffer_object_validate(bo, bo->proposed_flags,
+ true, false);
if (unlikely(ret != 0))
goto out_err;
diff --git a/linux-core/ttm/ttm_bo.c b/linux-core/ttm/ttm_bo.c
index db27650f..28b48535 100644
--- a/linux-core/ttm/ttm_bo.c
+++ b/linux-core/ttm/ttm_bo.c
@@ -290,11 +290,9 @@ static int ttm_bo_handle_move_mem(struct ttm_buffer_object *bo,
struct ttm_mem_reg *old_mem = &bo->mem;
uint32_t save_flags = old_mem->flags;
- uint32_t save_proposed_flags = old_mem->proposed_flags;
*old_mem = *mem;
mem->mm_node = NULL;
- old_mem->proposed_flags = save_proposed_flags;
ttm_flag_masked(&save_flags, mem->flags,
TTM_PL_MASK_MEMTYPE);
goto moved;
@@ -539,6 +537,7 @@ static int ttm_bo_evict(struct ttm_buffer_object *bo, unsigned mem_type,
int ret = 0;
struct ttm_bo_device *bdev = bo->bdev;
struct ttm_mem_reg evict_mem;
+ uint32_t proposed_placement;
if (bo->mem.mem_type != mem_type)
goto out;
@@ -555,15 +554,13 @@ static int ttm_bo_evict(struct ttm_buffer_object *bo, unsigned mem_type,
evict_mem = bo->mem;
evict_mem.mm_node = NULL;
- evict_mem.proposed_flags = bdev->driver->evict_flags(bo);
- BUG_ON(ttm_bo_type_flags(mem_type) & evict_mem.proposed_flags);
+ proposed_placement = bdev->driver->evict_flags(bo);
- ret = ttm_bo_mem_space(bo, &evict_mem, interruptible, no_wait);
- if (unlikely(ret != 0 && ret != -ERESTART)) {
- evict_mem.proposed_flags = TTM_PL_FLAG_SYSTEM;
- BUG_ON(ttm_bo_type_flags(mem_type) & evict_mem.proposed_flags);
- ret = ttm_bo_mem_space(bo, &evict_mem, interruptible, no_wait);
- }
+ ret = ttm_bo_mem_space(bo, proposed_placement,
+ &evict_mem, interruptible, no_wait);
+ if (unlikely(ret != 0 && ret != -ERESTART))
+ ret = ttm_bo_mem_space(bo, TTM_PL_FLAG_SYSTEM,
+ &evict_mem, interruptible, no_wait);
if (ret) {
if (ret != -ERESTART)
@@ -707,7 +704,9 @@ static bool ttm_bo_mt_compatible(struct ttm_mem_type_manager *man,
* space.
*/
int ttm_bo_mem_space(struct ttm_buffer_object *bo,
- struct ttm_mem_reg *mem, bool interruptible, bool no_wait)
+ uint32_t proposed_placement,
+ struct ttm_mem_reg *mem,
+ bool interruptible, bool no_wait)
{
struct ttm_bo_device *bdev = bo->bdev;
struct ttm_mem_type_manager *man;
@@ -730,7 +729,7 @@ int ttm_bo_mem_space(struct ttm_buffer_object *bo,
type_ok = ttm_bo_mt_compatible(man,
bo->type == ttm_bo_type_user,
- mem_type, mem->proposed_flags,
+ mem_type, proposed_placement,
&cur_flags);
if (!type_ok)
@@ -789,7 +788,7 @@ int ttm_bo_mem_space(struct ttm_buffer_object *bo,
if (!ttm_bo_mt_compatible(man,
bo->type == ttm_bo_type_user,
mem_type,
- mem->proposed_flags, &cur_flags))
+ proposed_placement, &cur_flags))
continue;
ret = ttm_bo_mem_force_space(bdev, mem, mem_type,
@@ -851,12 +850,8 @@ int ttm_bo_wait_cpu(struct ttm_buffer_object *bo, bool no_wait)
return ret;
}
-/*
- * bo->mutex locked.
- * Note that new_mem_flags are NOT transferred to the bo->mem.proposed_flags.
- */
-
-int ttm_bo_move_buffer(struct ttm_buffer_object *bo, uint32_t new_mem_flags,
+int ttm_bo_move_buffer(struct ttm_buffer_object *bo,
+ uint32_t proposed_placement,
bool interruptible, bool no_wait)
{
struct ttm_bo_device *bdev = bo->bdev;
@@ -878,14 +873,14 @@ int ttm_bo_move_buffer(struct ttm_buffer_object *bo, uint32_t new_mem_flags,
mem.num_pages = bo->num_pages;
mem.size = mem.num_pages << PAGE_SHIFT;
- mem.proposed_flags = new_mem_flags;
mem.page_alignment = bo->mem.page_alignment;
/*
* Determine where to move the buffer.
*/
- ret = ttm_bo_mem_space(bo, &mem, interruptible, no_wait);
+ ret = ttm_bo_mem_space(bo, proposed_placement, &mem,
+ interruptible, no_wait);
if (ret)
goto out_unlock;
@@ -900,40 +895,42 @@ int ttm_bo_move_buffer(struct ttm_buffer_object *bo, uint32_t new_mem_flags,
return ret;
}
-static int ttm_bo_mem_compat(struct ttm_mem_reg *mem)
+static int ttm_bo_mem_compat(uint32_t proposed_placement,
+ struct ttm_mem_reg *mem)
{
- if ((mem->proposed_flags & mem->flags & TTM_PL_MASK_MEM) == 0)
+ if ((proposed_placement & mem->flags & TTM_PL_MASK_MEM) == 0)
return 0;
- if ((mem->proposed_flags & mem->flags & TTM_PL_MASK_CACHING) == 0)
+ if ((proposed_placement & mem->flags & TTM_PL_MASK_CACHING) == 0)
return 0;
return 1;
}
int ttm_buffer_object_validate(struct ttm_buffer_object *bo,
+ uint32_t proposed_placement,
bool interruptible, bool no_wait)
{
int ret;
BUG_ON(!atomic_read(&bo->reserved));
- bo->mem.proposed_flags = bo->proposed_flags;
+ bo->proposed_flags = proposed_placement;
- TTM_DEBUG("Proposed flags 0x%08lx, Old flags 0x%08lx\n",
- (unsigned long)bo->mem.proposed_flags,
+ TTM_DEBUG("Proposed placement 0x%08lx, Old flags 0x%08lx\n",
+ (unsigned long)proposed_placement,
(unsigned long)bo->mem.flags);
/*
* Check whether we need to move buffer.
*/
- if (!ttm_bo_mem_compat(&bo->mem)) {
- ret = ttm_bo_move_buffer(bo, bo->mem.proposed_flags,
+ if (!ttm_bo_mem_compat(bo->proposed_flags, &bo->mem)) {
+ ret = ttm_bo_move_buffer(bo, bo->proposed_flags,
interruptible, no_wait);
if (ret) {
if (ret != -ERESTART)
printk(KERN_ERR "Failed moving buffer. "
"Proposed placement 0x%08x\n",
- bo->mem.proposed_flags);
+ bo->proposed_flags);
if (ret == -ENOMEM)
printk(KERN_ERR "Out of aperture space or "
"DRM memory quota.\n");
@@ -1049,9 +1046,6 @@ int ttm_buffer_object_init(struct ttm_bo_device *bdev,
if ((flags & TTM_PL_MASK_CACHING) == 0)
flags |= TTM_PL_MASK_CACHING;
- bo->proposed_flags = flags;
- bo->mem.proposed_flags = flags;
-
/*
* For ttm_bo_type_device buffers, allocate
* address space from the device.
@@ -1063,7 +1057,7 @@ int ttm_buffer_object_init(struct ttm_bo_device *bdev,
goto out_err;
}
- ret = ttm_buffer_object_validate(bo, interruptible, false);
+ ret = ttm_buffer_object_validate(bo, flags, interruptible, false);
if (ret)
goto out_err;
@@ -1678,8 +1672,6 @@ static int ttm_bo_swapout(struct ttm_mem_shrink *shrink)
evict_mem = bo->mem;
evict_mem.mm_node = NULL;
- evict_mem.proposed_flags =
- TTM_PL_FLAG_SYSTEM | TTM_PL_FLAG_CACHED;
evict_mem.flags = TTM_PL_FLAG_SYSTEM | TTM_PL_FLAG_CACHED;
evict_mem.mem_type = TTM_PL_SYSTEM;
diff --git a/linux-core/ttm/ttm_bo_api.h b/linux-core/ttm/ttm_bo_api.h
index a6014ed9..5c1d47c9 100644
--- a/linux-core/ttm/ttm_bo_api.h
+++ b/linux-core/ttm/ttm_bo_api.h
@@ -67,7 +67,6 @@ struct ttm_mem_reg {
uint32_t page_alignment;
uint32_t mem_type;
uint32_t flags;
- uint32_t proposed_flags;
};
/**
@@ -288,6 +287,7 @@ extern int ttm_bo_wait(struct ttm_buffer_object *bo, bool lazy,
* ttm_buffer_object_validate
*
* @bo: The buffer object.
+ * @proposed_placement: Proposed_placement for the buffer object.
* @interruptible: Sleep interruptible if sleeping.
* @no_wait: Return immediately if the buffer is busy.
*
@@ -300,6 +300,7 @@ extern int ttm_bo_wait(struct ttm_buffer_object *bo, bool lazy,
* -ERESTART if interrupted by a signal.
*/
extern int ttm_buffer_object_validate(struct ttm_buffer_object *bo,
+ uint32_t proposed_placement,
bool interruptible, bool no_wait);
/**
* ttm_bo_unref
diff --git a/linux-core/ttm/ttm_bo_driver.h b/linux-core/ttm/ttm_bo_driver.h
index 213a9926..bdd04afb 100644
--- a/linux-core/ttm/ttm_bo_driver.h
+++ b/linux-core/ttm/ttm_bo_driver.h
@@ -575,8 +575,8 @@ extern bool ttm_mem_reg_is_pci(struct ttm_bo_device *bdev,
*
* @bo: Pointer to a struct ttm_buffer_object. the data of which
* we want to allocate space for.
- * @mem: A struct ttm_mem_reg with the struct ttm_mem_reg::proposed_flags set
- * up.
+ * @proposed_placement: Proposed new placement for the buffer object.
+ * @mem: A struct ttm_mem_reg.
* @interruptible: Sleep interruptible when sliping.
* @no_wait: Don't sleep waiting for space to become available.
*
@@ -590,6 +590,7 @@ extern bool ttm_mem_reg_is_pci(struct ttm_bo_device *bdev,
* -ERESTART: An interruptible sleep was interrupted by a signal.
*/
extern int ttm_bo_mem_space(struct ttm_buffer_object *bo,
+ uint32_t proposed_placement,
struct ttm_mem_reg *mem,
bool interruptible, bool no_wait);
/**
diff --git a/linux-core/ttm/ttm_bo_util.c b/linux-core/ttm/ttm_bo_util.c
index 85611f94..48b8dccf 100644
--- a/linux-core/ttm/ttm_bo_util.c
+++ b/linux-core/ttm/ttm_bo_util.c
@@ -56,7 +56,6 @@ int ttm_bo_move_ttm(struct ttm_buffer_object *bo,
struct ttm_tt *ttm = bo->ttm;
struct ttm_mem_reg *old_mem = &bo->mem;
uint32_t save_flags = old_mem->flags;
- uint32_t save_proposed_flags = old_mem->proposed_flags;
int ret;
if (old_mem->mem_type != TTM_PL_SYSTEM) {
@@ -80,7 +79,6 @@ int ttm_bo_move_ttm(struct ttm_buffer_object *bo,
*old_mem = *new_mem;
new_mem->mm_node = NULL;
- old_mem->proposed_flags = save_proposed_flags;
ttm_flag_masked(&save_flags, new_mem->flags, TTM_PL_MASK_MEMTYPE);
return 0;
}
@@ -192,7 +190,6 @@ int ttm_bo_move_memcpy(struct ttm_buffer_object *bo,
void *new_iomap;
int ret;
uint32_t save_flags = old_mem->flags;
- uint32_t save_proposed_flags = old_mem->proposed_flags;
unsigned long i;
unsigned long page;
unsigned long add = 0;
@@ -237,7 +234,6 @@ int ttm_bo_move_memcpy(struct ttm_buffer_object *bo,
*old_mem = *new_mem;
new_mem->mm_node = NULL;
- old_mem->proposed_flags = save_proposed_flags;
ttm_flag_masked(&save_flags, new_mem->flags, TTM_PL_MASK_MEMTYPE);
if ((man->flags & TTM_MEMTYPE_FLAG_FIXED) && (ttm != NULL)) {
@@ -501,7 +497,6 @@ int ttm_bo_move_accel_cleanup(struct ttm_buffer_object *bo,
struct ttm_mem_reg * old_mem = &bo->mem;
int ret;
uint32_t save_flags = old_mem->flags;
- uint32_t save_proposed_flags = old_mem->proposed_flags;
struct ttm_buffer_object *ghost_obj;
if (bo->sync_obj)
driver->sync_obj_unref(&bo->sync_obj);
@@ -546,7 +541,6 @@ int ttm_bo_move_accel_cleanup(struct ttm_buffer_object *bo,
*old_mem = *new_mem;
new_mem->mm_node = NULL;
- old_mem->proposed_flags = save_proposed_flags;
ttm_flag_masked(&save_flags, new_mem->flags, TTM_PL_MASK_MEMTYPE);
return 0;
}
diff --git a/linux-core/ttm/ttm_placement_user.c b/linux-core/ttm/ttm_placement_user.c
index 60b32d1f..e162b9c7 100644
--- a/linux-core/ttm/ttm_placement_user.c
+++ b/linux-core/ttm/ttm_placement_user.c
@@ -405,7 +405,7 @@ int ttm_pl_setstatus_ioctl(struct ttm_object_file *tfile,
bo->proposed_flags = (bo->proposed_flags | req->set_placement)
& ~req->clr_placement;
- ret = ttm_buffer_object_validate(bo, true, false);
+ ret = ttm_buffer_object_validate(bo, bo->proposed_flags, true, false);
if (unlikely(ret != 0))
goto out_err2;