Hi Alex,

Did you seen any issue caused by this?

Regards,
Evan
-----Original Message-----
From: amd-gfx <amd-gfx-boun...@lists.freedesktop.org> On Behalf Of Alex Deucher
Sent: Tuesday, February 18, 2020 5:38 AM
To: amd-gfx@lists.freedesktop.org
Cc: Deucher, Alexander <alexander.deuc...@amd.com>
Subject: [PATCH] drm/amdgpu/smu: add an update table lock

The driver uses a staging buffer to update tables in the SMU.
Add a lock to make sure we don't try and do this concurrently
by accident.

Signed-off-by: Alex Deucher <alexander.deuc...@amd.com>
---
 drivers/gpu/drm/amd/powerplay/amdgpu_smu.c     | 7 ++++++-
 drivers/gpu/drm/amd/powerplay/inc/amdgpu_smu.h | 1 +
 2 files changed, 7 insertions(+), 1 deletion(-)

diff --git a/drivers/gpu/drm/amd/powerplay/amdgpu_smu.c 
b/drivers/gpu/drm/amd/powerplay/amdgpu_smu.c
index 9f2428fd98f6..437a3e7b36b4 100644
--- a/drivers/gpu/drm/amd/powerplay/amdgpu_smu.c
+++ b/drivers/gpu/drm/amd/powerplay/amdgpu_smu.c
@@ -530,6 +530,7 @@ int smu_update_table(struct smu_context *smu, enum 
smu_table_id table_index, int
 
        table_size = smu_table->tables[table_index].size;
 
+       mutex_lock(&smu->update_table_lock);
        if (drv2smu) {
                memcpy(table->cpu_addr, table_data, table_size);
                /*
@@ -544,13 +545,16 @@ int smu_update_table(struct smu_context *smu, enum 
smu_table_id table_index, int
                                          SMU_MSG_TransferTableSmu2Dram,
                                          table_id | ((argument & 0xFFFF) << 
16));
        if (ret)
-               return ret;
+               goto unlock;
 
        if (!drv2smu) {
                amdgpu_asic_flush_hdp(adev, NULL);
                memcpy(table_data, table->cpu_addr, table_size);
        }
 
+unlock:
+       mutex_unlock(&smu->update_table_lock);
+
        return ret;
 }
 
@@ -900,6 +904,7 @@ static int smu_sw_init(void *handle)
 
        mutex_init(&smu->sensor_lock);
        mutex_init(&smu->metrics_lock);
+       mutex_init(&smu->update_table_lock);
 
        smu->watermarks_bitmap = 0;
        smu->power_profile_mode = PP_SMC_POWER_PROFILE_BOOTUP_DEFAULT;
diff --git a/drivers/gpu/drm/amd/powerplay/inc/amdgpu_smu.h 
b/drivers/gpu/drm/amd/powerplay/inc/amdgpu_smu.h
index 97b6714e83e6..506288072e8e 100644
--- a/drivers/gpu/drm/amd/powerplay/inc/amdgpu_smu.h
+++ b/drivers/gpu/drm/amd/powerplay/inc/amdgpu_smu.h
@@ -362,6 +362,7 @@ struct smu_context
        struct mutex                    mutex;
        struct mutex                    sensor_lock;
        struct mutex                    metrics_lock;
+       struct mutex                    update_table_lock;
        uint64_t pool_size;
 
        struct smu_table_context        smu_table;
-- 
2.24.1

_______________________________________________
amd-gfx mailing list
amd-gfx@lists.freedesktop.org
https://nam11.safelinks.protection.outlook.com/?url=https%3A%2F%2Flists.freedesktop.org%2Fmailman%2Flistinfo%2Famd-gfx&amp;data=02%7C01%7Cevan.quan%40amd.com%7Cbdb09232f91649c08af408d7b3f1ab89%7C3dd8961fe4884e608e11a82d994e183d%7C0%7C0%7C637175722941118202&amp;sdata=2%2FNzcPGthFtelyfXNiiIL3BV3c%2Bvoy%2F2Cq1oFWuZ4%2Bc%3D&amp;reserved=0
_______________________________________________
amd-gfx mailing list
amd-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/amd-gfx

Reply via email to