On Tue, Nov 18, 2025 at 09:09:58PM +0100, Michal Wajdeczko wrote:
On 11/18/2025 8:50 PM, Lucas De Marchi wrote:
On Tue, Nov 18, 2025 at 08:29:09PM +0100, Michal Wajdeczko wrote:
On 11/18/2025 8:08 PM, Lucas De Marchi wrote:
Add missing stack_depot_init() call when CONFIG_DRM_XE_DEBUG_GUC is enabled to fix the following call stack:
[] BUG: kernel NULL pointer dereference, address: 0000000000000000 [] Workqueue: drm_sched_run_job_work [gpu_sched] [] RIP: 0010:stack_depot_save_flags+0x172/0x870 [] Call Trace: [] <TASK> [] fast_req_track+0x58/0xb0 [xe]
Fixes: 16b7e65d299d ("drm/xe/guc: Track FAST_REQ H2Gs to report where errors came from") Tested-by: Sagar Ghuge sagar.ghuge@intel.com Cc: stable@vger.kernel.org # v6.17+ Signed-off-by: Lucas De Marchi lucas.demarchi@intel.com
drivers/gpu/drm/xe/xe_guc_ct.c | 3 +++ 1 file changed, 3 insertions(+)
diff --git a/drivers/gpu/drm/xe/xe_guc_ct.c b/drivers/gpu/drm/xe/xe_guc_ct.c index 2697d711adb2b..07ae0d601910e 100644 --- a/drivers/gpu/drm/xe/xe_guc_ct.c +++ b/drivers/gpu/drm/xe/xe_guc_ct.c @@ -236,6 +236,9 @@ int xe_guc_ct_init_noalloc(struct xe_guc_ct *ct) #if IS_ENABLED(CONFIG_DRM_XE_DEBUG) spin_lock_init(&ct->dead.lock); INIT_WORK(&ct->dead.worker, ct_dead_worker_func); +#if IS_ENABLED(CONFIG_DRM_XE_DEBUG_GUC) + stack_depot_init(); +#endif
shouldn't we just update our Kconfig by adding in DRM_XE_DEBUG_GUC
select STACKDEPOT_ALWAYS_INIT
didn't know about that, thanks.... but that doesn't seem suitable for a something that will be a module that may or may not get loaded depending on hw configuration.
true in general, but here we need stackdepot for the DEBUG_GUC which likely will selected only by someone who already has the right platform and plans to load the xe
conversely, if we have DRM_XE_DEBUG_GUC set there's no downside in calling stack_depot_init(). Any performance penalty argument is gone by "you are using DRM_XE_DEBUG_GUC".
$ git grep "select STACKDEPOT_ALWAYS_INIT" lib/Kconfig.kasan: select STACKDEPOT_ALWAYS_INIT lib/Kconfig.kmsan: select STACKDEPOT_ALWAYS_INIT mm/Kconfig.debug: select STACKDEPOT_ALWAYS_INIT if STACKTRACE_SUPPORT mm/Kconfig.debug: select STACKDEPOT_ALWAYS_INIT if !DEBUG_KMEMLEAK_DEFAULT_OFF
The only users right now of STACKDEPOT_ALWAYS_INIT make sense as they are core ones. There's not a single driver using STACKDEPOT_ALWAYS_INIT. drm and ref_tracker, on the other hand use stack_depot_init()
Lucas De Marchi