• Chang, Bruce's avatar
    drm/xe: fix pvc unload issue · 1a545ed7
    Chang, Bruce authored
    Currently, unload pvc driver will generate a null dereference
    and the call stack is as below.
    
    [ 4850.618000] Call Trace:
    [ 4850.620740]  <TASK>
    [ 4850.623134]  ttm_bo_cleanup_memtype_use+0x3f/0x50 [ttm]
    [ 4850.628661]  ttm_bo_release+0x154/0x2c0 [ttm]
    [ 4850.633317]  ? drm_buddy_fini+0x62/0x80 [drm_buddy]
    [ 4850.638487]  ? __kmem_cache_free+0x27d/0x2c0
    [ 4850.643054]  ttm_bo_put+0x38/0x60 [ttm]
    [ 4850.647190]  xe_gem_object_free+0x1f/0x30 [xe]
    [ 4850.651945]  drm_gem_object_free+0x1e/0x30 [drm]
    [ 4850.656904]  ggtt_fini_noalloc+0x9d/0xe0 [xe]
    [ 4850.661574]  drm_managed_release+0xb5/0x150 [drm]
    [ 4850.666617]  drm_dev_release+0x30/0x50 [drm]
    [ 4850.671209]  devm_drm_dev_init_release+0x3c/0x60 [drm]
    
    There are a couple issues, but the main one is due to TTM has only
    one TTM_PL_TT region, but since pvc has 2 tiles and tries to setup
    1 TTM_PL_TT each tile. The second will overwrite the first one.
    
    During unload time, the first tile will reset the TTM_PL_TT manger
    and when the second tile is trying to free Bo and it will generate
    the null reference since the TTM manage is already got reset to 0.
    
    The fix is to use one global TTM_PL_TT manager.
    
    v2: make gtt mgr global and change the name to sys_mgr
    
    Cc: Stuart Summers <stuart.summers@intel.com>
    Cc: Matthew Brost <matthew.brost@intel.com>
    Cc: Vivi, Rodrigo <rodrigo.vivi@intel.com>
    Signed-off-by: default avatarBruce Chang <yu.bruce.chang@intel.com>
    Reviewed-by: default avatarMatthew Brost <matthew.brost@intel.com>
    Signed-off-by: default avatarRodrigo Vivi <rodrigo.vivi@intel.com>
    1a545ed7
xe_gt.c 16.2 KB