summaryrefslogtreecommitdiffstats
path: root/kernel/gsp_phys_booter.c
diff options
context:
space:
mode:
authorArthur Hanson Rasmusson <arthur@vgpu.io>2026-10-07 17:40:15 -0400
committerArthur Hanson Rasmusson <arthur@vgpu.io>2026-10-07 17:40:15 -0400
commit39609c58684923c180b2de6644deda147d56dfd0 (patch)
tree91a2338898d0edae2e488c48f742a510a757ad55 /kernel/gsp_phys_booter.c
parent2f7ae2edca2d13f863b8c1435e544182664c007f (diff)
downloadopen-iov-39609c58684923c180b2de6644deda147d56dfd0.tar.gz
open-iov-39609c58684923c180b2de6644deda147d56dfd0.zip
vgsp: m124 - reset the window-0 shadow slot cursor per launch (second launch collided with the bounce window)
Diffstat (limited to 'kernel/gsp_phys_booter.c')
-rw-r--r--kernel/gsp_phys_booter.c11
1 files changed, 11 insertions, 0 deletions
diff --git a/kernel/gsp_phys_booter.c b/kernel/gsp_phys_booter.c
index 39c8a3a..8fd5d5b 100644
--- a/kernel/gsp_phys_booter.c
+++ b/kernel/gsp_phys_booter.c
@@ -16485,6 +16485,17 @@ int gsp_phys_backend_guest_gr_submit(const struct gsp_phys_gr_submit *req,
gsp_phys_gr_submitted++;
gsp_phys_gr_override_apply_param();
+ /*
+ * m124: reset the window-0 shadow slot cursor per launch. The cursor
+ * was only initialized once at boot, so a second forwarded launch in
+ * the same boot (e.g. the guest's vadd after the mail kernel) copied
+ * its param/program/bank pages into slots 0x110+ - the pre-commit
+ * BOUNCE window - and the same launch's data copy-in then overwrote
+ * the program page (silent corruption; no launch can survive it).
+ * The win0 PTEs are planted once at stage 3; reusing the same VAs
+ * with fresh content is the proven pattern.
+ */
+ boot_stage.rmcall_gr_shadow_win0_used = 0;
mutex_lock(&gsp_phys_rm_lock);
if (!gsp_phys_backend_gr_ready()) {
mutex_unlock(&gsp_phys_rm_lock);