diff options
author | Michel Dänzer <michel.daenzer@amd.com> | 2017-01-25 03:21:31 -0500 |
---|---|---|
committer | Christian König <christian.koenig@amd.com> | 2017-01-27 04:07:52 -0500 |
commit | 239ac65fa5ffab71adf66e642750f940e7241d99 (patch) | |
tree | a81a90a3102d6f3bac0880086502ddc2b93dd990 | |
parent | ba0c6d0087510b5db4d4b4f96f202bc893844c55 (diff) |
drm/ttm: Make sure BOs being swapped out are cacheable
The current caching state may not be tt_cached, even though the
placement contains TTM_PL_FLAG_CACHED, because placement can contain
multiple caching flags. Trying to swap out such a BO would trip up the
BUG_ON(ttm->caching_state != tt_cached);
in ttm_tt_swapout.
Cc: stable@vger.kernel.org
Signed-off-by: Michel Dänzer <michel.daenzer@amd.com>
Reviewed-by: Thomas Hellstrom <thellstrom@vmware.com>
Reviewed-by: Christian König <christian.koenig@amd.com>.
Reviewed-by: Sinclair Yeh <syeh@vmware.com>
Signed-off-by: Christian König <christian.koenig@amd.com>
-rw-r--r-- | drivers/gpu/drm/ttm/ttm_bo.c | 4 |
1 files changed, 2 insertions, 2 deletions
diff --git a/drivers/gpu/drm/ttm/ttm_bo.c b/drivers/gpu/drm/ttm/ttm_bo.c index d5063618efa7..86e3b233b722 100644 --- a/drivers/gpu/drm/ttm/ttm_bo.c +++ b/drivers/gpu/drm/ttm/ttm_bo.c | |||
@@ -1670,7 +1670,6 @@ static int ttm_bo_swapout(struct ttm_mem_shrink *shrink) | |||
1670 | struct ttm_buffer_object *bo; | 1670 | struct ttm_buffer_object *bo; |
1671 | int ret = -EBUSY; | 1671 | int ret = -EBUSY; |
1672 | int put_count; | 1672 | int put_count; |
1673 | uint32_t swap_placement = (TTM_PL_FLAG_CACHED | TTM_PL_FLAG_SYSTEM); | ||
1674 | 1673 | ||
1675 | spin_lock(&glob->lru_lock); | 1674 | spin_lock(&glob->lru_lock); |
1676 | list_for_each_entry(bo, &glob->swap_lru, swap) { | 1675 | list_for_each_entry(bo, &glob->swap_lru, swap) { |
@@ -1701,7 +1700,8 @@ static int ttm_bo_swapout(struct ttm_mem_shrink *shrink) | |||
1701 | * Move to system cached | 1700 | * Move to system cached |
1702 | */ | 1701 | */ |
1703 | 1702 | ||
1704 | if ((bo->mem.placement & swap_placement) != swap_placement) { | 1703 | if (bo->mem.mem_type != TTM_PL_SYSTEM || |
1704 | bo->ttm->caching_state != tt_cached) { | ||
1705 | struct ttm_mem_reg evict_mem; | 1705 | struct ttm_mem_reg evict_mem; |
1706 | 1706 | ||
1707 | evict_mem = bo->mem; | 1707 | evict_mem = bo->mem; |