[AMD Official Use Only - General] drm/amdgpu: try allowed domain when pin framebuffer failed. [WHY&HOW] in some scenarios, the allocate memory often failed. such as do hot plug or play games. so we can try allowed domain, if the preferred domain cannot allocate memory. Signed-off-by: jie1zhan
jesse.zhang@xxxxxxx Change-Id: I4b62e2ff072d02c515f901000a5789339d481273 diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_object.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_object.c index 1ae0c8723348..05fcaf7f9d92 100644 --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_object.c +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_object.c @@ -39,6 +39,7 @@ #include "amdgpu.h" #include "amdgpu_trace.h" #include "amdgpu_amdkfd.h" +#include "amdgpu_display.h" /** * DOC: amdgpu_object @@ -942,8 +943,14 @@ int amdgpu_bo_pin_restricted(struct amdgpu_bo *bo, u32 domain, bo->placements[i].lpfn = lpfn; } + retry: r = ttm_bo_validate(&bo->tbo, &bo->placement, &ctx); if (unlikely(r)) { + //try allowed domain when pin failed. just a workaround. + if (unlikely(r == -ENOMEM) && domain != bo->allowed_domains) { + amdgpu_bo_placement_from_domain(bo, bo->allowed_domains); + goto retry; + } dev_err(adev->dev, "%p pin failed\n", bo); goto error; } |