diff options
Diffstat (limited to 'kernel/gsp_sema_service.c')
| -rw-r--r-- | kernel/gsp_sema_service.c | 26 |
1 files changed, 26 insertions, 0 deletions
diff --git a/kernel/gsp_sema_service.c b/kernel/gsp_sema_service.c index f758218..f98fa98 100644 --- a/kernel/gsp_sema_service.c +++ b/kernel/gsp_sema_service.c @@ -40791,6 +40791,32 @@ static void svc_pump_channels(struct nv_vgpu_device *vgpu) if (ch->engine_type && ch->notified) svc_ce_init_rel_author(vgpu, ch, true, "userd-miss"); + /* + * r1663: the X DDX's kick channel has no + * discoverable USERD (2-entry ring at a page + * end, FB userd never written), yet its ring + * PA resolves and entry 0 carries the + * class2d SET_NOTIFY target. Capture it from + * the ring head before stalling so the kick + * lane can author the completion the X + * server waits on. + */ + if (!ch->engine_type && !ch->notify2d_va && + ch->h_object >= 0xbfef0000u && + ch->h_object <= 0xbfef00ffu && ring_pa) { + svc_kick_capture_arm(vgpu, ch, ring_pa, + ring_ap, 0); + /* + * The captured target is the class2d + * completion word; author the zeroed + * NvNotification the guest waits on + * (the ring walk that would carry the + * NOTIFY never runs without a USERD). + */ + if (ch->notify2d_va) + (void)svc_notify2d_write(vgpu, + ch, true); + } stalled = true; continue; } |
