From d2524210912b934edab92e4412f6f7680ae048bb Mon Sep 17 00:00:00 2001 From: Arthur Hanson Rasmusson Date: Sat, 7 Nov 2026 22:39:59 -0500 Subject: 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. --- kernel/gsp_display_engine.c | 20 ++++++++++++-------- 1 file changed, 12 insertions(+), 8 deletions(-) (limited to 'kernel/gsp_display_engine.c') 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); -- cgit v1.2.3