The id is claimed before the banks are read, so a poll that ends up
logging nothing still burns one and leaves a gap that every reader of
the log then has to walk over. Claim it when the first record of the
batch is about to go in.

Signed-off-by: Xiang Liu <[email protected]>
---
 drivers/gpu/drm/amd/ras/core/aca.c | 8 ++++----
 1 file changed, 4 insertions(+), 4 deletions(-)

diff --git a/drivers/gpu/drm/amd/ras/core/aca.c 
b/drivers/gpu/drm/amd/ras/core/aca.c
index 881681ea9f3f..4289e968d331 100644
--- a/drivers/gpu/drm/amd/ras/core/aca.c
+++ b/drivers/gpu/drm/amd/ras/core/aca.c
@@ -394,10 +394,6 @@ static int aca_banks_update(struct ras_core_context 
*ras_core,
        if (!count)
                goto out;
 
-       /* Only one MCE error is logged for each batch */
-       if (ecc_type != RAS_ERR_TYPE__MCE)
-               batch_tag = ras_log_ring_create_batch_tag(ras_core);
-
        for (i = 0; i < count; i++) {
                memset(&bank, 0, sizeof(bank));
                ret = aca_dump_bank(ras_core, ecc_type, i, &bank);
@@ -420,6 +416,10 @@ static int aca_banks_update(struct ras_core_context 
*ras_core,
 
                bank.seq_no = aca_get_bank_seqno(ras_core, ecc_type, aca_blk, 
&bank_ecc);
 
+               /* Only one MCE error is logged for each batch */
+               if (ecc_type != RAS_ERR_TYPE__MCE && !batch_tag)
+                       batch_tag = ras_log_ring_create_batch_tag(ras_core);
+
                aca_log_bank_data(ras_core, &bank, &bank_ecc, batch_tag);
                aca_bank_log(ras_core, i, count, &bank, &bank_ecc);
 
-- 
2.34.1

Reply via email to