[PATCH 096/109] drm/amd/ras: fix and improve bad page count calculation
Alex Deucher <[email protected]>
| Newsgroups | org.freedesktop.lists.amd-gfx |
|---|---|
| Message-ID | <[email protected]> |
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