Linux kernel -stable discussions
 help / color / mirror / Atom feed
From: Lancelot SIX <lancelot.six@amd.com>
To: <stable@vger.kernel.org>
Cc: Lancelot SIX <lancelot.six@amd.com>,
	Jay Cornwall <jay.cornwall@amd.com>,
	Alex Deucher <alexander.deucher@amd.com>
Subject: [PATCH] drm/amdkfd: Ensure consistent barrier state saved in gfx12 trap handler
Date: Fri, 21 Feb 2025 18:09:28 +0000	[thread overview]
Message-ID: <20250221180928.466632-1-lancelot.six@amd.com> (raw)
In-Reply-To: <2025021802-scrimmage-oppressor-8e61@gregkh>

It is possible for some waves in a workgroup to finish their save
sequence before the group leader has had time to capture the workgroup
barrier state.  When this happens, having those waves exit do impact the
barrier state.  As a consequence, the state captured by the group leader
is invalid, and is eventually incorrectly restored.

This patch proposes to have all waves in a workgroup wait for each other
at the end of their save sequence (just before calling s_endpgm_saved).

This is a cherry-pick.  The cwsr_trap_handler.h part of the original
part was valid and applied cleanly.  The part of the patch that applied
to cwsr_trap_handler_gfx12.asm did not apply cleanly since
80ae55e6115ef "drm/amdkfd: Move gfx12 trap handler to separate file" is
not part of this branch.  Instead, I ported the change to
cwsr_trap_handler_gfx10.asm, and guarded it with "ASIC_FAMILY >=
CHIP_GFX12".

Signed-off-by: Lancelot SIX <lancelot.six@amd.com>
Reviewed-by: Jay Cornwall <jay.cornwall@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
Cc: stable@vger.kernel.org # 6.12.x
(cherry picked from commit d584198a6fe4c51f4aa88ad72f258f8961a0f11c)
Signed-off-by: Lancelot SIX <lancelot.six@amd.com>
---
 drivers/gpu/drm/amd/amdkfd/cwsr_trap_handler.h         | 3 ++-
 drivers/gpu/drm/amd/amdkfd/cwsr_trap_handler_gfx10.asm | 6 ++++++
 2 files changed, 8 insertions(+), 1 deletion(-)

diff --git a/drivers/gpu/drm/amd/amdkfd/cwsr_trap_handler.h b/drivers/gpu/drm/amd/amdkfd/cwsr_trap_handler.h
index 02f7ba8c93cd4..7062f12b5b751 100644
--- a/drivers/gpu/drm/amd/amdkfd/cwsr_trap_handler.h
+++ b/drivers/gpu/drm/amd/amdkfd/cwsr_trap_handler.h
@@ -4117,7 +4117,8 @@ static const uint32_t cwsr_trap_gfx12_hex[] = {
 	0x0000ffff, 0x8bfe7e7e,
 	0x8bea6a6a, 0xb97af804,
 	0xbe804ec2, 0xbf94fffe,
-	0xbe804a6c, 0xbfb10000,
+	0xbe804a6c, 0xbe804ec2,
+	0xbf94fffe, 0xbfb10000,
 	0xbf9f0000, 0xbf9f0000,
 	0xbf9f0000, 0xbf9f0000,
 	0xbf9f0000, 0x00000000,
diff --git a/drivers/gpu/drm/amd/amdkfd/cwsr_trap_handler_gfx10.asm b/drivers/gpu/drm/amd/amdkfd/cwsr_trap_handler_gfx10.asm
index 44772eec9ef4d..8fd7f17df494c 100644
--- a/drivers/gpu/drm/amd/amdkfd/cwsr_trap_handler_gfx10.asm
+++ b/drivers/gpu/drm/amd/amdkfd/cwsr_trap_handler_gfx10.asm
@@ -1463,6 +1463,12 @@ L_RETURN_WITHOUT_PRIV:
 	s_rfe_b64	s_restore_pc_lo						//Return to the main shader program and resume execution
 
 L_END_PGM:
+#if ASIC_FAMILY >= CHIP_GFX12
+	// Make sure that no wave of the workgroup can exit the trap handler
+	// before the workgroup barrier state is saved.
+	s_barrier_signal	-2
+	s_barrier_wait	-2
+#endif
 	s_endpgm_saved
 end
 

base-commit: 4e3ac4150cbd02585dc5cd1b4a25b8519a57c6a2
-- 
2.43.0


  reply	other threads:[~2025-02-21 18:09 UTC|newest]

Thread overview: 7+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2025-02-18 11:26 FAILED: patch "[PATCH] drm/amdkfd: Ensure consistent barrier state saved in gfx12" failed to apply to 6.13-stable tree gregkh
2025-02-21 18:09 ` Lancelot SIX [this message]
2025-02-22 15:53   ` [PATCH] drm/amdkfd: Ensure consistent barrier state saved in gfx12 trap handler Sasha Levin
2025-02-24 14:04   ` Greg KH
  -- strict thread matches above, loose matches on Subject: below --
2025-02-18 11:26 FAILED: patch "[PATCH] drm/amdkfd: Ensure consistent barrier state saved in gfx12" failed to apply to 6.12-stable tree gregkh
2025-02-21 18:08 ` [PATCH] drm/amdkfd: Ensure consistent barrier state saved in gfx12 trap handler Lancelot SIX
2025-02-22 15:53   ` Sasha Levin
2025-02-24 14:04   ` Greg KH

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20250221180928.466632-1-lancelot.six@amd.com \
    --to=lancelot.six@amd.com \
    --cc=alexander.deucher@amd.com \
    --cc=jay.cornwall@amd.com \
    --cc=stable@vger.kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox