bitmap_zero(smu->smu_feature.allowed, SMU_FEATURE_MAX);
 
        mutex_init(&smu->sensor_lock);
-       mutex_init(&smu->metrics_lock);
        mutex_init(&smu->message_lock);
 
        INIT_WORK(&smu->throttling_logging_work, smu_throttling_logging_work_fn);
 
        const struct cmn2asic_mapping   *pwr_src_map;
        const struct cmn2asic_mapping   *workload_map;
        struct mutex                    sensor_lock;
-       struct mutex                    metrics_lock;
        struct mutex                    message_lock;
        uint64_t pool_size;
 
 
        SmuMetrics_t *metrics = (SmuMetrics_t *)smu_table->metrics_table;
        int ret = 0;
 
-       mutex_lock(&smu->metrics_lock);
-
-       ret = smu_cmn_get_metrics_table_locked(smu,
-                                              NULL,
-                                              false);
-       if (ret) {
-               mutex_unlock(&smu->metrics_lock);
+       ret = smu_cmn_get_metrics_table(smu,
+                                       NULL,
+                                       false);
+       if (ret)
                return ret;
-       }
 
        switch (member) {
        case METRICS_CURR_GFXCLK:
                break;
        }
 
-       mutex_unlock(&smu->metrics_lock);
-
        return ret;
 }
 
 
        SmuMetrics_t *metrics = (SmuMetrics_t *)smu_table->metrics_table;
        int ret = 0;
 
-       mutex_lock(&smu->metrics_lock);
-
-       ret = smu_cmn_get_metrics_table_locked(smu, NULL, false);
-       if (ret) {
-               mutex_unlock(&smu->metrics_lock);
+       ret = smu_cmn_get_metrics_table(smu, NULL, false);
+       if (ret)
                return ret;
-       }
 
        switch (member) {
        case METRICS_CURR_GFXCLK:
                break;
        }
 
-       mutex_unlock(&smu->metrics_lock);
-
        return ret;
 }
 
 
                (SmuMetrics_legacy_t *)smu_table->metrics_table;
        int ret = 0;
 
-       mutex_lock(&smu->metrics_lock);
-
-       ret = smu_cmn_get_metrics_table_locked(smu,
-                                              NULL,
-                                              false);
-       if (ret) {
-               mutex_unlock(&smu->metrics_lock);
+       ret = smu_cmn_get_metrics_table(smu,
+                                       NULL,
+                                       false);
+       if (ret)
                return ret;
-       }
 
        switch (member) {
        case METRICS_CURR_GFXCLK:
                break;
        }
 
-       mutex_unlock(&smu->metrics_lock);
-
        return ret;
 }
 
                (SmuMetrics_t *)smu_table->metrics_table;
        int ret = 0;
 
-       mutex_lock(&smu->metrics_lock);
-
-       ret = smu_cmn_get_metrics_table_locked(smu,
-                                              NULL,
-                                              false);
-       if (ret) {
-               mutex_unlock(&smu->metrics_lock);
+       ret = smu_cmn_get_metrics_table(smu,
+                                       NULL,
+                                       false);
+       if (ret)
                return ret;
-       }
 
        switch (member) {
        case METRICS_CURR_GFXCLK:
                break;
        }
 
-       mutex_unlock(&smu->metrics_lock);
-
        return ret;
 }
 
                (SmuMetrics_NV12_legacy_t *)smu_table->metrics_table;
        int ret = 0;
 
-       mutex_lock(&smu->metrics_lock);
-
-       ret = smu_cmn_get_metrics_table_locked(smu,
-                                              NULL,
-                                              false);
-       if (ret) {
-               mutex_unlock(&smu->metrics_lock);
+       ret = smu_cmn_get_metrics_table(smu,
+                                       NULL,
+                                       false);
+       if (ret)
                return ret;
-       }
 
        switch (member) {
        case METRICS_CURR_GFXCLK:
                break;
        }
 
-       mutex_unlock(&smu->metrics_lock);
-
        return ret;
 }
 
                (SmuMetrics_NV12_t *)smu_table->metrics_table;
        int ret = 0;
 
-       mutex_lock(&smu->metrics_lock);
-
-       ret = smu_cmn_get_metrics_table_locked(smu,
-                                              NULL,
-                                              false);
-       if (ret) {
-               mutex_unlock(&smu->metrics_lock);
+       ret = smu_cmn_get_metrics_table(smu,
+                                       NULL,
+                                       false);
+       if (ret)
                return ret;
-       }
 
        switch (member) {
        case METRICS_CURR_GFXCLK:
                break;
        }
 
-       mutex_unlock(&smu->metrics_lock);
-
        return ret;
 }
 
        SmuMetrics_legacy_t metrics;
        int ret = 0;
 
-       mutex_lock(&smu->metrics_lock);
-
-       ret = smu_cmn_get_metrics_table_locked(smu,
-                                              NULL,
-                                              true);
-       if (ret) {
-               mutex_unlock(&smu->metrics_lock);
+       ret = smu_cmn_get_metrics_table(smu,
+                                       NULL,
+                                       true);
+       if (ret)
                return ret;
-       }
 
        memcpy(&metrics, smu_table->metrics_table, sizeof(SmuMetrics_legacy_t));
 
