From: YiPeng Chai <[email protected]>

Fix silent error swallowing in get_record_count paths.

Signed-off-by: YiPeng Chai <[email protected]>
Reviewed-by: Hawking Zhang <[email protected]>
Signed-off-by: Alex Deucher <[email protected]>
---
 drivers/gpu/drm/amd/ras/core/core.c           |  4 ++--
 drivers/gpu/drm/amd/ras/core/eeprom.c         |  4 ++--
 drivers/gpu/drm/amd/ras/core/eeprom_fw.c      |  4 ++--
 drivers/gpu/drm/amd/ras/core/ras_eeprom_mgr.h |  2 +-
 drivers/gpu/drm/amd/ras/core/ras_umc.c        | 17 ++++++++++-------
 5 files changed, 17 insertions(+), 14 deletions(-)

diff --git a/drivers/gpu/drm/amd/ras/core/core.c 
b/drivers/gpu/drm/amd/ras/core/core.c
index f093f29635888..00dc6084454cd 100644
--- a/drivers/gpu/drm/amd/ras/core/core.c
+++ b/drivers/gpu/drm/amd/ras/core/core.c
@@ -274,8 +274,8 @@ static int ras_core_eeprom_recovery(struct ras_core_context 
*ras_core)
        int ret;
 
        count = ras_eeprom_mgr_get_record_count(ras_core);
-       if (!count)
-               return 0;
+       if (count <= 0)
+               return count;
 
        /* Avoid bad page to be loaded again after gpu reset */
        if (ras_umc_get_saved_eeprom_count(ras_core) >= count)
diff --git a/drivers/gpu/drm/amd/ras/core/eeprom.c 
b/drivers/gpu/drm/amd/ras/core/eeprom.c
index 3c16446ddfc47..61cc0538f4622 100644
--- a/drivers/gpu/drm/amd/ras/core/eeprom.c
+++ b/drivers/gpu/drm/amd/ras/core/eeprom.c
@@ -1141,12 +1141,12 @@ static int ras_eeprom_hw_fini(struct ras_core_context 
*ras_core)
        return 0;
 }
 
-static uint32_t ras_eeprom_get_record_count(struct ras_core_context *ras_core)
+static int ras_eeprom_get_record_count(struct ras_core_context *ras_core)
 {
        struct ras_eeprom_control *control = ras_core->eeprom_mgr.ras_eeprom;
 
        if (!control)
-               return 0;
+               return -EINVAL;
 
        return control->ras_num_recs;
 }
diff --git a/drivers/gpu/drm/amd/ras/core/eeprom_fw.c 
b/drivers/gpu/drm/amd/ras/core/eeprom_fw.c
index 5f86ff54d9ed7..02369d54bdffd 100644
--- a/drivers/gpu/drm/amd/ras/core/eeprom_fw.c
+++ b/drivers/gpu/drm/amd/ras/core/eeprom_fw.c
@@ -97,12 +97,12 @@ static int fw_eeprom_sync_data(struct ras_core_context 
*ras_core,
        return ret;
 }
 
-static u32 fw_eeprom_get_record_count(struct ras_core_context *ras_core)
+static int fw_eeprom_get_record_count(struct ras_core_context *ras_core)
 {
        struct fw_eeprom_control *ctl;
 
        if (!ras_core->eeprom_mgr.ras_eeprom)
-               return 0;
+               return -EINVAL;
 
        ctl = ras_core->eeprom_mgr.ras_eeprom;
 
diff --git a/drivers/gpu/drm/amd/ras/core/ras_eeprom_mgr.h 
b/drivers/gpu/drm/amd/ras/core/ras_eeprom_mgr.h
index 873c96b287845..b15682b44a6ef 100644
--- a/drivers/gpu/drm/amd/ras/core/ras_eeprom_mgr.h
+++ b/drivers/gpu/drm/amd/ras/core/ras_eeprom_mgr.h
@@ -80,7 +80,7 @@ struct ras_eeprom_ops {
                struct eeprom_umc_record *records, u32 num);
        int (*append_records)(struct ras_core_context *ras_core,
                struct eeprom_umc_record *records, u32 num);
-       u32 (*get_record_count)(struct ras_core_context *ras_core);
+       int (*get_record_count)(struct ras_core_context *ras_core);
        int (*get_eeprom_info)(struct ras_core_context *ras_core,
                struct ras_eeprom_info *eeprom_info, bool fast_mode);
        int (*unlock_eeprom)(struct ras_core_context *ras_core);
diff --git a/drivers/gpu/drm/amd/ras/core/ras_umc.c 
b/drivers/gpu/drm/amd/ras/core/ras_umc.c
index 3558d4633a4e7..32203e85ef14b 100644
--- a/drivers/gpu/drm/amd/ras/core/ras_umc.c
+++ b/drivers/gpu/drm/amd/ras/core/ras_umc.c
@@ -676,12 +676,12 @@ int ras_umc_add_bad_pages(struct ras_core_context 
*ras_core,
 int ras_umc_load_bad_pages(struct ras_core_context *ras_core)
 {
        struct eeprom_umc_record *bps;
-       uint32_t ras_num_recs, c = 0;
-       int ret;
+       uint32_t c = 0;
+       int ras_num_recs, ret;
 
        ras_num_recs = ras_eeprom_mgr_get_record_count(ras_core);
-       if (!ras_num_recs)
-               return 0;
+       if (ras_num_recs <= 0)
+               return ras_num_recs;
 
        bps = kzalloc_objs(*bps, ras_num_recs);
        if (!bps)
@@ -710,7 +710,7 @@ static int ras_umc_save_bad_pages(struct ras_core_context 
*ras_core)
        struct ras_umc *ras_umc = &ras_core->ras_umc;
        struct eeprom_store_record *data = &ras_umc->umc_err_data.rom_data;
        struct eeprom_store_record *ram_data = &ras_umc->umc_err_data.ram_data;
-       uint32_t eeprom_record_num, logical_count = 0;
+       int eeprom_record_num, logical_count = 0;
        int save_count;
        int ret = -ENODATA;
 
@@ -722,6 +722,9 @@ static int ras_umc_save_bad_pages(struct ras_core_context 
*ras_core)
                return -EINVAL;
 
        eeprom_record_num = ras_eeprom_mgr_get_record_count(ras_core);
+       if (eeprom_record_num < 0)
+               return eeprom_record_num;
+
        mutex_lock(&ras_umc->umc_lock);
        save_count = data->count - eeprom_record_num;
        logical_count = ram_data->bad_page_num - ram_data->bad_page_num_old;
@@ -981,8 +984,8 @@ int ras_umc_dump_fw_records(struct ras_core_context 
*ras_core)
 
        eeprom_count = ras_eeprom_mgr_get_record_count(ras_core);
        /* no bad page record, skip eeprom access */
-       if (!eeprom_count)
-               return 0;
+       if (eeprom_count <= 0)
+               return eeprom_count;
 
        umc_count = ras_umc_get_saved_eeprom_count(ras_core);
        if (umc_count == eeprom_count) {
-- 
2.55.0

Reply via email to