diff options
Diffstat (limited to 'kernel')
| -rw-r--r-- | kernel/gsp_display_engine.c | 8 |
1 files changed, 7 insertions, 1 deletions
diff --git a/kernel/gsp_display_engine.c b/kernel/gsp_display_engine.c index c7c9dca..a6dd11c 100644 --- a/kernel/gsp_display_engine.c +++ b/kernel/gsp_display_engine.c @@ -1103,8 +1103,14 @@ static void gsp_disp_method(struct nv_vgpu_device *vgpu, * NV01_EVENT on the channel object and the real engine (via * RM) signals it when the update's notifier is written. This * is what completes nvidia-drm flips and X GLX syncs. + * + * r1666: only a REAL FINISHED transition may raise the event. + * Posting on every UPDATE (armed=0 / no notifier write) made + * the DDX's NVKMS FLIP_OCCURRED handler (nvidia_drv.so + * 0xaee70) reap stale notifier slots and hit its fixed-point + * layer retry (Xorg spun there at 100 % in r1665). */ - if (gsp_disp_events && ch->h_object) { + if (gsp_disp_events && ch->h_object && wrote) { int rc = gsp_rm_post_channel_event(vgpu, ch->h_object); if (!rc) { |
