summaryrefslogtreecommitdiffstats
path: root/kernel/gsp_phys_boot.h
diff options
context:
space:
mode:
authorArthur Hanson Rasmusson <arthur@vgpu.io>2026-10-20 06:04:22 -0400
committerArthur Hanson Rasmusson <arthur@vgpu.io>2026-10-20 06:04:22 -0400
commit410532fb29d53d307cdd55fa0da5cf6f1d2faace (patch)
tree113e4985615e337284bbb41f026bbc6bfeda090e /kernel/gsp_phys_boot.h
parent720d3f5fa8b8bdbb947826927ae907cfc7d0ed56 (diff)
downloadopen-iov-410532fb29d53d307cdd55fa0da5cf6f1d2faace.tar.gz
open-iov-410532fb29d53d307cdd55fa0da5cf6f1d2faace.zip
vgsp: honor the C56F host-semaphore acquire (fix the streams2 readback-before-scale class)
Core CUDA starts each compute-channel push with a C56F SEM_EXECUTE acquire method (five words [ADDR_LO][ADDR_HI][PAYLOAD_LO][PAYLOAD_HI] [EXECUTE]; op 0/2/3/4/5 = acquire/equal, strict GEQ, circular GEQ, AND, NOR). The decoder handled only op 1 (release) and 6 (reduction), so every wait was ignored and a push's work could run ahead of the dependency it waits on. Observed on streams2: the D2H readback push carries ACQ_CIRC_GEQ on the channel progress counter (0x20400ffd0 >= 4, the 4th push = the scale launch); the readback executed before the scale, and the client verified the pre-scale buffer (bad=32767, c2 = a2+b2 without the x2). Now the decoder records the acquire and svc_run_ops honors it before running any of the push's work: satisfied (read + circular/equal/GEQ compare) -> proceed; unsatisfied -> set op_tr_pending, so the entry is held and its release withheld (bounded by SVC_OPDEF_HOLD_MS, loud) and the re-decode runs the work once the counter advances. Unreadable semaphore: fail-open (pre-r336 behaviour). New stat wait=held/pass.
Diffstat (limited to 'kernel/gsp_phys_boot.h')
0 files changed, 0 insertions, 0 deletions