From: YiPeng Chai <[email protected]>

Filter out invalid pages from extended page addresses.

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 | 13 +++++++++----
 1 file changed, 9 insertions(+), 4 deletions(-)

diff --git a/drivers/gpu/drm/amd/ras/core/ras_umc.c 
b/drivers/gpu/drm/amd/ras/core/ras_umc.c
index 299426d6d8318..4cce9f5c65932 100644
--- a/drivers/gpu/drm/amd/ras/core/ras_umc.c
+++ b/drivers/gpu/drm/amd/ras/core/ras_umc.c
@@ -233,7 +233,8 @@ static int ras_umc_expand_row_pages(struct ras_core_context 
*ras_core,
 
        row_pa = retired_addr & ~(flip_mask);
 
-       if (count < nr_page_pfns)
+       if ((count < nr_page_pfns) &&
+           !ras_core_check_address_sanity(ras_core, row_pa))
                page_pfns[count++] = RAS_ADDR_TO_PFN(row_pa);
 
        subset = flip_mask;
@@ -243,7 +244,8 @@ static int ras_umc_expand_row_pages(struct ras_core_context 
*ras_core,
                if (count >= nr_page_pfns)
                        break;
 
-               page_pfns[count++] = RAS_ADDR_TO_PFN(addr);
+               if (!ras_core_check_address_sanity(ras_core, addr))
+                       page_pfns[count++] = RAS_ADDR_TO_PFN(addr);
 
                subset = (subset - 1) & flip_mask;
        };
@@ -271,7 +273,7 @@ int ras_umc_convert_record_to_row_pages(struct 
ras_core_context *ras_core,
        }
 
        count = ras_umc_expand_row_pages(ras_core, record, page_pfns, 
nr_page_pfns);
-       if (count > 0)
+       if (count >= 0)
                record->cur_nps_valid_page_num = count;
 
        return count;
@@ -656,10 +658,13 @@ static int ras_umc_update_eeprom_ram_data(struct 
ras_core_context *ras_core,
        struct eeprom_store_record *data = &ras_umc->umc_err_data.ram_data;
        int j;
 
-       if (!bps || !page_pfns || !nr_page_pfns ||
+       if (!bps || !page_pfns ||
                (nr_page_pfns > ras_umc->max_pages_per_row))
                return -EINVAL;
 
+       if (!nr_page_pfns)
+               return 0;
+
        if (!data->space_left &&
                ras_umc_realloc_err_data_space(ras_core, data, 256))
                return -ENOMEM;
-- 
2.55.0

Reply via email to