From 8dce7e59027e8d07ccdf4aa6ac3da02b6e9e9fd9 Mon Sep 17 00:00:00 2001 From: Arthur Hanson Rasmusson Date: Thu, 12 Nov 2026 15:39:01 -0500 Subject: vgsp: accept wrapped FB USERD latches and dedup direct channel event posts --- kernel/gsp_rm_emulation.c | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) (limited to 'kernel/gsp_rm_emulation.c') diff --git a/kernel/gsp_rm_emulation.c b/kernel/gsp_rm_emulation.c index 4420810..0cef9e7 100644 --- a/kernel/gsp_rm_emulation.c +++ b/kernel/gsp_rm_emulation.c @@ -903,6 +903,22 @@ static int gsp_rm_post_channel_event_common(struct nv_vgpu_device *vgpu, if (!rm->events[i].valid || rm->events[i].h_src != h_src) continue; + /* + * r1780: the directly-associated post is the flood path. The + * X channel's completion edge fires per consumed submission and + * the 48/s burst cap then drops the wake-ups a blocked client is + * waiting for (live: "event burst capped (48/48), dropped + * total=3000", DDX "Failed to idle DMA"). A re-post within + * GSPRM_EVENT_HINT_DEDUP adds no wake-up - the client re-reads + * channel state on any event and the 0.5 s hint re-posts late + * waiters - so apply the dedup the fallback loop already uses. + */ + if (!force && + time_before(jiffies, + rm->events[i].last_post + + GSPRM_EVENT_HINT_DEDUP)) + continue; + gsp_rm_fill_ev_payload(rm, i, payload); { int rc = gsp_rm_send_flags(ctx, gsp_rm_ev_function(), -- cgit v1.2.3