summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJingwen Chen <Jingwen.Chen2@amd.com>2021-01-19 16:54:50 +0800
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>2021-03-07 12:34:12 +0100
commit4b73f01d5ebde3409df1206727fb2fd20fefe7cf (patch)
treea53485f820de7e80141be1f2df6ea6e0485d2712
parenta986f9345467b8d39f0aff39d80207e4e91aae0c (diff)
downloadlinux-4b73f01d5ebde3409df1206727fb2fd20fefe7cf.tar.gz
linux-4b73f01d5ebde3409df1206727fb2fd20fefe7cf.tar.bz2
linux-4b73f01d5ebde3409df1206727fb2fd20fefe7cf.zip
drm/amd/amdgpu: add error handling to amdgpu_virt_read_pf2vf_data
[ Upstream commit 64dcf2f01d59cf9fad19b1a387bd39736a8f4d69 ] [Why] when vram lost happened in guest, try to write vram can lead to kernel stuck. [How] When the readback data is invalid, don't do write work, directly reschedule a new work. Signed-off-by: Jingwen Chen <Jingwen.Chen2@amd.com> Reviewed-by: Monk Liu<monk.liu@amd.com> Signed-off-by: Alex Deucher <alexander.deucher@amd.com> Signed-off-by: Sasha Levin <sashal@kernel.org>
-rw-r--r--drivers/gpu/drm/amd/amdgpu/amdgpu_virt.c6
1 files changed, 5 insertions, 1 deletions
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_virt.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_virt.c
index d0aea5e39531..e7678ba8fdcf 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_virt.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_virt.c
@@ -558,10 +558,14 @@ static int amdgpu_virt_write_vf2pf_data(struct amdgpu_device *adev)
void amdgpu_virt_update_vf2pf_work_item(struct work_struct *work)
{
struct amdgpu_device *adev = container_of(work, struct amdgpu_device, virt.vf2pf_work.work);
+ int ret;
- amdgpu_virt_read_pf2vf_data(adev);
+ ret = amdgpu_virt_read_pf2vf_data(adev);
+ if (ret)
+ goto out;
amdgpu_virt_write_vf2pf_data(adev);
+out:
schedule_delayed_work(&(adev->virt.vf2pf_work), adev->virt.vf2pf_update_interval_ms);
}