Commit 3a4ab168 authored by Dave Airlie's avatar Dave Airlie

drm/ttm: split bound/populated flags.

Move bound up into the bo object, and keep populated with the tt
object.

The ghost object handling needs to follow the flags at the bo
level now instead of it being part of the ttm tt object.
Reviewed-by: default avatarChristian König <christian.koenig@amd.com>
Signed-off-by: default avatarDave Airlie <airlied@redhat.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20200915024007.67163-7-airlied@gmail.com
parent 9e9a153b
...@@ -572,10 +572,13 @@ int ttm_bo_move_accel_cleanup(struct ttm_buffer_object *bo, ...@@ -572,10 +572,13 @@ int ttm_bo_move_accel_cleanup(struct ttm_buffer_object *bo,
* bo to be unbound and destroyed. * bo to be unbound and destroyed.
*/ */
if (man->use_tt) if (man->use_tt) {
ghost_obj->ttm = NULL; ghost_obj->ttm = NULL;
else ttm_bo_tt_set_unbound(ghost_obj);
} else {
bo->ttm = NULL; bo->ttm = NULL;
ttm_bo_tt_set_unbound(bo);
}
dma_resv_unlock(&ghost_obj->base._resv); dma_resv_unlock(&ghost_obj->base._resv);
ttm_bo_put(ghost_obj); ttm_bo_put(ghost_obj);
...@@ -628,10 +631,13 @@ int ttm_bo_pipeline_move(struct ttm_buffer_object *bo, ...@@ -628,10 +631,13 @@ int ttm_bo_pipeline_move(struct ttm_buffer_object *bo,
* bo to be unbound and destroyed. * bo to be unbound and destroyed.
*/ */
if (to->use_tt) if (to->use_tt) {
ghost_obj->ttm = NULL; ghost_obj->ttm = NULL;
else ttm_bo_tt_set_unbound(ghost_obj);
} else {
bo->ttm = NULL; bo->ttm = NULL;
ttm_bo_tt_set_unbound(bo);
}
dma_resv_unlock(&ghost_obj->base._resv); dma_resv_unlock(&ghost_obj->base._resv);
ttm_bo_put(ghost_obj); ttm_bo_put(ghost_obj);
...@@ -695,6 +701,7 @@ int ttm_bo_pipeline_gutting(struct ttm_buffer_object *bo) ...@@ -695,6 +701,7 @@ int ttm_bo_pipeline_gutting(struct ttm_buffer_object *bo)
memset(&bo->mem, 0, sizeof(bo->mem)); memset(&bo->mem, 0, sizeof(bo->mem));
bo->mem.mem_type = TTM_PL_SYSTEM; bo->mem.mem_type = TTM_PL_SYSTEM;
bo->ttm = NULL; bo->ttm = NULL;
ttm_bo_tt_set_unbound(bo);
dma_resv_unlock(&ghost->base._resv); dma_resv_unlock(&ghost->base._resv);
ttm_bo_put(ghost); ttm_bo_put(ghost);
......
...@@ -141,6 +141,7 @@ struct ttm_buffer_object { ...@@ -141,6 +141,7 @@ struct ttm_buffer_object {
struct ttm_resource mem; struct ttm_resource mem;
struct file *persistent_swap_storage; struct file *persistent_swap_storage;
struct ttm_tt *ttm; struct ttm_tt *ttm;
bool ttm_bound;
bool evicted; bool evicted;
bool deleted; bool deleted;
......
...@@ -700,17 +700,17 @@ void ttm_bo_tt_unbind(struct ttm_buffer_object *bo); ...@@ -700,17 +700,17 @@ void ttm_bo_tt_unbind(struct ttm_buffer_object *bo);
static inline bool ttm_bo_tt_is_bound(struct ttm_buffer_object *bo) static inline bool ttm_bo_tt_is_bound(struct ttm_buffer_object *bo)
{ {
return bo->ttm->_state == tt_bound; return bo->ttm_bound;
} }
static inline void ttm_bo_tt_set_unbound(struct ttm_buffer_object *bo) static inline void ttm_bo_tt_set_unbound(struct ttm_buffer_object *bo)
{ {
bo->ttm->_state = tt_unbound; bo->ttm_bound = false;
} }
static inline void ttm_bo_tt_set_bound(struct ttm_buffer_object *bo) static inline void ttm_bo_tt_set_bound(struct ttm_buffer_object *bo)
{ {
bo->ttm->_state = tt_bound; bo->ttm_bound = true;
} }
/** /**
* ttm_bo_tt_destroy. * ttm_bo_tt_destroy.
......
...@@ -70,26 +70,22 @@ struct ttm_tt { ...@@ -70,26 +70,22 @@ struct ttm_tt {
struct sg_table *sg; /* for SG objects via dma-buf */ struct sg_table *sg; /* for SG objects via dma-buf */
struct file *swap_storage; struct file *swap_storage;
enum ttm_caching_state caching_state; enum ttm_caching_state caching_state;
enum { bool populated;
tt_bound,
tt_unbound,
tt_unpopulated,
} _state;
}; };
static inline bool ttm_tt_is_populated(struct ttm_tt *tt) static inline bool ttm_tt_is_populated(struct ttm_tt *tt)
{ {
return tt->_state != tt_unpopulated; return tt->populated;
} }
static inline void ttm_tt_set_unpopulated(struct ttm_tt *tt) static inline void ttm_tt_set_unpopulated(struct ttm_tt *tt)
{ {
tt->_state = tt_unpopulated; tt->populated = false;
} }
static inline void ttm_tt_set_populated(struct ttm_tt *tt) static inline void ttm_tt_set_populated(struct ttm_tt *tt)
{ {
tt->_state = tt_unbound; tt->populated = true;
} }
/** /**
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment