Fix race condition failure during UMC UE injection.

Signed-off-by: Candice Li <candice...@amd.com>
---
 drivers/gpu/drm/amd/amdgpu/amdgpu_ras.c | 9 +++++++--
 1 file changed, 7 insertions(+), 2 deletions(-)

diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_ras.c 
b/drivers/gpu/drm/amd/amdgpu/amdgpu_ras.c
index 08133de21fdd63..711b5fb26d47d4 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_ras.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_ras.c
@@ -1931,10 +1931,12 @@ int amdgpu_ras_save_bad_pages(struct amdgpu_device 
*adev)
        struct ras_err_handler_data *data;
        struct amdgpu_ras_eeprom_control *control;
        int save_count;
+       int ret = 0;
 
        if (!con || !con->eh_data)
                return 0;
 
+       mutex_lock(&con->recovery_lock);
        control = &con->eeprom_control;
        data = con->eh_data;
        save_count = data->count - control->ras_num_recs;
@@ -1944,13 +1946,16 @@ int amdgpu_ras_save_bad_pages(struct amdgpu_device 
*adev)
                                             &data->bps[control->ras_num_recs],
                                             save_count)) {
                        dev_err(adev->dev, "Failed to save EEPROM table data!");
-                       return -EIO;
+                       ret = -EIO;
+                       goto out;
                }
 
                dev_info(adev->dev, "Saved %d pages to EEPROM table.\n", 
save_count);
        }
 
-       return 0;
+out:
+       mutex_unlock(&con->recovery_lock);
+       return ret;
 }
 
 /*
-- 
2.17.1

Reply via email to