-       mutex_unlock(&smu->metrics_lock);
-
        smu_cmn_init_soft_gpu_metrics(gpu_metrics, 1, 3);
 
        gpu_metrics->temperature_edge = metrics.TemperatureEdge;
        SmuMetrics_t metrics;
        int ret = 0;
 
-       mutex_lock(&smu->metrics_lock);
-
-       ret = smu_cmn_get_metrics_table_locked(smu,
-                                              NULL,
-                                              true);
-       if (ret) {
-               mutex_unlock(&smu->metrics_lock);
+       ret = smu_cmn_get_metrics_table(smu,
+                                       NULL,
+                                       true);
+       if (ret)
                return ret;
-       }
 
        memcpy(&metrics, smu_table->metrics_table, sizeof(SmuMetrics_t));
 
-       mutex_unlock(&smu->metrics_lock);
-
        smu_cmn_init_soft_gpu_metrics(gpu_metrics, 1, 3);
 
        gpu_metrics->temperature_edge = metrics.TemperatureEdge;
        SmuMetrics_NV12_legacy_t metrics;
        int ret = 0;
 
-       mutex_lock(&smu->metrics_lock);
-
-       ret = smu_cmn_get_metrics_table_locked(smu,
-                                              NULL,
-                                              true);
-       if (ret) {
-               mutex_unlock(&smu->metrics_lock);
+       ret = smu_cmn_get_metrics_table(smu,
+                                       NULL,
+                                       true);
+       if (ret)
                return ret;
-       }
 
        memcpy(&metrics, smu_table->metrics_table, sizeof(SmuMetrics_NV12_legacy_t));
 
-       mutex_unlock(&smu->metrics_lock);
-
        smu_cmn_init_soft_gpu_metrics(gpu_metrics, 1, 3);
 
        gpu_metrics->temperature_edge = metrics.TemperatureEdge;
        SmuMetrics_NV12_t metrics;
        int ret = 0;
 
-       mutex_lock(&smu->metrics_lock);
-
-       ret = smu_cmn_get_metrics_table_locked(smu,
-                                              NULL,
-                                              true);
-       if (ret) {
-               mutex_unlock(&smu->metrics_lock);
+       ret = smu_cmn_get_metrics_table(smu,
+                                       NULL,
+                                       true);
+       if (ret)
                return ret;
-       }
 
        memcpy(&metrics, smu_table->metrics_table, sizeof(SmuMetrics_NV12_t));
 
-       mutex_unlock(&smu->metrics_lock);
-
        smu_cmn_init_soft_gpu_metrics(gpu_metrics, 1, 3);
 
        gpu_metrics->temperature_edge = metrics.TemperatureEdge;
 
        uint16_t average_gfx_activity;
        int ret = 0;
 
-       mutex_lock(&smu->metrics_lock);
-
-       ret = smu_cmn_get_metrics_table_locked(smu,
-                                              NULL,
-                                              false);
-       if (ret) {
-               mutex_unlock(&smu->metrics_lock);
+       ret = smu_cmn_get_metrics_table(smu,
+                                       NULL,
+                                       false);
+       if (ret)
                return ret;
-       }
 
        switch (member) {
        case METRICS_CURR_GFXCLK:
                break;
        }
 
-       mutex_unlock(&smu->metrics_lock);
-
        return ret;
 
 }
        uint16_t average_gfx_activity;
        int ret = 0;
 
-       mutex_lock(&smu->metrics_lock);
-       ret = smu_cmn_get_metrics_table_locked(smu,
-                                              &metrics_external,
-                                              true);
-       if (ret) {
-               mutex_unlock(&smu->metrics_lock);
+       ret = smu_cmn_get_metrics_table(smu,
+                                       &metrics_external,
+                                       true);
+       if (ret)
                return ret;
-       }
 
        smu_cmn_init_soft_gpu_metrics(gpu_metrics, 1, 3);
 
                                smu_v11_0_get_current_pcie_link_speed(smu);
        }
 
-       mutex_unlock(&smu->metrics_lock);
-
        gpu_metrics->system_clock_counter = ktime_get_boottime_ns();
 
        *table = (void *)gpu_metrics;
 
        SmuMetrics_legacy_t *metrics = (SmuMetrics_legacy_t *)smu_table->metrics_table;
        int ret = 0;
 
-       mutex_lock(&smu->metrics_lock);
-
-       ret = smu_cmn_get_metrics_table_locked(smu,
-                                              NULL,
-                                              false);
-       if (ret) {
-               mutex_unlock(&smu->metrics_lock);
+       ret = smu_cmn_get_metrics_table(smu,
+                                       NULL,
+                                       false);
+       if (ret)
                return ret;
-       }
 
        switch (member) {
        case METRICS_CURR_GFXCLK:
                break;
        }
 
