If they are not radeon object don't do anythings special for them,
this avoid rare oops than can happen in a complex use case.

Signed-off-by: Jerome Glisse <jgli...@redhat.com>
---
 drivers/gpu/drm/radeon/radeon.h        |    1 +
 drivers/gpu/drm/radeon/radeon_object.c |    9 +++++++++
 drivers/gpu/drm/radeon/radeon_ttm.c    |   11 +++++++++++
 3 files changed, 21 insertions(+), 0 deletions(-)

diff --git a/drivers/gpu/drm/radeon/radeon.h b/drivers/gpu/drm/radeon/radeon.h
index d4c786f..854294c 100644
--- a/drivers/gpu/drm/radeon/radeon.h
+++ b/drivers/gpu/drm/radeon/radeon.h
@@ -1038,6 +1038,7 @@ extern void radeon_atom_set_clock_gating(struct 
radeon_device *rdev, int enable)
 extern void radeon_ttm_placement_from_domain(struct radeon_bo *rbo, u32 
domain);
 extern void radeon_mc_init_vram_location(struct radeon_device *rdev, u64 base);
 extern void radeon_mc_init_gtt_location(struct radeon_device *rdev);
+extern bool radeon_ttm_bo_is_radeon_bo(struct ttm_buffer_object *bo);
 
 /* r100,rv100,rs100,rv200,rs200,r200,rv250,rs300,rv280 */
 struct r100_mc_save {
diff --git a/drivers/gpu/drm/radeon/radeon_object.c 
b/drivers/gpu/drm/radeon/radeon_object.c
index 132130f..115222e 100644
--- a/drivers/gpu/drm/radeon/radeon_object.c
+++ b/drivers/gpu/drm/radeon/radeon_object.c
@@ -56,6 +56,13 @@ static void radeon_ttm_bo_destroy(struct ttm_buffer_object 
*tbo)
        kfree(bo);
 }
 
+bool radeon_ttm_bo_is_radeon_bo(struct ttm_buffer_object *bo)
+{
+       if (bo->destroy == &radeon_ttm_bo_destroy)
+               return true;
+       return false;
+}
+
 void radeon_ttm_placement_from_domain(struct radeon_bo *rbo, u32 domain)
 {
        u32 c = 0;
@@ -486,6 +493,8 @@ void radeon_bo_move_notify(struct ttm_buffer_object *bo,
                                struct ttm_mem_reg *mem)
 {
        struct radeon_bo *rbo = container_of(bo, struct radeon_bo, tbo);
+       if (!radeon_ttm_bo_is_radeon_bo(bo))
+               return;
        radeon_bo_check_tiling(rbo, 0, 1);
 }
 
diff --git a/drivers/gpu/drm/radeon/radeon_ttm.c 
b/drivers/gpu/drm/radeon/radeon_ttm.c
index 74a6a9f..c288e86 100644
--- a/drivers/gpu/drm/radeon/radeon_ttm.c
+++ b/drivers/gpu/drm/radeon/radeon_ttm.c
@@ -201,6 +201,17 @@ static void radeon_evict_flags(struct ttm_buffer_object 
*bo,
                                struct ttm_placement *placement)
 {
        struct radeon_bo *rbo = container_of(bo, struct radeon_bo, tbo);
+       static u32 placements = TTM_PL_MASK_CACHING | TTM_PL_FLAG_SYSTEM;
+
+       if (!radeon_ttm_bo_is_radeon_bo(bo)) {
+               placement->fpfn = 0;
+               placement->lpfn = 0;
+               placement->placement = &placements;
+               placement->busy_placement = &placements;
+               placement->num_placement = 1;
+               placement->num_busy_placement = 1;
+               return;
+       }
        switch (bo->mem.mem_type) {
        case TTM_PL_VRAM:
                radeon_ttm_placement_from_domain(rbo, RADEON_GEM_DOMAIN_GTT);
-- 
1.6.5.2


------------------------------------------------------------------------------
Return on Information:
Google Enterprise Search pays you back
Get the facts.
http://p.sf.net/sfu/google-dev2dev
--
_______________________________________________
Dri-devel mailing list
Dri-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/dri-devel

Reply via email to