From: YiPeng Chai <[email protected]>

Fix an issue where the saved bad page count is always zero.

The cur_nps_valid_page_num field in the record already tracks
the available bad page count, so use it directly to calculate
the correct saved bad page number.

Signed-off-by: YiPeng Chai <[email protected]>
Reviewed-by: Tao Zhou <[email protected]>
Signed-off-by: Alex Deucher <[email protected]>
---
 drivers/gpu/drm/amd/ras/core/ras_umc.c | 32 +++++++++++++-------------
 drivers/gpu/drm/amd/ras/core/ras_umc.h |  6 -----
 2 files changed, 16 insertions(+), 22 deletions(-)

diff --git a/drivers/gpu/drm/amd/ras/core/ras_umc.c 
b/drivers/gpu/drm/amd/ras/core/ras_umc.c
index 4cce9f5c65932..3e546e7fde59b 100644
--- a/drivers/gpu/drm/amd/ras/core/ras_umc.c
+++ b/drivers/gpu/drm/amd/ras/core/ras_umc.c
@@ -683,14 +683,6 @@ static int ras_umc_update_eeprom_ram_data(struct 
ras_core_context *ras_core,
        return 0;
 }
 
-static void ras_umc_update_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.ram_data;
-
-       data->bad_page_num_old = data->bad_page_num;
-}
-
 void ras_umc_report_badpage_info(struct ras_core_context *ras_core)
 {
        struct ras_umc *ras_umc = &ras_core->ras_umc;
@@ -797,15 +789,24 @@ int ras_umc_load_bad_pages(struct ras_core_context 
*ras_core)
        if (ret)
                RAS_DEV_ERR(ras_core->dev,
                        "Failed to load EEPROM table records! ret:%d\n", ret);
-       else {
+       else
                ret = ras_umc_add_bad_pages(ras_core, bps, ras_num_recs, &c);
-               ras_umc_update_bad_pages(ras_core);
-       }
 
        kfree(bps);
        return ret;
 }
 
+static int ras_umc_count_valid_pages(struct ras_core_context *ras_core,
+               struct eeprom_umc_record *records, const u32 nr_records)
+{
+       int count = 0, i;
+
+       for (i = 0; i < nr_records; i++)
+               count += records[i].cur_nps_valid_page_num;
+
+       return count;
+}
+
 /*
  * write error record array to eeprom, the function should be
  * protected by recovery_lock
@@ -815,8 +816,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;
-       int eeprom_record_num, logical_count = 0;
+       int eeprom_record_num;
        int save_count;
        int ret = -ENODATA;
 
@@ -833,7 +833,6 @@ static int ras_umc_save_bad_pages(struct ras_core_context 
*ras_core)
 
        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;
        /* only new entries are saved */
        if (save_count > 0) {
                ret = ras_eeprom_mgr_append_records(ras_core,
@@ -845,8 +844,9 @@ static int ras_umc_save_bad_pages(struct ras_core_context 
*ras_core)
                        goto exit;
                }
 
-               ras_umc_update_bad_pages(ras_core);
-               RAS_DEV_INFO(ras_core->dev, "Saved %d records to EEPROM 
table.\n", logical_count);
+               RAS_DEV_INFO(ras_core->dev, "Saved %d pages to EEPROM table.\n",
+                       ras_umc_count_valid_pages(ras_core,
+                               &data->bps[eeprom_record_num], save_count));
        }
 
 exit:
diff --git a/drivers/gpu/drm/amd/ras/core/ras_umc.h 
b/drivers/gpu/drm/amd/ras/core/ras_umc.h
index 362c9ce6a404b..db480d15aad43 100644
--- a/drivers/gpu/drm/amd/ras/core/ras_umc.h
+++ b/drivers/gpu/drm/amd/ras/core/ras_umc.h
@@ -151,12 +151,6 @@ struct eeprom_store_record {
        int count;
        /* the space can place new entries */
        int space_left;
-       /* logical bad page number */
-       int bad_page_num;
-       /* the bad page number is ras_num_recs or
-        * ras_num_recs * retire_unit
-        */
-       int bad_page_num_old;
        uint64_t umc_channel_bitmap;
 };
 
-- 
2.55.0

Reply via email to