In smu_cmn_print_dpm_clk_levels() and smu_cmn_print_pcie_levels(),
use the sysfs_emit_at() return value, break out of per-level loops
when n == 0, and use a shared out label before updating offset.

Signed-off-by: Asad Kamal <[email protected]>
---
 drivers/gpu/drm/amd/pm/swsmu/smu_cmn.c | 77 +++++++++++++++-----------
 1 file changed, 44 insertions(+), 33 deletions(-)

diff --git a/drivers/gpu/drm/amd/pm/swsmu/smu_cmn.c 
b/drivers/gpu/drm/amd/pm/swsmu/smu_cmn.c
index 546e64e3ba9c..0a745afa8552 100644
--- a/drivers/gpu/drm/amd/pm/swsmu/smu_cmn.c
+++ b/drivers/gpu/drm/amd/pm/swsmu/smu_cmn.c
@@ -1384,7 +1384,7 @@ int smu_cmn_print_dpm_clk_levels(struct smu_context *smu,
 {
        uint32_t min_clk, max_clk, level_index, count;
        uint32_t freq_values[3];
-       int size, lvl, i;
+       int size, lvl, i, n;
        bool is_fine_grained;
        bool is_deep_sleep;
        bool freq_match;
@@ -1402,7 +1402,10 @@ int smu_cmn_print_dpm_clk_levels(struct smu_context *smu,
        /* Deep sleep - current clock < min_clock/2, TBD: cur_clk = 0 as GFXOFF 
*/
        is_deep_sleep = cur_clk < min_clk / 2;
        if (is_deep_sleep) {
-               size += sysfs_emit_at(buf, size, "S: %uMhz *\n", cur_clk);
+               n = sysfs_emit_at(buf, size, "S: %uMhz *\n", cur_clk);
+               if (!n)
+                       goto out;
+               size += n;
                level_index = 1;
        }
 
@@ -1412,10 +1415,13 @@ int smu_cmn_print_dpm_clk_levels(struct smu_context 
*smu,
                                     smu_cmn_freqs_match(
                                             cur_clk,
                                             dpm_table->dpm_levels[i].value);
-                       size += sysfs_emit_at(buf, size, "%d: %uMhz %s\n",
-                                             level_index + i,
-                                             dpm_table->dpm_levels[i].value,
-                                             freq_match ? "*" : "");
+                       n = sysfs_emit_at(buf, size, "%d: %uMhz %s\n",
+                                         level_index + i,
+                                         dpm_table->dpm_levels[i].value,
+                                         freq_match ? "*" : "");
+                       if (!n)
+                               break;
+                       size += n;
                }
        } else {
                count = 2;
@@ -1437,13 +1443,16 @@ int smu_cmn_print_dpm_clk_levels(struct smu_context 
*smu,
                }
 
                for (i = 0; i < count; i++) {
-                       size += sysfs_emit_at(
-                               buf, size, "%d: %uMhz %s\n", level_index + i,
-                               freq_values[i],
-                               (!is_deep_sleep && i == lvl) ? "*" : "");
+                       n = sysfs_emit_at(buf, size, "%d: %uMhz %s\n",
+                                         level_index + i, freq_values[i],
+                                         (!is_deep_sleep && i == lvl) ? "*" : 
"");
+                       if (!n)
+                               break;
+                       size += n;
                }
        }
 
+out:
        *offset = size;
 
        return 0;
@@ -1454,7 +1463,7 @@ int smu_cmn_print_pcie_levels(struct smu_context *smu,
                              uint32_t cur_gen, uint32_t cur_lane, char *buf,
                              int *offset)
 {
-       int size, i;
+       int size, i, n;
 
        if (!pcie_table || !buf)
                return -EINVAL;
@@ -1462,28 +1471,30 @@ int smu_cmn_print_pcie_levels(struct smu_context *smu,
        size = *offset;
 
        for (i = 0; i < pcie_table->lclk_levels; i++) {
-               size += sysfs_emit_at(
-                       buf, size, "%d: %s %s %dMhz %s\n", i,
-                       (pcie_table->pcie_gen[i] == 0) ? "2.5GT/s," :
-                       (pcie_table->pcie_gen[i] == 1) ? "5.0GT/s," :
-                       (pcie_table->pcie_gen[i] == 2) ? "8.0GT/s," :
-                       (pcie_table->pcie_gen[i] == 3) ? "16.0GT/s," :
-                       (pcie_table->pcie_gen[i] == 4) ? "32.0GT/s," :
-                       (pcie_table->pcie_gen[i] == 5) ? "64.0GT/s," :
-                                                        "",
-                       (pcie_table->pcie_lane[i] == 1) ? "x1" :
-                       (pcie_table->pcie_lane[i] == 2) ? "x2" :
-                       (pcie_table->pcie_lane[i] == 3) ? "x4" :
-                       (pcie_table->pcie_lane[i] == 4) ? "x8" :
-                       (pcie_table->pcie_lane[i] == 5) ? "x12" :
-                       (pcie_table->pcie_lane[i] == 6) ? "x16" :
-                       (pcie_table->pcie_lane[i] == 7) ? "x32" :
-                                                         "",
-                       pcie_table->lclk_freq[i],
-                       (cur_gen == pcie_table->pcie_gen[i]) &&
-                                       (cur_lane == pcie_table->pcie_lane[i]) ?
-                               "*" :
-                               "");
+               n = sysfs_emit_at(buf, size, "%d: %s %s %dMhz %s\n", i,
+                                 (pcie_table->pcie_gen[i] == 0) ? "2.5GT/s," :
+                                 (pcie_table->pcie_gen[i] == 1) ? "5.0GT/s," :
+                                 (pcie_table->pcie_gen[i] == 2) ? "8.0GT/s," :
+                                 (pcie_table->pcie_gen[i] == 3) ? "16.0GT/s," :
+                                 (pcie_table->pcie_gen[i] == 4) ? "32.0GT/s," :
+                                 (pcie_table->pcie_gen[i] == 5) ? "64.0GT/s," :
+                                 "",
+                                 (pcie_table->pcie_lane[i] == 1) ? "x1" :
+                                 (pcie_table->pcie_lane[i] == 2) ? "x2" :
+                                 (pcie_table->pcie_lane[i] == 3) ? "x4" :
+                                 (pcie_table->pcie_lane[i] == 4) ? "x8" :
+                                 (pcie_table->pcie_lane[i] == 5) ? "x12" :
+                                 (pcie_table->pcie_lane[i] == 6) ? "x16" :
+                                 (pcie_table->pcie_lane[i] == 7) ? "x32" :
+                                 "",
+                                 pcie_table->lclk_freq[i],
+                                 (cur_gen == pcie_table->pcie_gen[i]) &&
+                                 (cur_lane == pcie_table->pcie_lane[i]) ?
+                                 "*" :
+                                 "");
+               if (!n)
+                       break;
+               size += n;
        }
 
        *offset = size;
-- 
2.46.0

Reply via email to