<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=us-ascii">
<meta name="Generator" content="Microsoft Exchange Server">
<!-- converted from rtf -->
<style><!-- .EmailQuote { margin-left: 1pt; padding-left: 4pt; border-left: #800000 2px solid; } --></style>
</head>
<body>
<font face="Calibri" size="2"><span style="font-size:10pt;">
<div style="padding-right:5pt;padding-left:5pt;"><font color="blue">[AMD Official Use Only - AMD Internal Distribution Only]<br>

</font></div>
<div style="margin-top:5pt;"><font face="Times New Roman" size="3"><span style="font-size:12pt;"><br>

</span></font></div>
<div><font face="Calibri" size="2"><span style="font-size:11pt;">Series is</span></font></div>
<div><font face="Calibri" size="2"><span style="font-size:11pt;"> </span></font></div>
<div><font face="Calibri" size="2"><span style="font-size:11pt;">Reviewed-by: Hawking Zhang <<a href="mailto:Hawking.Zhang@amd.com"><font color="#467886"><u>Hawking.Zhang@amd.com</u></font></a>></span></font></div>
<div><font face="Calibri" size="2"><span style="font-size:11pt;"> </span></font></div>
<div><font face="Calibri" size="2"><span style="font-size:11pt;">Copy <a href="mailto:Candice.Li@amd.com"><font color="#2B579A"><span style="background-color:#E1DFDD;">@Li, Candice</span></font></a> for the awareness.</span></font></div>
<div><font face="Calibri" size="2"><span style="font-size:11pt;"> </span></font></div>
<div><font face="Calibri" size="2"><span style="font-size:11pt;">Regards,<br>

Hawking</span></font></div>
<div><font face="Calibri" size="2"><span style="font-size:11pt;"> </span></font></div>
<div><font face="Calibri" size="2"><span style="font-size:11pt;">-----Original Message-----<br>

From: Sun, Ce(Overlord) <Ce.Sun@amd.com> <br>

Sent: Monday, August 18, 2025 22:58<br>

To: amd-gfx@lists.freedesktop.org<br>

Cc: Zhou1, Tao <Tao.Zhou1@amd.com>; Yang, Stanley <Stanley.Yang@amd.com>; Zhang, Hawking <Hawking.Zhang@amd.com>; Wang, Yang(Kevin) <KevinYang.Wang@amd.com>; Chai, Thomas <YiPeng.Chai@amd.com>; Sun, Ce(Overlord) <Ce.Sun@amd.com><br>

Subject: [PATCH 4/4 v5] drm/amdgpu: Correct the loss of aca bank reg info</span></font></div>
<div><font face="Calibri" size="2"><span style="font-size:11pt;"> </span></font></div>
<div><font face="Calibri" size="2"><span style="font-size:11pt;">By polling, poll ACA bank count to ensure that valid ACA bank reg info can be obtained</span></font></div>
<div><font face="Calibri" size="2"><span style="font-size:11pt;"> </span></font></div>
<div><font face="Calibri" size="2"><span style="font-size:11pt;">v2: add corresponding delay before send msg to SMU to query mca bank info.</span></font></div>
<div><font face="Calibri" size="2"><span style="font-size:11pt;">(Stanley)</span></font></div>
<div><font face="Calibri" size="2"><span style="font-size:11pt;"> </span></font></div>
<div><font face="Calibri" size="2"><span style="font-size:11pt;">v3: the loop cannot exit. (Thomas)</span></font></div>
<div><font face="Calibri" size="2"><span style="font-size:11pt;"> </span></font></div>
<div><font face="Calibri" size="2"><span style="font-size:11pt;">v4: remove amdgpu_aca_clear_bank_count. (Kevin)</span></font></div>
<div><font face="Calibri" size="2"><span style="font-size:11pt;"> </span></font></div>
<div><font face="Calibri" size="2"><span style="font-size:11pt;">v5: continuously inject ce. If a creation interruption occurs at this time, bank reg info will be lost. (Thomas)</span></font></div>
<div><font face="Calibri" size="2"><span style="font-size:11pt;">v5: each cycle is delayed by 5ms. (Tao)</span></font></div>
<div><font face="Calibri" size="2"><span style="font-size:11pt;"> </span></font></div>
<div><font face="Calibri" size="2"><span style="font-size:11pt;">Signed-off-by: Ce Sun <<a href="mailto:cesun102@amd.com">cesun102@amd.com</a>></span></font></div>
<div><font face="Calibri" size="2"><span style="font-size:11pt;">---</span></font></div>
<div><font face="Calibri" size="2"><span style="font-size:11pt;"> drivers/gpu/drm/amd/amdgpu/amdgpu_ras.c | 74 ++++++++++++++-----------  drivers/gpu/drm/amd/amdgpu/amdgpu_ras.h |  5 +-  drivers/gpu/drm/amd/amdgpu/amdgpu_umc.c |  1 +  drivers/gpu/drm/amd/amdgpu/umc_v12_0.c 
|  9 ++-</span></font></div>
<div><font face="Calibri" size="2"><span style="font-size:11pt;"> 4 files changed, 51 insertions(+), 38 deletions(-)</span></font></div>
<div><font face="Calibri" size="2"><span style="font-size:11pt;"> </span></font></div>
<div><font face="Calibri" size="2"><span style="font-size:11pt;">diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_ras.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_ras.c</span></font></div>
<div><font face="Calibri" size="2"><span style="font-size:11pt;">index 31850a47a41f..a779336e2fd3 100644</span></font></div>
<div><font face="Calibri" size="2"><span style="font-size:11pt;">--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_ras.c</span></font></div>
<div><font face="Calibri" size="2"><span style="font-size:11pt;">+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_ras.c</span></font></div>
<div><font face="Calibri" size="2"><span style="font-size:11pt;">@@ -122,7 +122,7 @@ const char *get_ras_block_str(struct ras_common_if *ras_block)</span></font></div>
<div><font face="Calibri" size="2"><span style="font-size:11pt;"> /* typical ECC bad page rate is 1 bad page per 100MB VRAM */</span></font></div>
<div><font face="Calibri" size="2"><span style="font-size:11pt;"> #define RAS_BAD_PAGE_COVER              (100 * 1024 * 1024ULL)</span></font></div>
<div><font face="Calibri" size="2"><span style="font-size:11pt;"> </span></font></div>
<div><font face="Calibri" size="2"><span style="font-size:11pt;">-#define MAX_UMC_POISON_POLLING_TIME_ASYNC  300  //ms</span></font></div>
<div><font face="Calibri" size="2"><span style="font-size:11pt;">+#define MAX_UMC_POISON_POLLING_TIME_ASYNC  200</span></font></div>
<div><font face="Calibri" size="2"><span style="font-size:11pt;"> </span></font></div>
<div><font face="Calibri" size="2"><span style="font-size:11pt;"> #define AMDGPU_RAS_RETIRE_PAGE_INTERVAL 100  //ms</span></font></div>
<div><font face="Calibri" size="2"><span style="font-size:11pt;"> </span></font></div>
<div><font face="Calibri" size="2"><span style="font-size:11pt;">@@ -131,6 +131,8 @@ const char *get_ras_block_str(struct ras_common_if *ras_block)</span></font></div>
<div><font face="Calibri" size="2"><span style="font-size:11pt;"> #define BYPASS_ALLOCATED_ADDRESS        0x0</span></font></div>
<div><font face="Calibri" size="2"><span style="font-size:11pt;"> #define BYPASS_INITIALIZATION_ADDRESS   0x1</span></font></div>
<div><font face="Calibri" size="2"><span style="font-size:11pt;"> </span></font></div>
<div><font face="Calibri" size="2"><span style="font-size:11pt;">+#define MAX_BANK_COUNT 12</span></font></div>
<div><font face="Calibri" size="2"><span style="font-size:11pt;">+</span></font></div>
<div><font face="Calibri" size="2"><span style="font-size:11pt;"> enum amdgpu_ras_retire_page_reservation {</span></font></div>
<div><font face="Calibri" size="2"><span style="font-size:11pt;">         AMDGPU_RAS_RETIRE_PAGE_RESERVED,</span></font></div>
<div><font face="Calibri" size="2"><span style="font-size:11pt;">         AMDGPU_RAS_RETIRE_PAGE_PENDING,</span></font></div>
<div><font face="Calibri" size="2"><span style="font-size:11pt;">@@ -3306,8 +3308,8 @@ static void amdgpu_ras_ecc_log_init(struct ras_ecc_log_info *ecc_log)</span></font></div>
<div><font face="Calibri" size="2"><span style="font-size:11pt;">         mutex_init(&ecc_log->lock);</span></font></div>
<div><font face="Calibri" size="2"><span style="font-size:11pt;"> </span></font></div>
<div><font face="Calibri" size="2"><span style="font-size:11pt;">         INIT_RADIX_TREE(&ecc_log->de_page_tree, GFP_KERNEL);</span></font></div>
<div><font face="Calibri" size="2"><span style="font-size:11pt;">-       ecc_log->de_queried_count = 0;</span></font></div>
<div><font face="Calibri" size="2"><span style="font-size:11pt;">-       ecc_log->prev_de_queried_count = 0;</span></font></div>
<div><font face="Calibri" size="2"><span style="font-size:11pt;">+       ecc_log->consumption_q_count = 0;</span></font></div>
<div><font face="Calibri" size="2"><span style="font-size:11pt;">+       ecc_log->creation_de_count = 0;</span></font></div>
<div><font face="Calibri" size="2"><span style="font-size:11pt;"> }</span></font></div>
<div><font face="Calibri" size="2"><span style="font-size:11pt;"> </span></font></div>
<div><font face="Calibri" size="2"><span style="font-size:11pt;"> static void amdgpu_ras_ecc_log_fini(struct ras_ecc_log_info *ecc_log) @@ -3326,8 +3328,8 @@ static void amdgpu_ras_ecc_log_fini(struct ras_ecc_log_info *ecc_log)</span></font></div>
<div><font face="Calibri" size="2"><span style="font-size:11pt;">         mutex_unlock(&ecc_log->lock);</span></font></div>
<div><font face="Calibri" size="2"><span style="font-size:11pt;"> </span></font></div>
<div><font face="Calibri" size="2"><span style="font-size:11pt;">         mutex_destroy(&ecc_log->lock);</span></font></div>
<div><font face="Calibri" size="2"><span style="font-size:11pt;">-       ecc_log->de_queried_count = 0;</span></font></div>
<div><font face="Calibri" size="2"><span style="font-size:11pt;">-       ecc_log->prev_de_queried_count = 0;</span></font></div>
<div><font face="Calibri" size="2"><span style="font-size:11pt;">+       ecc_log->consumption_q_count = 0;</span></font></div>
<div><font face="Calibri" size="2"><span style="font-size:11pt;">+       ecc_log->creation_de_count = 0;</span></font></div>
<div><font face="Calibri" size="2"><span style="font-size:11pt;"> }</span></font></div>
<div><font face="Calibri" size="2"><span style="font-size:11pt;"> #endif</span></font></div>
<div><font face="Calibri" size="2"><span style="font-size:11pt;"> </span></font></div>
<div><font face="Calibri" size="2"><span style="font-size:11pt;">@@ -3381,49 +3383,50 @@ static int amdgpu_ras_poison_creation_handler(struct amdgpu_device *adev,</span></font></div>
<div><font face="Calibri" size="2"><span style="font-size:11pt;">                                 uint32_t poison_creation_count)</span></font></div>
<div><font face="Calibri" size="2"><span style="font-size:11pt;"> {</span></font></div>
<div><font face="Calibri" size="2"><span style="font-size:11pt;">         int ret = 0;</span></font></div>
<div><font face="Calibri" size="2"><span style="font-size:11pt;">-       struct ras_ecc_log_info *ecc_log;</span></font></div>
<div><font face="Calibri" size="2"><span style="font-size:11pt;">         struct ras_query_if info;</span></font></div>
<div><font face="Calibri" size="2"><span style="font-size:11pt;">-       uint32_t timeout = 0;</span></font></div>
<div><font face="Calibri" size="2"><span style="font-size:11pt;">+       struct ras_ecc_log_info *ecc_log;</span></font></div>
<div><font face="Calibri" size="2"><span style="font-size:11pt;">+       uint32_t timeout = MAX_UMC_POISON_POLLING_TIME_ASYNC;</span></font></div>
<div><font face="Calibri" size="2"><span style="font-size:11pt;">         struct amdgpu_ras *ras = amdgpu_ras_get_context(adev);</span></font></div>
<div><font face="Calibri" size="2"><span style="font-size:11pt;">-       uint64_t de_queried_count;</span></font></div>
<div><font face="Calibri" size="2"><span style="font-size:11pt;">-       uint32_t new_detect_count, total_detect_count;</span></font></div>
<div><font face="Calibri" size="2"><span style="font-size:11pt;">-       uint32_t need_query_count = poison_creation_count;</span></font></div>
<div><font face="Calibri" size="2"><span style="font-size:11pt;">+       uint64_t creation_de_count = 0;</span></font></div>
<div><font face="Calibri" size="2"><span style="font-size:11pt;">+       uint64_t consumption_q_count = 0;</span></font></div>
<div><font face="Calibri" size="2"><span style="font-size:11pt;">         enum ras_event_type type = RAS_EVENT_TYPE_POISON_CREATION;</span></font></div>
<div><font face="Calibri" size="2"><span style="font-size:11pt;">+       uint64_t bank_count = 0;</span></font></div>
<div><font face="Calibri" size="2"><span style="font-size:11pt;">+       uint32_t new_detect_count, total_detect_count;</span></font></div>
<div><font face="Calibri" size="2"><span style="font-size:11pt;">+       uint64_t pre_bank_count = 0;</span></font></div>
<div><font face="Calibri" size="2"><span style="font-size:11pt;"> </span></font></div>
<div><font face="Calibri" size="2"><span style="font-size:11pt;">         memset(&info, 0, sizeof(info));</span></font></div>
<div><font face="Calibri" size="2"><span style="font-size:11pt;">         info.head.block = AMDGPU_RAS_BLOCK__UMC;</span></font></div>
<div><font face="Calibri" size="2"><span style="font-size:11pt;">-</span></font></div>
<div><font face="Calibri" size="2"><span style="font-size:11pt;">         ecc_log = &ras->umc_ecc_log;</span></font></div>
<div><font face="Calibri" size="2"><span style="font-size:11pt;">-       total_detect_count = 0;</span></font></div>
<div><font face="Calibri" size="2"><span style="font-size:11pt;">+</span></font></div>
<div><font face="Calibri" size="2"><span style="font-size:11pt;">         do {</span></font></div>
<div><font face="Calibri" size="2"><span style="font-size:11pt;">                 ret = amdgpu_ras_query_error_status_with_event(adev, &info, type);</span></font></div>
<div><font face="Calibri" size="2"><span style="font-size:11pt;">                 if (ret)</span></font></div>
<div><font face="Calibri" size="2"><span style="font-size:11pt;">                         return ret;</span></font></div>
<div><font face="Calibri" size="2"><span style="font-size:11pt;">-</span></font></div>
<div><font face="Calibri" size="2"><span style="font-size:11pt;">-               de_queried_count = ecc_log->de_queried_count;</span></font></div>
<div><font face="Calibri" size="2"><span style="font-size:11pt;">-               if (de_queried_count > ecc_log->prev_de_queried_count) {</span></font></div>
<div><font face="Calibri" size="2"><span style="font-size:11pt;">-                       new_detect_count = de_queried_count - ecc_log->prev_de_queried_count;</span></font></div>
<div><font face="Calibri" size="2"><span style="font-size:11pt;">-                       ecc_log->prev_de_queried_count = de_queried_count;</span></font></div>
<div><font face="Calibri" size="2"><span style="font-size:11pt;">-                       timeout = 0;</span></font></div>
<div><font face="Calibri" size="2"><span style="font-size:11pt;">+               creation_de_count = ecc_log->creation_de_count;</span></font></div>
<div><font face="Calibri" size="2"><span style="font-size:11pt;">+               consumption_q_count = ecc_log->consumption_q_count;</span></font></div>
<div><font face="Calibri" size="2"><span style="font-size:11pt;">+</span></font></div>
<div><font face="Calibri" size="2"><span style="font-size:11pt;">+               bank_count = amdgpu_aca_get_bank_count(adev);</span></font></div>
<div><font face="Calibri" size="2"><span style="font-size:11pt;">+               if (bank_count > pre_bank_count) {</span></font></div>
<div><font face="Calibri" size="2"><span style="font-size:11pt;">+                       new_detect_count = bank_count - pre_bank_count;</span></font></div>
<div><font face="Calibri" size="2"><span style="font-size:11pt;">+                       pre_bank_count = bank_count;</span></font></div>
<div><font face="Calibri" size="2"><span style="font-size:11pt;">+                       total_detect_count += bank_count;</span></font></div>
<div><font face="Calibri" size="2"><span style="font-size:11pt;">+                       timeout = MAX_UMC_POISON_POLLING_TIME_ASYNC;</span></font></div>
<div><font face="Calibri" size="2"><span style="font-size:11pt;">                 } else {</span></font></div>
<div><font face="Calibri" size="2"><span style="font-size:11pt;">-                       new_detect_count = 0;</span></font></div>
<div><font face="Calibri" size="2"><span style="font-size:11pt;">+                       --timeout;</span></font></div>
<div><font face="Calibri" size="2"><span style="font-size:11pt;">+                       msleep(5);</span></font></div>
<div><font face="Calibri" size="2"><span style="font-size:11pt;">                 }</span></font></div>
<div><font face="Calibri" size="2"><span style="font-size:11pt;"> </span></font></div>
<div><font face="Calibri" size="2"><span style="font-size:11pt;">-               if (new_detect_count) {</span></font></div>
<div><font face="Calibri" size="2"><span style="font-size:11pt;">-                       total_detect_count += new_detect_count;</span></font></div>
<div><font face="Calibri" size="2"><span style="font-size:11pt;">-               } else {</span></font></div>
<div><font face="Calibri" size="2"><span style="font-size:11pt;">-                       if (!timeout && need_query_count)</span></font></div>
<div><font face="Calibri" size="2"><span style="font-size:11pt;">-                               timeout = MAX_UMC_POISON_POLLING_TIME_ASYNC;</span></font></div>
<div><font face="Calibri" size="2"><span style="font-size:11pt;">+               if (creation_de_count && consumption_q_count)</span></font></div>
<div><font face="Calibri" size="2"><span style="font-size:11pt;">+                       break;</span></font></div>
<div><font face="Calibri" size="2"><span style="font-size:11pt;"> </span></font></div>
<div><font face="Calibri" size="2"><span style="font-size:11pt;">-                       if (timeout) {</span></font></div>
<div><font face="Calibri" size="2"><span style="font-size:11pt;">-                               if (!--timeout)</span></font></div>
<div><font face="Calibri" size="2"><span style="font-size:11pt;">-                                       break;</span></font></div>
<div><font face="Calibri" size="2"><span style="font-size:11pt;">-                               msleep(1);</span></font></div>
<div><font face="Calibri" size="2"><span style="font-size:11pt;">-                       }</span></font></div>
<div><font face="Calibri" size="2"><span style="font-size:11pt;">-               }</span></font></div>
<div><font face="Calibri" size="2"><span style="font-size:11pt;">-       } while (total_detect_count < need_query_count);</span></font></div>
<div><font face="Calibri" size="2"><span style="font-size:11pt;">+               if (total_detect_count >= MAX_BANK_COUNT && consumption_q_count)</span></font></div>
<div><font face="Calibri" size="2"><span style="font-size:11pt;">+                       break;</span></font></div>
<div><font face="Calibri" size="2"><span style="font-size:11pt;">+       } while (timeout);</span></font></div>
<div><font face="Calibri" size="2"><span style="font-size:11pt;"> </span></font></div>
<div><font face="Calibri" size="2"><span style="font-size:11pt;">-       if (total_detect_count)</span></font></div>
<div><font face="Calibri" size="2"><span style="font-size:11pt;">+       ecc_log->creation_de_count = 0;</span></font></div>
<div><font face="Calibri" size="2"><span style="font-size:11pt;">+       ecc_log->consumption_q_count = 0;</span></font></div>
<div><font face="Calibri" size="2"><span style="font-size:11pt;">+</span></font></div>
<div><font face="Calibri" size="2"><span style="font-size:11pt;">+       if (creation_de_count)</span></font></div>
<div><font face="Calibri" size="2"><span style="font-size:11pt;">                 schedule_delayed_work(&ras->page_retirement_dwork, 0);</span></font></div>
<div><font face="Calibri" size="2"><span style="font-size:11pt;"> </span></font></div>
<div><font face="Calibri" size="2"><span style="font-size:11pt;">         return 0;</span></font></div>
<div><font face="Calibri" size="2"><span style="font-size:11pt;">@@ -3516,7 +3519,7 @@ static int amdgpu_ras_page_retirement_thread(void *param)</span></font></div>
<div><font face="Calibri" size="2"><span style="font-size:11pt;">                                 atomic_sub(poison_creation_count, &con->poison_creation_count);</span></font></div>
<div><font face="Calibri" size="2"><span style="font-size:11pt;">                                 atomic_sub(poison_creation_count, &con->page_retirement_req_cnt);</span></font></div>
<div><font face="Calibri" size="2"><span style="font-size:11pt;">                         }</span></font></div>
<div><font face="Calibri" size="2"><span style="font-size:11pt;">-               } while (atomic_read(&con->poison_creation_count));</span></font></div>
<div><font face="Calibri" size="2"><span style="font-size:11pt;">+               } while (atomic_read(&con->poison_creation_count) && </span></font></div>
<div><font face="Calibri" size="2"><span style="font-size:11pt;">+!atomic_read(&con->poison_consumption_count));</span></font></div>
<div><font face="Calibri" size="2"><span style="font-size:11pt;"> </span></font></div>
<div><font face="Calibri" size="2"><span style="font-size:11pt;"> #ifdef HAVE_KFIFO_PUT_NON_POINTER</span></font></div>
<div><font face="Calibri" size="2"><span style="font-size:11pt;">                 if (ret != -EIO) {</span></font></div>
<div><font face="Calibri" size="2"><span style="font-size:11pt;">@@ -3534,6 +3537,7 @@ static int amdgpu_ras_page_retirement_thread(void *param)</span></font></div>
<div><font face="Calibri" size="2"><span style="font-size:11pt;">                         /* gpu mode-1 reset is ongoing or just completed ras mode-1 reset */</span></font></div>
<div><font face="Calibri" size="2"><span style="font-size:11pt;">                         /* Clear poison creation request */</span></font></div>
<div><font face="Calibri" size="2"><span style="font-size:11pt;">                         atomic_set(&con->poison_creation_count, 0);</span></font></div>
<div><font face="Calibri" size="2"><span style="font-size:11pt;">+                       atomic_set(&con->poison_consumption_count, 0);</span></font></div>
<div><font face="Calibri" size="2"><span style="font-size:11pt;"> </span></font></div>
<div><font face="Calibri" size="2"><span style="font-size:11pt;">                         /* Clear poison fifo */</span></font></div>
<div><font face="Calibri" size="2"><span style="font-size:11pt;">                         amdgpu_ras_clear_poison_fifo(adev);</span></font></div>
<div><font face="Calibri" size="2"><span style="font-size:11pt;">@@ -3558,6 +3562,8 @@ static int amdgpu_ras_page_retirement_thread(void *param)</span></font></div>
<div><font face="Calibri" size="2"><span style="font-size:11pt;">                                 atomic_sub(msg_count, &con->page_retirement_req_cnt);</span></font></div>
<div><font face="Calibri" size="2"><span style="font-size:11pt;">                         }</span></font></div>
<div><font face="Calibri" size="2"><span style="font-size:11pt;"> </span></font></div>
<div><font face="Calibri" size="2"><span style="font-size:11pt;">+                       atomic_set(&con->poison_consumption_count, 0);</span></font></div>
<div><font face="Calibri" size="2"><span style="font-size:11pt;">+</span></font></div>
<div><font face="Calibri" size="2"><span style="font-size:11pt;">                         /* Wake up work to save bad pages to eeprom */</span></font></div>
<div><font face="Calibri" size="2"><span style="font-size:11pt;">                         schedule_delayed_work(&con->page_retirement_dwork, 0);</span></font></div>
<div><font face="Calibri" size="2"><span style="font-size:11pt;">                 }</span></font></div>
<div><font face="Calibri" size="2"><span style="font-size:11pt;">@@ -3663,6 +3669,7 @@ int amdgpu_ras_recovery_init(struct amdgpu_device *adev, bool init_bp_info)</span></font></div>
<div><font face="Calibri" size="2"><span style="font-size:11pt;">         init_waitqueue_head(&con->page_retirement_wq);</span></font></div>
<div><font face="Calibri" size="2"><span style="font-size:11pt;">         atomic_set(&con->page_retirement_req_cnt, 0);</span></font></div>
<div><font face="Calibri" size="2"><span style="font-size:11pt;">         atomic_set(&con->poison_creation_count, 0);</span></font></div>
<div><font face="Calibri" size="2"><span style="font-size:11pt;">+       atomic_set(&con->poison_consumption_count, 0);</span></font></div>
<div><font face="Calibri" size="2"><span style="font-size:11pt;">         con->page_retirement_thread =</span></font></div>
<div><font face="Calibri" size="2"><span style="font-size:11pt;">                 kthread_run(amdgpu_ras_page_retirement_thread, adev, "umc_page_retirement");</span></font></div>
<div><font face="Calibri" size="2"><span style="font-size:11pt;">         if (IS_ERR(con->page_retirement_thread)) { @@ -3723,6 +3730,7 @@ static int amdgpu_ras_recovery_fini(struct amdgpu_device *adev)</span></font></div>
<div><font face="Calibri" size="2"><span style="font-size:11pt;"> </span></font></div>
<div><font face="Calibri" size="2"><span style="font-size:11pt;">         atomic_set(&con->page_retirement_req_cnt, 0);</span></font></div>
<div><font face="Calibri" size="2"><span style="font-size:11pt;">         atomic_set(&con->poison_creation_count, 0);</span></font></div>
<div><font face="Calibri" size="2"><span style="font-size:11pt;">+       atomic_set(&con->poison_consumption_count, 0);</span></font></div>
<div><font face="Calibri" size="2"><span style="font-size:11pt;"> </span></font></div>
<div><font face="Calibri" size="2"><span style="font-size:11pt;">         mutex_destroy(&con->page_rsv_lock);</span></font></div>
<div><font face="Calibri" size="2"><span style="font-size:11pt;"> </span></font></div>
<div><font face="Calibri" size="2"><span style="font-size:11pt;">diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_ras.h b/drivers/gpu/drm/amd/amdgpu/amdgpu_ras.h</span></font></div>
<div><font face="Calibri" size="2"><span style="font-size:11pt;">index 6265dac0e1c0..f5797e53f966 100644</span></font></div>
<div><font face="Calibri" size="2"><span style="font-size:11pt;">--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_ras.h</span></font></div>
<div><font face="Calibri" size="2"><span style="font-size:11pt;">+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_ras.h</span></font></div>
<div><font face="Calibri" size="2"><span style="font-size:11pt;">@@ -492,8 +492,8 @@ struct ras_ecc_err {  struct ras_ecc_log_info {</span></font></div>
<div><font face="Calibri" size="2"><span style="font-size:11pt;">         struct mutex lock;</span></font></div>
<div><font face="Calibri" size="2"><span style="font-size:11pt;">         struct radix_tree_root de_page_tree;</span></font></div>
<div><font face="Calibri" size="2"><span style="font-size:11pt;">-       uint64_t        de_queried_count;</span></font></div>
<div><font face="Calibri" size="2"><span style="font-size:11pt;">-       uint64_t        prev_de_queried_count;</span></font></div>
<div><font face="Calibri" size="2"><span style="font-size:11pt;">+       uint64_t consumption_q_count;</span></font></div>
<div><font face="Calibri" size="2"><span style="font-size:11pt;">+       uint64_t creation_de_count;</span></font></div>
<div><font face="Calibri" size="2"><span style="font-size:11pt;"> };</span></font></div>
<div><font face="Calibri" size="2"><span style="font-size:11pt;"> </span></font></div>
<div><font face="Calibri" size="2"><span style="font-size:11pt;"> struct amdgpu_ras {</span></font></div>
<div><font face="Calibri" size="2"><span style="font-size:11pt;">@@ -557,6 +557,7 @@ struct amdgpu_ras {</span></font></div>
<div><font face="Calibri" size="2"><span style="font-size:11pt;">         struct mutex page_retirement_lock;</span></font></div>
<div><font face="Calibri" size="2"><span style="font-size:11pt;">         atomic_t page_retirement_req_cnt;</span></font></div>
<div><font face="Calibri" size="2"><span style="font-size:11pt;">         atomic_t poison_creation_count;</span></font></div>
<div><font face="Calibri" size="2"><span style="font-size:11pt;">+       atomic_t poison_consumption_count;</span></font></div>
<div><font face="Calibri" size="2"><span style="font-size:11pt;">         struct mutex page_rsv_lock;</span></font></div>
<div><font face="Calibri" size="2"><span style="font-size:11pt;">         DECLARE_KFIFO(poison_fifo, struct ras_poison_msg, 128);</span></font></div>
<div><font face="Calibri" size="2"><span style="font-size:11pt;">         struct ras_ecc_log_info  umc_ecc_log;</span></font></div>
<div><font face="Calibri" size="2"><span style="font-size:11pt;">diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_umc.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_umc.c</span></font></div>
<div><font face="Calibri" size="2"><span style="font-size:11pt;">index bfc86f1e84e5..983a428eddd4 100644</span></font></div>
<div><font face="Calibri" size="2"><span style="font-size:11pt;">--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_umc.c</span></font></div>
<div><font face="Calibri" size="2"><span style="font-size:11pt;">+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_umc.c</span></font></div>
<div><font face="Calibri" size="2"><span style="font-size:11pt;">@@ -254,6 +254,7 @@ int amdgpu_umc_pasid_poison_handler(struct amdgpu_device *adev,</span></font></div>
<div><font face="Calibri" size="2"><span style="font-size:11pt;">                         if (!ret) {</span></font></div>
<div><font face="Calibri" size="2"><span style="font-size:11pt;"> #endif</span></font></div>
<div><font face="Calibri" size="2"><span style="font-size:11pt;">                                 atomic_inc(&con->page_retirement_req_cnt);</span></font></div>
<div><font face="Calibri" size="2"><span style="font-size:11pt;">+                               atomic_inc(&con->poison_consumption_count);</span></font></div>
<div><font face="Calibri" size="2"><span style="font-size:11pt;">                                 wake_up(&con->page_retirement_wq);</span></font></div>
<div><font face="Calibri" size="2"><span style="font-size:11pt;"> #ifdef HAVE_KFIFO_PUT_NON_POINTER</span></font></div>
<div><font face="Calibri" size="2"><span style="font-size:11pt;">                         }</span></font></div>
<div><font face="Calibri" size="2"><span style="font-size:11pt;">diff --git a/drivers/gpu/drm/amd/amdgpu/umc_v12_0.c b/drivers/gpu/drm/amd/amdgpu/umc_v12_0.c</span></font></div>
<div><font face="Calibri" size="2"><span style="font-size:11pt;">index e590cbdd8de9..69c22bdaed3b 100644</span></font></div>
<div><font face="Calibri" size="2"><span style="font-size:11pt;">--- a/drivers/gpu/drm/amd/amdgpu/umc_v12_0.c</span></font></div>
<div><font face="Calibri" size="2"><span style="font-size:11pt;">+++ b/drivers/gpu/drm/amd/amdgpu/umc_v12_0.c</span></font></div>
<div><font face="Calibri" size="2"><span style="font-size:11pt;">@@ -536,8 +536,11 @@ static int umc_v12_0_update_ecc_status(struct amdgpu_device *adev,</span></font></div>
<div><font face="Calibri" size="2"><span style="font-size:11pt;">         hwid = REG_GET_FIELD(ipid, MCMP1_IPIDT0, HardwareID);</span></font></div>
<div><font face="Calibri" size="2"><span style="font-size:11pt;">         mcatype = REG_GET_FIELD(ipid, MCMP1_IPIDT0, McaType);</span></font></div>
<div><font face="Calibri" size="2"><span style="font-size:11pt;"> </span></font></div>
<div><font face="Calibri" size="2"><span style="font-size:11pt;">-       if ((hwid != MCA_UMC_HWID_V12_0) || (mcatype != MCA_UMC_MCATYPE_V12_0))</span></font></div>
<div><font face="Calibri" size="2"><span style="font-size:11pt;">+       /* The IP block decode of consumption is SMU */</span></font></div>
<div><font face="Calibri" size="2"><span style="font-size:11pt;">+       if ((hwid != MCA_UMC_HWID_V12_0) || (mcatype != MCA_UMC_MCATYPE_V12_0)) {</span></font></div>
<div><font face="Calibri" size="2"><span style="font-size:11pt;">+               con->umc_ecc_log.consumption_q_count++;</span></font></div>
<div><font face="Calibri" size="2"><span style="font-size:11pt;">                 return 0;</span></font></div>
<div><font face="Calibri" size="2"><span style="font-size:11pt;">+       }</span></font></div>
<div><font face="Calibri" size="2"><span style="font-size:11pt;"> </span></font></div>
<div><font face="Calibri" size="2"><span style="font-size:11pt;">         if (!status)</span></font></div>
<div><font face="Calibri" size="2"><span style="font-size:11pt;">                 return 0;</span></font></div>
<div><font face="Calibri" size="2"><span style="font-size:11pt;">@@ -582,7 +585,7 @@ static int umc_v12_0_update_ecc_status(struct amdgpu_device *adev,</span></font></div>
<div><font face="Calibri" size="2"><span style="font-size:11pt;">         ret = amdgpu_umc_logs_ecc_err(adev, &con->umc_ecc_log.de_page_tree, ecc_err);</span></font></div>
<div><font face="Calibri" size="2"><span style="font-size:11pt;">         if (ret) {</span></font></div>
<div><font face="Calibri" size="2"><span style="font-size:11pt;">                 if (ret == -EEXIST)</span></font></div>
<div><font face="Calibri" size="2"><span style="font-size:11pt;">-                       con->umc_ecc_log.de_queried_count++;</span></font></div>
<div><font face="Calibri" size="2"><span style="font-size:11pt;">+                       con->umc_ecc_log.creation_de_count++;</span></font></div>
<div><font face="Calibri" size="2"><span style="font-size:11pt;">                 else</span></font></div>
<div><font face="Calibri" size="2"><span style="font-size:11pt;">                         dev_err(adev->dev, "Fail to log ecc error! ret:%d\n", ret);</span></font></div>
<div><font face="Calibri" size="2"><span style="font-size:11pt;"> </span></font></div>
<div><font face="Calibri" size="2"><span style="font-size:11pt;">@@ -590,7 +593,7 @@ static int umc_v12_0_update_ecc_status(struct amdgpu_device *adev,</span></font></div>
<div><font face="Calibri" size="2"><span style="font-size:11pt;">                 return ret;</span></font></div>
<div><font face="Calibri" size="2"><span style="font-size:11pt;">         }</span></font></div>
<div><font face="Calibri" size="2"><span style="font-size:11pt;"> </span></font></div>
<div><font face="Calibri" size="2"><span style="font-size:11pt;">-       con->umc_ecc_log.de_queried_count++;</span></font></div>
<div><font face="Calibri" size="2"><span style="font-size:11pt;">+       con->umc_ecc_log.creation_de_count++;</span></font></div>
<div><font face="Calibri" size="2"><span style="font-size:11pt;"> </span></font></div>
<div><font face="Calibri" size="2"><span style="font-size:11pt;">         memset(page_pfn, 0, sizeof(page_pfn));</span></font></div>
<div><font face="Calibri" size="2"><span style="font-size:11pt;">         count = amdgpu_umc_lookup_bad_pages_in_a_row(adev,</span></font></div>
<div><font face="Calibri" size="2"><span style="font-size:11pt;">--</span></font></div>
<div><font face="Calibri" size="2"><span style="font-size:11pt;">2.34.1</span></font></div>
<div><font face="Calibri" size="2"><span style="font-size:11pt;"> </span></font></div>
</span></font>
</body>
</html>