summaryrefslogtreecommitdiffstats
path: root/kernel/gsp_rm_emulation.h
diff options
context:
space:
mode:
Diffstat (limited to 'kernel/gsp_rm_emulation.h')
-rw-r--r--kernel/gsp_rm_emulation.h30
1 files changed, 29 insertions, 1 deletions
diff --git a/kernel/gsp_rm_emulation.h b/kernel/gsp_rm_emulation.h
index e464809..a4b1afd 100644
--- a/kernel/gsp_rm_emulation.h
+++ b/kernel/gsp_rm_emulation.h
@@ -45,6 +45,7 @@ struct gsp_emu_context;
#define GSPRM_RPC_FUNC_GSP_RM_CONTROL 76
#define GSPRM_RPC_FUNC_GSP_RM_ALLOC 103
#define GSPRM_RPC_FUNC_FREE 10
+#define GSPRM_RPC_FUNC_DUP_OBJECT 21
#define GSPRM_RPC_FUNC_UNLOADING_GUEST_DRIVER 47
#define GSPRM_RPC_FUNC_UPDATE_BAR_PDE 70
#define GSPRM_RPC_EVENT_POST_EVENT 0x1003
@@ -197,17 +198,44 @@ struct gsp_rm_emu {
u32 notify_index;
u32 data;
bool valid;
+ unsigned long last_post; /* m171: jiffies of the last posted record */
} events[GSPRM_MAX_EVENTS];
u32 events_n;
u64 events_posted;
u64 events_dropped;
- u32 event_burst; /* event records written since the last reply */
+ u32 event_burst; /* event records written in the current window */
+ unsigned long event_burst_at; /* m171: burst window start (time-based reset) */
};
+/*
+ * r576 DIAG: per-boot witness budget for GSP event-post payloads (default 0
+ * = off). Nonzero logs every EVENT_POST_EVENT record actually sent (slot,
+ * hClient, hEvent, notifyIndex, data, send rc) and the sentinel case of a
+ * post_all_events call that found nothing postable - the evidence needed
+ * when a client parks waiting for a completion wake-up that never arrives.
+ */
+extern unsigned gsp_rm_ev_log_max;
+
+/*
+ * r577 experiment knobs (runtime-writable; default 0 = legacy). See the
+ * definitions in gsp_rm_emulation.c: event record sequence, bNotifyList,
+ * hClient override - the A/B space for the guest-RM event drop.
+ */
+extern unsigned gsp_rm_ev_seq;
+extern unsigned gsp_rm_ev_nlist;
+extern unsigned gsp_rm_ev_cl;
+extern unsigned gsp_rm_ev_func;
+
int gsp_rm_emu_init(struct nv_vgpu_device *vgpu, struct gsp_emu_context *ctx);
void gsp_rm_emu_fini(struct gsp_emu_context *ctx);
int gsp_rm_post_channel_event(struct nv_vgpu_device *vgpu, u32 h_src);
int gsp_rm_force_post(struct nv_vgpu_device *vgpu, u32 idx);
+/*
+ * r623: deliver a synthetic OS_ERROR_LOG (0x1006) record to the guest's RM
+ * queue (the engine-fault report a real GSP sends). Debug/experiment only.
+ */
+int gsp_rm_send_os_error_log(struct nv_vgpu_device *vgpu, u32 except_type,
+ u32 runlist_id, u32 chid, const char *engine);
int gsp_rm_post_all_events(struct nv_vgpu_device *vgpu);
int gsp_rm_dump_state(struct nv_vgpu_device *vgpu);
int gsp_rm_scan_guest_ram(struct nv_vgpu_device *vgpu, u64 needle,