summaryrefslogtreecommitdiffstats
path: root/kernel/gsp_display_engine.c
diff options
context:
space:
mode:
authorArthur Hanson Rasmusson <arthur@vgpu.io>2026-11-07 22:39:59 -0500
committerArthur Hanson Rasmusson <arthur@vgpu.io>2026-11-07 22:39:59 -0500
commitd2524210912b934edab92e4412f6f7680ae048bb (patch)
tree32ad02ee31adb1f1f24b9bfd2bfd55f11a223bea /kernel/gsp_display_engine.c
parent035d033c5a047e395a7b06bceea1dc5b594c3b90 (diff)
downloadopen-iov-d2524210912b934edab92e4412f6f7680ae048bb.tar.gz
open-iov-d2524210912b934edab92e4412f6f7680ae048bb.zip
vgsp-disp: unconditional pushbuffer receipt log + NvBool valid fix
Log every NV2080_CTRL_CMD_INTERNAL_DISPLAY_CHANNEL_PUSHBUFFER (0x20800a58) receipt with the decoded 56-byte params struct, and always log rejected channel registrations and SET_NOTIFIER_DMA - boot-only volume, settles whether the kernel RM ever programs the display push buffers through that control (r1621 follow-up). valid is an NvBool (1 byte); the previous u32 load could read the padding bytes and turn a PIO-channel valid=0 into a false positive. Raise the engine log budget to 4096.
Diffstat (limited to 'kernel/gsp_display_engine.c')
-rw-r--r--kernel/gsp_display_engine.c20
1 files changed, 12 insertions, 8 deletions
diff --git a/kernel/gsp_display_engine.c b/kernel/gsp_display_engine.c
index 01495ac..9c00a22 100644
--- a/kernel/gsp_display_engine.c
+++ b/kernel/gsp_display_engine.c
@@ -477,9 +477,14 @@ void gsp_disp_engine_channel_add(struct nv_vgpu_device *vgpu, u32 hclass,
return;
if (!valid || !pb_pa || !gsp_disp_ctl_offset(hclass, instance)) {
- if (gsp_sema_dbg)
- pr_info("channel skipped: class=0x%x inst=%u pa=0x%llx limit=0x%llx valid=%d\n",
- hclass, instance, pb_pa, limit, valid);
+ /*
+ * Always log a rejected registration: this is the one line
+ * that says whether the guest programmed a channel the
+ * engine could not take (PIO channel, zero PA, unknown
+ * class). It is boot-only volume.
+ */
+ pr_info("channel skipped: class=0x%x inst=%u pa=0x%llx limit=0x%llx valid=%d\n",
+ hclass, instance, pb_pa, limit, valid);
return;
}
@@ -559,10 +564,9 @@ static void gsp_disp_method(struct nv_vgpu_device *vgpu,
ch->notifier_pa_valid = true;
}
}
- if (gsp_disp_dbg)
- pr_info("h=0x%x push=0x%x SET_NOTIFIER_DMA handle=0x%x -> pa=0x%llx valid=%d\n",
- ch->hclass, push_off, value, ch->notifier_pa,
- ch->notifier_pa_valid);
+ pr_info("h=0x%x push=0x%x SET_NOTIFIER_DMA handle=0x%x -> pa=0x%llx valid=%d\n",
+ ch->hclass, push_off, value, ch->notifier_pa,
+ ch->notifier_pa_valid);
return;
}
if (addr == notifier_ctrl) {
@@ -811,7 +815,7 @@ void gsp_disp_engine_pump(struct nv_vgpu_device *vgpu)
get = gsp_disp_bar0_read(vgpu,
s->ctl_off + GSP_DISP_REG_GET);
- if (gsp_disp_dbg && disp.log_budget < 2048) {
+ if (disp.log_budget < 4096) {
u64 age = (u64)(now - disp.boot_jiffies) *
(NSEC_PER_SEC / HZ);