summaryrefslogtreecommitdiffstats
path: root/kernel/gsp_phys_booter.c
diff options
context:
space:
mode:
Diffstat (limited to 'kernel/gsp_phys_booter.c')
-rw-r--r--kernel/gsp_phys_booter.c13
1 files changed, 12 insertions, 1 deletions
diff --git a/kernel/gsp_phys_booter.c b/kernel/gsp_phys_booter.c
index 534a443..85bdb89 100644
--- a/kernel/gsp_phys_booter.c
+++ b/kernel/gsp_phys_booter.c
@@ -19665,7 +19665,18 @@ int gsp_phys_backend_guest_gr_submit(const struct gsp_phys_gr_submit *req,
pg_va = pg->guest_va & ~(u64)(GSP_PHYS_PAGE_SIZE - 1);
pr_info("vgsp-gr: page[%u] va=0x%llx hpa=0x%llx qmd_word=%u\n",
i, pg->guest_va, pg->hpa, pg->qmd_word);
- if (pg->hpa) {
+ /*
+ * SESSION 149 R15 (M2-S1): with the window-0 shadow path
+ * enabled, force the program page (QMD word 48) OFF the
+ * post-commit Tier-1 install. r801b proved that install is
+ * ineffective for a late GR page (the engine kept reading
+ * the empty guest page: CODEHASH h0=0, FAULT-CAP
+ * code_src=guest-hpa); skipping it lets the page fall to
+ * the win0 shadow copy + w48/49 rewrite line, which is the
+ * proven one. Every other page keeps its Tier-1 route.
+ */
+ if (pg->hpa && !(pg->qmd_word == 48u &&
+ gsp_phys_rmcall_gr_shadow_win0_value())) {
ret = gsp_phys_rmcall_gr_map_va_locked(bar0, pg_va,
pg->hpa, epoch);
if (!ret) {