summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--kernel/gsp_phys_booter.c17
1 files changed, 14 insertions, 3 deletions
diff --git a/kernel/gsp_phys_booter.c b/kernel/gsp_phys_booter.c
index f7d1226..2f3202e 100644
--- a/kernel/gsp_phys_booter.c
+++ b/kernel/gsp_phys_booter.c
@@ -17701,14 +17701,25 @@ static u32 gsp_phys_gr_data_bi(u64 reloc_va)
static unsigned int gsp_phys_gr_min_data_param = GSP_PHYS_GR_MIN_DATA_RECS;
module_param_named(gsp_phys_gr_min_data, gsp_phys_gr_min_data_param, uint, 0644);
MODULE_PARM_DESC(gsp_phys_gr_min_data,
- "GR submit minimum data records (degenerate-set refusal threshold, clamped 1..4096; default 16)");
+ "GR submit minimum data records (degenerate-set refusal threshold, 0..4096; 0 = explicit bypass for the no-external-data launch class; default 16)");
+/*
+ * r801 (SESSION 143): 0 is an explicit BYPASS, not a clamp to 1. The
+ * Vulkan launch's single QMD pointer pair names its own QMD window and its
+ * params are scalars, so the launch has no external data by construction;
+ * the bare n_data>=min gate wrongly classifies it degenerate. The bypass is
+ * safe now that gsp_phys_chunk_page_va answers NULL for an unallocated
+ * chunk (r800): before that guard the empty-set post-mortem print
+ * dereferenced a garbage pointer and oopsed at
+ * gsp_phys_backend_guest_gr_submit+0x4394. The proper predicate (all
+ * candidates launch-internal-filtered, none unresolved => not degenerate)
+ * replaces the bare threshold next; until then 0 stays an explicit,
+ * opt-in debug/test value and the default remains 16.
+ */
static unsigned int gsp_phys_gr_min_data_value(void)
{
unsigned int v = READ_ONCE(gsp_phys_gr_min_data_param);
- if (!v)
- v = 1;
if (v > 4096)
v = 4096;
return v;