summaryrefslogtreecommitdiffstats
path: root/kernel/gsp_sema_service.c
diff options
context:
space:
mode:
authorArthur Hanson Rasmusson <arthur@vgpu.io>2026-09-28 16:16:22 -0400
committerArthur Hanson Rasmusson <arthur@vgpu.io>2026-09-28 16:16:22 -0400
commit0aca0e62c9e6abda30386c702bbaaf0101073afb (patch)
treea72750e9faa624344ba757703417906c32b282a0 /kernel/gsp_sema_service.c
parent407f3edf2a9afa9032991679a35655d1e4cb0801 (diff)
downloadopen-iov-0aca0e62c9e6abda30386c702bbaaf0101073afb.tar.gz
open-iov-0aca0e62c9e6abda30386c702bbaaf0101073afb.zip
sema: include the push VA in the per-push summary
The long bogus pushes (RISC-V tails) could not be tied back to the ring entry they came from; log the GPFIFO entry VA with each push so the false translations are identifiable and can be compared against probes.
Diffstat (limited to 'kernel/gsp_sema_service.c')
-rw-r--r--kernel/gsp_sema_service.c16
1 files changed, 9 insertions, 7 deletions
diff --git a/kernel/gsp_sema_service.c b/kernel/gsp_sema_service.c
index ba3690d..5cdca31 100644
--- a/kernel/gsp_sema_service.c
+++ b/kernel/gsp_sema_service.c
@@ -1725,7 +1725,7 @@ static void svc_run_ops(struct nv_vgpu_device *vgpu, struct svc_memset_op *ops,
*/
static void svc_decode_stream(struct nv_vgpu_device *vgpu, const u8 *buf,
u32 len, u64 page_pa, bool allow_ops,
- u32 ch_h, u32 ch_eng)
+ u32 ch_h, u32 ch_eng, u64 push_va)
{
struct svc_push_state st;
struct svc_memset_op ops[SVC_MAX_MEMSETS];
@@ -2140,9 +2140,9 @@ static void svc_decode_stream(struct nv_vgpu_device *vgpu, const u8 *buf,
if (tlen)
memcpy(tail, buf + len - tlen, tlen);
- pr_info("sema-push: h=0x%x eng=%u len=%u ops_runs=%u rel=0x%llx pay=%u have_rel=%u tail=%*phN\n",
- ch_h, ch_eng, len, ops_runs, st.rel_va,
- st.rel_payload, st.have_rel, tlen,
+ pr_info("sema-push: h=0x%x eng=%u va=0x%llx len=%u ops_runs=%u rel=0x%llx pay=%u have_rel=%u tail=%*phN\n",
+ ch_h, ch_eng, push_va, len, ops_runs,
+ st.rel_va, st.rel_payload, st.have_rel, tlen,
tlen ? tail : NULL);
}
}
@@ -2256,7 +2256,7 @@ static u32 svc_apply_page_data(struct nv_vgpu_device *vgpu, const u8 *buf,
* fabricated "pushes" executing memsets); work execution is limited
* to pushes the pump read through a trusted ring translation.
*/
- svc_decode_stream(vgpu, buf, SEMA_PAGE_SIZE, pa_page, false, 0, 0);
+ svc_decode_stream(vgpu, buf, SEMA_PAGE_SIZE, pa_page, false, 0, 0, 0);
for (off = 0; off + 16 <= SEMA_PAGE_SIZE; off += 4) {
u32 hdr, hi, lo, payload;
@@ -3316,7 +3316,8 @@ static void svc_pump_channels(struct nv_vgpu_device *vgpu)
len, 0,
ch->engine_type != 0,
ch->h_object,
- ch->engine_type);
+ ch->engine_type,
+ va);
ch->submissions++;
svc.gpfifo_entries_done++;
/* Advance expected payload for this channel's tracking semaphore. */
@@ -3349,7 +3350,8 @@ static void svc_pump_channels(struct nv_vgpu_device *vgpu)
len, 0,
false,
ch->h_object,
- ch->engine_type);
+ ch->engine_type,
+ va);
ch->submissions++;
svc.gpfifo_entries_done++;
if (ch->engine_type && ch->expected_sem_payload)