diff options
| author | Arthur Hanson Rasmusson <arthur@vgpu.io> | 2026-10-06 23:05:02 -0400 |
|---|---|---|
| committer | Arthur Hanson Rasmusson <arthur@vgpu.io> | 2026-10-06 23:05:02 -0400 |
| commit | f255addeec6dbb12bd7bbf2f0e1d1cec76ff2ecc (patch) | |
| tree | 9b620260939830d111675ce4cda04012e01f3350 /kernel/gsp_phys_gpu.c | |
| parent | 8577a4d51ee1854f100b9eac0406efb8dedab5db (diff) | |
| download | open-iov-f255addeec6dbb12bd7bbf2f0e1d1cec76ff2ecc.tar.gz open-iov-f255addeec6dbb12bd7bbf2f0e1d1cec76ff2ecc.zip | |
vgsp: mode 35 m64 - forced module-sem release discriminant + fallback poll fix + post-mortem dumps
m63 (E2 lane enable) got the forwarded QMD into SKED: CWD_TABLE_0 left the
cold value, CWD_TABLE_1 carried the QMD id (0x1070), SKED_ACTIVITY fired,
FECS_CURRENT_CTX showed V7's instance with VALID=1 - but the release write
never landed (relw=5) and no engine fault is logged. m64 discriminates
'engine completed but the shadow release was lost' from 'engine never
completed': param gsp_phys_rmcall_gr_rel_mod=1 forces QMD release0 to the
module window-0 semaphore with a distinct payload (0x600df00d) and polls the
SEM chunk. Also fixes the latent fallback (it set no poll source, so a
module-sem release could never complete) and dumps the full QMD w2..w15 +
the guest release page words in the post-mortem.
Diffstat (limited to 'kernel/gsp_phys_gpu.c')
| -rw-r--r-- | kernel/gsp_phys_gpu.c | 22 |
1 files changed, 22 insertions, 0 deletions
diff --git a/kernel/gsp_phys_gpu.c b/kernel/gsp_phys_gpu.c index 974100a..f323c6c 100644 --- a/kernel/gsp_phys_gpu.c +++ b/kernel/gsp_phys_gpu.c @@ -704,6 +704,28 @@ int gsp_phys_rmcall_gr_qmdwin_value(void) EXPORT_SYMBOL_GPL(gsp_phys_rmcall_gr_qmdwin_value); /* + * m64 forced module-semaphore release (gsp_phys_rmcall_gr_rel_mod; default 0). + * When set, a forwarded GR launch ignores the resolved guest release page and + * points QMD release0 at the module window-0 semaphore VA + * (GSP_PHYS_RMCALL_VA_SEM), which the host polls at the SEM chunk's host VA. + * Discriminant for "engine completed but the shadow release write was lost" + * vs "engine never completed": with the module release, a completed QMD is + * always observable. Also makes the existing module-release fallback + * observable (it previously set no poll source, so it could never complete). + */ +static int gsp_phys_rmcall_gr_rel_mod_param; +module_param_named(gsp_phys_rmcall_gr_rel_mod, + gsp_phys_rmcall_gr_rel_mod_param, int, 0644); +MODULE_PARM_DESC(gsp_phys_rmcall_gr_rel_mod, + "Force the forwarded GR QMD release0 to the module semaphore (default 0; 1 = m64 engine-completion discriminant)"); + +int gsp_phys_rmcall_gr_rel_mod_value(void) +{ + return gsp_phys_rmcall_gr_rel_mod_param; +} +EXPORT_SYMBOL_GPL(gsp_phys_rmcall_gr_rel_mod_value); + +/* * Ladder VAS ownership selector (gsp_phys_rmcall_vas_shared; default 0). * The H1 GR promote wall is a direct consequence of the ladder's * externally-owned FERMI_VASPACE_A: with IS_EXTERNALLY_OWNED the RM treats |
