| From ed57392a82a472df4d496a4ddfc389647ab430e5 Mon Sep 17 00:00:00 2001 |
| From: Sasha Levin <sashal@kernel.org> |
| Date: Tue, 14 Dec 2021 11:50:39 +0800 |
| Subject: drm/amd/amdgpu: fix gmc bo pin count leak in SRIOV |
| |
| From: Jingwen Chen <Jingwen.Chen2@amd.com> |
| |
| [ Upstream commit 948e7ce01413b71395723aaf846015062aea3a43 ] |
| |
| [Why] |
| gmc bo will be pinned during loading amdgpu and reset in SRIOV while |
| only unpinned in unload amdgpu |
| |
| [How] |
| add amdgpu_in_reset and sriov judgement to skip pin bo |
| |
| v2: fix wrong judgement |
| |
| Signed-off-by: Jingwen Chen <Jingwen.Chen2@amd.com> |
| Reviewed-by: Horace Chen <horace.chen@amd.com> |
| Signed-off-by: Alex Deucher <alexander.deucher@amd.com> |
| Signed-off-by: Sasha Levin <sashal@kernel.org> |
| --- |
| drivers/gpu/drm/amd/amdgpu/gmc_v10_0.c | 4 ++++ |
| drivers/gpu/drm/amd/amdgpu/gmc_v9_0.c | 4 ++++ |
| 2 files changed, 8 insertions(+) |
| |
| diff --git a/drivers/gpu/drm/amd/amdgpu/gmc_v10_0.c b/drivers/gpu/drm/amd/amdgpu/gmc_v10_0.c |
| index e47104a1f5596..3c01be6610144 100644 |
| --- a/drivers/gpu/drm/amd/amdgpu/gmc_v10_0.c |
| +++ b/drivers/gpu/drm/amd/amdgpu/gmc_v10_0.c |
| @@ -1021,10 +1021,14 @@ static int gmc_v10_0_gart_enable(struct amdgpu_device *adev) |
| return -EINVAL; |
| } |
| |
| + if (amdgpu_sriov_vf(adev) && amdgpu_in_reset(adev)) |
| + goto skip_pin_bo; |
| + |
| r = amdgpu_gart_table_vram_pin(adev); |
| if (r) |
| return r; |
| |
| +skip_pin_bo: |
| r = adev->gfxhub.funcs->gart_enable(adev); |
| if (r) |
| return r; |
| diff --git a/drivers/gpu/drm/amd/amdgpu/gmc_v9_0.c b/drivers/gpu/drm/amd/amdgpu/gmc_v9_0.c |
| index 5551359d5dfdc..b5d93247237b1 100644 |
| --- a/drivers/gpu/drm/amd/amdgpu/gmc_v9_0.c |
| +++ b/drivers/gpu/drm/amd/amdgpu/gmc_v9_0.c |
| @@ -1708,10 +1708,14 @@ static int gmc_v9_0_gart_enable(struct amdgpu_device *adev) |
| return -EINVAL; |
| } |
| |
| + if (amdgpu_sriov_vf(adev) && amdgpu_in_reset(adev)) |
| + goto skip_pin_bo; |
| + |
| r = amdgpu_gart_table_vram_pin(adev); |
| if (r) |
| return r; |
| |
| +skip_pin_bo: |
| r = adev->gfxhub.funcs->gart_enable(adev); |
| if (r) |
| return r; |
| -- |
| 2.34.1 |
| |