diff options
| -rw-r--r-- | kernel/gsp_sema_service.c | 11 |
1 files changed, 10 insertions, 1 deletions
diff --git a/kernel/gsp_sema_service.c b/kernel/gsp_sema_service.c index 2d41bb0..97cbf57 100644 --- a/kernel/gsp_sema_service.c +++ b/kernel/gsp_sema_service.c @@ -4767,7 +4767,7 @@ static int svc_fill_dst_page_pa(struct nv_vgpu_device *vgpu, u64 va, *ap_out = aper; return 0; } - if (svc_op_translate(vgpu, page, &pa, &aper)) { + if (!svc_op_translate(vgpu, page, &pa, &aper)) { *prov_out = 3; *pa_out = pa; *ap_out = aper; @@ -5035,6 +5035,15 @@ static int svc_fill(struct nv_vgpu_device *vgpu, u64 addr, u64 value, u32 elem, if (prc) { if (done_out) *done_out = (u64)o; + /* + * r391: demand the exact page through the pin + * channel (the userspace stream pushes this VA + * to the in-guest scanner) and hold the fill + * for a bounded retry - never write through a + * contiguous guess past a missing page. + */ + svc_log_stalled_va((va0 + o) & + ~(u64)(SEMA_PAGE_SIZE - 1)); pr_err_ratelimited("vgsp: FILL-TRUNC va=0x%llx want=0x%llx done=0x%llx path=sema-fill (page 0x%llx unresolved)\n", va0, (u64)total, (u64)o, (va0 + o) & |
