summaryrefslogtreecommitdiffstats
path: root/kernel/main.c
diff options
context:
space:
mode:
Diffstat (limited to 'kernel/main.c')
-rw-r--r--kernel/main.c22
1 files changed, 22 insertions, 0 deletions
diff --git a/kernel/main.c b/kernel/main.c
index 458ba36..6902b48 100644
--- a/kernel/main.c
+++ b/kernel/main.c
@@ -907,6 +907,28 @@ static ssize_t nv_vgpu_vfio_dev_write(struct vfio_device *vdev, const char __use
if (copy_from_user(vgpu->bars[1].vaddr + bar1_off, buf, count))
return -EFAULT;
+ /*
+ * SESSION 154 r1506: the X screen (VA 0x120400000, 900 pages)
+ * is the BAR1 FB shadow at 0x200000. Guest CPU writes into
+ * that range are either the X server's own fills (expected)
+ * or another client's BAR1 upload that overlaps the screen
+ * allocation (the shader-cache collision). Name them so the
+ * owner of the pollution is measured, not inferred.
+ */
+ {
+ static u32 bar1_scr_log;
+
+ if (bar1_off >= 0x200000u && bar1_off < 0x600000u &&
+ bar1_scr_log < 64u && count <= 8) {
+ u64 v = 0;
+
+ memcpy(&v, vgpu->bars[1].vaddr + bar1_off,
+ count);
+ pr_info("vgsp: BAR1-SCREEN-WRITE off=0x%llx size=%zu val=0x%llx (screen range 0x200000-0x584000)\n",
+ bar1_off, count, v);
+ bar1_scr_log++;
+ }
+ }
*ppos += count;
return count;
}