diff options
author | Michel Dänzer <michel.daenzer@amd.com> | 2017-01-25 03:21:31 -0500 |
---|---|---|
committer | Greg Kroah-Hartman <gregkh@linuxfoundation.org> | 2017-03-14 22:02:49 -0400 |
commit | 55f47122c2e8d77a2bdb0f4bd7da57423f947824 (patch) | |
tree | 43652f6ab6db979eeae29d97192c2ca1a210fabc /drivers/gpu/drm | |
parent | ec8e40b117c3064cb826a4f25d77e45a7f87d602 (diff) |
drm/ttm: Make sure BOs being swapped out are cacheable
commit 239ac65fa5ffab71adf66e642750f940e7241d99 upstream.
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.
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>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Diffstat (limited to 'drivers/gpu/drm')
-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 fc6217dfe401..35cc16f9fec9 100644 --- a/drivers/gpu/drm/ttm/ttm_bo.c +++ b/drivers/gpu/drm/ttm/ttm_bo.c | |||
@@ -1654,7 +1654,6 @@ static int ttm_bo_swapout(struct ttm_mem_shrink *shrink) | |||
1654 | struct ttm_buffer_object *bo; | 1654 | struct ttm_buffer_object *bo; |
1655 | int ret = -EBUSY; | 1655 | int ret = -EBUSY; |
1656 | int put_count; | 1656 | int put_count; |
1657 | uint32_t swap_placement = (TTM_PL_FLAG_CACHED | TTM_PL_FLAG_SYSTEM); | ||
1658 | 1657 | ||
1659 | spin_lock(&glob->lru_lock); | 1658 | spin_lock(&glob->lru_lock); |
1660 | list_for_each_entry(bo, &glob->swap_lru, swap) { | 1659 | list_for_each_entry(bo, &glob->swap_lru, swap) { |
@@ -1685,7 +1684,8 @@ static int ttm_bo_swapout(struct ttm_mem_shrink *shrink) | |||
1685 | * Move to system cached | 1684 | * Move to system cached |
1686 | */ | 1685 | */ |
1687 | 1686 | ||
1688 | if ((bo->mem.placement & swap_placement) != swap_placement) { | 1687 | if (bo->mem.mem_type != TTM_PL_SYSTEM || |
1688 | bo->ttm->caching_state != tt_cached) { | ||
1689 | struct ttm_mem_reg evict_mem; | 1689 | struct ttm_mem_reg evict_mem; |
1690 | 1690 | ||
1691 | evict_mem = bo->mem; | 1691 | evict_mem = bo->mem; |