-       mutex_unlock(&smu->metrics_lock);
-
        return ret;
 }
 
        SmuMetrics_t *metrics = (SmuMetrics_t *)smu_table->metrics_table;
        int ret = 0;
 
-       mutex_lock(&smu->metrics_lock);
-
-       ret = smu_cmn_get_metrics_table_locked(smu,
-                                              NULL,
-                                              false);
-       if (ret) {
-               mutex_unlock(&smu->metrics_lock);
+       ret = smu_cmn_get_metrics_table(smu,
+                                       NULL,
+                                       false);
+       if (ret)
                return ret;
-       }
 
        switch (member) {
        case METRICS_CURR_GFXCLK:
                break;
        }
 
-       mutex_unlock(&smu->metrics_lock);
-
        return ret;
 }
 
 
        SmuMetrics_t *metrics = (SmuMetrics_t *)smu_table->metrics_table;
        int ret = 0;
 
-       mutex_lock(&smu->metrics_lock);
-
-       ret = smu_cmn_get_metrics_table_locked(smu,
-                                              NULL,
-                                              false);
-       if (ret) {
-               mutex_unlock(&smu->metrics_lock);
+       ret = smu_cmn_get_metrics_table(smu,
+                                       NULL,
+                                       false);
+       if (ret)
                return ret;
-       }
 
        switch (member) {
        case METRICS_AVERAGE_GFXCLK:
                break;
        }
 
-       mutex_unlock(&smu->metrics_lock);
-
        return ret;
 }
 
 
        SmuMetrics_t *metrics = (SmuMetrics_t *)smu_table->metrics_table;
        int ret = 0;
 
-       mutex_lock(&smu->metrics_lock);
-
-       ret = smu_cmn_get_metrics_table_locked(smu,
-                                              NULL,
-                                              false);
-       if (ret) {
-               mutex_unlock(&smu->metrics_lock);
+       ret = smu_cmn_get_metrics_table(smu,
+                                       NULL,
+                                       false);
+       if (ret)
                return ret;
-       }
 
        switch (member) {
        case METRICS_CURR_GFXCLK:
                break;
        }
 
-       mutex_unlock(&smu->metrics_lock);
-
        return ret;
 }
 
        uint32_t upper32 = 0, lower32 = 0;
        int ret;
 
-       mutex_lock(&smu->metrics_lock);
-       ret = smu_cmn_get_metrics_table_locked(smu, NULL, false);
+       ret = smu_cmn_get_metrics_table(smu, NULL, false);
        if (ret)
-               goto out_unlock;
+               goto out;
 
        upper32 = metrics->PublicSerialNumUpper32;
        lower32 = metrics->PublicSerialNumLower32;
 
-out_unlock:
-       mutex_unlock(&smu->metrics_lock);
-
+out:
        adev->unique_id = ((uint64_t)upper32 << 32) | lower32;
        if (adev->serial[0] == '\0')
                sprintf(adev->serial, "%016llx", adev->unique_id);
 
        SmuMetrics_t *metrics = (SmuMetrics_t *)smu_table->metrics_table;
        int ret = 0;
 
-       mutex_lock(&smu->metrics_lock);
-
-       ret = smu_cmn_get_metrics_table_locked(smu, NULL, false);
-       if (ret) {
-               mutex_unlock(&smu->metrics_lock);
+       ret = smu_cmn_get_metrics_table(smu, NULL, false);
+       if (ret)
                return ret;
-       }
 
        switch (member) {
        case METRICS_AVERAGE_GFXCLK:
                break;
        }
 
-       mutex_unlock(&smu->metrics_lock);
-
        return ret;
 }
 
 
                                    true);
 }
 
-int smu_cmn_get_metrics_table_locked(struct smu_context *smu,
-                                    void *metrics_table,
-                                    bool bypass_cache)
+int smu_cmn_get_metrics_table(struct smu_context *smu,
+                             void *metrics_table,
+                             bool bypass_cache)
 {
        struct smu_table_context *smu_table= &smu->smu_table;
        uint32_t table_size =
        return 0;
 }
 
-int smu_cmn_get_metrics_table(struct smu_context *smu,
-                             void *metrics_table,
-                             bool bypass_cache)
-{
-       int ret = 0;
-
-       mutex_lock(&smu->metrics_lock);
-       ret = smu_cmn_get_metrics_table_locked(smu,
-                                              metrics_table,
-                                              bypass_cache);
-       mutex_unlock(&smu->metrics_lock);
-
-       return ret;
-}
-
 void smu_cmn_init_soft_gpu_metrics(void *table, uint8_t frev, uint8_t crev)
 {
        struct metrics_table_header *header = (struct metrics_table_header *)table;
 
 
 int smu_cmn_write_pptable(struct smu_context *smu);
 
-int smu_cmn_get_metrics_table_locked(struct smu_context *smu,
-                                    void *metrics_table,
-                                    bool bypass_cache);
-
 int smu_cmn_get_metrics_table(struct smu_context *smu,
                              void *metrics_table,
                              bool bypass_cache);