diff options
Diffstat (limited to 'kernel/gsp_sema_service.c')
| -rw-r--r-- | kernel/gsp_sema_service.c | 24 |
1 files changed, 18 insertions, 6 deletions
diff --git a/kernel/gsp_sema_service.c b/kernel/gsp_sema_service.c index c9f5969..90ea545 100644 --- a/kernel/gsp_sema_service.c +++ b/kernel/gsp_sema_service.c @@ -24431,7 +24431,7 @@ static void svc_pump_channels(struct nv_vgpu_device *vgpu) rd_rc = svc_read_va_push(vgpu, ch, va, pb, len); unreadable = rd_rc != 0; - if (gsp_sema_dbg && svc_rdw_log < 400 && + if (gsp_sema_dbg && svc_rdw_log < 6000 && !ch->engine_type) { svc_rdw_log++; pr_info("sema-rdw: h=0x%x va=0x%llx len=%u rc=%d src=%u\n", @@ -24543,16 +24543,28 @@ static void svc_pump_channels(struct nv_vgpu_device *vgpu) * again and keep the entry * unreadable. */ - if (!svc_walk_vaspaces(vgpu, + int wr = svc_walk_vaspaces(vgpu, va & ~0xfffULL, - &wpa, &wap) && - !svc_read_ap(vgpu, + &wpa, &wap); + int rr = wr ? wr : svc_read_ap(vgpu, wpa + (va & 0xfff), wap == SVC_APERTURE_FB ? SVC_APERTURE_FB : SVC_APERTURE_SYS, - vb, len) && - svc_method_stream_plausible(vb, len)) { + vb, len); + bool pl = !rr ? svc_method_stream_plausible(vb, len) + : false; + + if (gsp_sema_dbg && + svc_pushpg_fb_log < 64) { + svc_pushpg_fb_log++; + pr_info("sema-pushpg: h=0x%x va=0x%llx viawalk rc=%d pa=0x%llx plaus=%d\n", + ch->h_object, va, + wr ? wr : rr, + wpa + (va & 0xfff), + pl ? 1 : 0); + } + if (!wr && !rr && pl) { memcpy(pb, vb, len); svc.pushpg_fallback++; ok = true; |
