summaryrefslogtreecommitdiffstats
path: root/kernel/gsp_rm_emulation.c
diff options
context:
space:
mode:
authorArthur Hanson Rasmusson <arthur@vgpu.io>2026-11-12 15:39:01 -0500
committerArthur Hanson Rasmusson <arthur@vgpu.io>2026-11-12 15:39:01 -0500
commit8dce7e59027e8d07ccdf4aa6ac3da02b6e9e9fd9 (patch)
tree71986b44cac527910dd96b3518658e6348a542bf /kernel/gsp_rm_emulation.c
parent10c043a669fed5340eb953a17e341a35a4bce1b5 (diff)
downloadopen-iov-8dce7e59027e8d07ccdf4aa6ac3da02b6e9e9fd9.tar.gz
open-iov-8dce7e59027e8d07ccdf4aa6ac3da02b6e9e9fd9.zip
vgsp: accept wrapped FB USERD latches and dedup direct channel event postsHEADmaster
Diffstat (limited to 'kernel/gsp_rm_emulation.c')
-rw-r--r--kernel/gsp_rm_emulation.c16
1 files changed, 16 insertions, 0 deletions
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(),