diff options
| author | Arthur Hanson Rasmusson <arthur@vgpu.io> | 2026-10-12 13:25:31 -0400 |
|---|---|---|
| committer | Arthur Hanson Rasmusson <arthur@vgpu.io> | 2026-10-12 13:25:31 -0400 |
| commit | b1075d754f6547b57fc4bdc3e1fc542001cbb981 (patch) | |
| tree | 1b059a39488c9fb8a830ab41c9262567a143b1d8 | |
| parent | de595dc64d8e3a01a95282bacc5bc987510d7c5e (diff) | |
| download | open-iov-b1075d754f6547b57fc4bdc3e1fc542001cbb981.tar.gz open-iov-b1075d754f6547b57fc4bdc3e1fc542001cbb981.zip | |
vgsp-sema: persist the GR data-arg hold window across pump passes
The pump works on a snapshot copy of the channel table; without the
end-of-pass write-back the hold window was re-armed every pass and a
launch whose argument pointers never translate was never consumed (r122:
smiley's launch held forever). Persist gr_hold_until/gr_hold_idx so the
hold is exactly one bounded window per entry, then the entry is consumed
as before.
| -rw-r--r-- | kernel/gsp_sema_service.c | 8 |
1 files changed, 8 insertions, 0 deletions
diff --git a/kernel/gsp_sema_service.c b/kernel/gsp_sema_service.c index 4bed8ab..9ab609a 100644 --- a/kernel/gsp_sema_service.c +++ b/kernel/gsp_sema_service.c @@ -14869,6 +14869,14 @@ static void svc_pump_channels(struct nv_vgpu_device *vgpu) svc.chan[k].unread_idx = ch->unread_idx; svc.chan[k].unread_until = ch->unread_until; svc.chan[k].unread_ipin_pa = ch->unread_ipin_pa; + /* + * m150: the GR data-arg hold window is snapshot + * state too; without the write-back every pass + * would re-arm it and a permanently unresolved + * launch would never be consumed. + */ + svc.chan[k].gr_hold_until = ch->gr_hold_until; + svc.chan[k].gr_hold_idx = ch->gr_hold_idx; svc.chan[k].pushpg_va = ch->pushpg_va; svc.chan[k].pushpg_n = ch->pushpg_n; svc.chan[k].content_max = ch->content_max; |
