diff options
author | Thomas Hellstrom <thomas-at-shipmail-dot-org> | 2009-05-04 15:15:10 +0200 |
---|---|---|
committer | Thomas Hellstrom <thomas-at-shipmail-dot-org> | 2009-05-04 22:57:57 +0200 |
commit | f421b2b10fc49e0197ad5213e31a2a57230062af (patch) | |
tree | cceab745ce6d2a2f11683543f87f402805484503 | |
parent | 05abf16c2bbb41921f5ce4fc8ac548327cd5a2b7 (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.c | 8 | ||||
-rw-r--r-- | linux-core/openchrome/via_execbuf.c | 7 | ||||
-rw-r--r-- | linux-core/ttm/ttm_bo.c | 64 | ||||
-rw-r--r-- | linux-core/ttm/ttm_bo_api.h | 3 | ||||
-rw-r--r-- | linux-core/ttm/ttm_bo_driver.h | 5 | ||||
-rw-r--r-- | linux-core/ttm/ttm_bo_util.c | 6 | ||||
-rw-r--r-- | linux-core/ttm/ttm_placement_user.c | 2 |
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; |