diff options
| author | Arthur Hanson Rasmusson <arthur@vgpu.io> | 2026-10-26 17:23:05 -0400 |
|---|---|---|
| committer | Arthur Hanson Rasmusson <arthur@vgpu.io> | 2026-10-26 17:23:05 -0400 |
| commit | 34e611f4142cdd9e62ffff005fd968a764922b14 (patch) | |
| tree | e256549d80d893bd1d6a9f3d1ed25fb0e62fbbe0 /kernel | |
| parent | 5409c02a42d037f1e15609f6e9f7b43535bf8e9c (diff) | |
| download | open-iov-34e611f4142cdd9e62ffff005fd968a764922b14.tar.gz open-iov-34e611f4142cdd9e62ffff005fd968a764922b14.zip | |
vgsp r801: gsp_phys_gr_min_data=0 is an explicit bypass (the no-external-data launch class), not a clamp to 1
The Vulkan compute launch's single QMD pointer pair names its own QMD
window and its params are scalars (0.2/640/480), so n_data=0 is correct
for it; the bare n_data>=min threshold refused it as 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 (Oops at
gsp_phys_backend_guest_gr_submit+0x4394). Default stays 16; 0 is opt-in
for the egg-break test that forwards the launch to the real engine so
the copy-out can carry pixels back. Proper launch-internal predicate
next.
Diffstat (limited to 'kernel')
| -rw-r--r-- | kernel/gsp_phys_booter.c | 17 |
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; |
