diff options
Diffstat (limited to 'kernel')
| -rw-r--r-- | kernel/gsp_sema_service.c | 18 |
1 files changed, 18 insertions, 0 deletions
diff --git a/kernel/gsp_sema_service.c b/kernel/gsp_sema_service.c index 04716a2..7a3b282 100644 --- a/kernel/gsp_sema_service.c +++ b/kernel/gsp_sema_service.c @@ -1960,6 +1960,24 @@ static int svc_op_translate(struct nv_vgpu_device *vgpu, u64 va, u64 *addr, *aperture = CE_APERTURE_SYS; return 0; } + /* + * Virtual operands can also live in a page directory the driver + * published (the UVM client VA space). With the walk decode fixed, + * this resolves CE copies whose src/dst is a plain GPU VA that never + * entered the content-scanned map. + */ + if (!svc_walk_vaspaces(vgpu, va & ~0xfffULL, &pa, &ap)) { + *addr = pa + (va & 0xfff); + *aperture = (ap == SVC_APERTURE_FB) ? CE_APERTURE_VID : + CE_APERTURE_SYS; + return 0; + } + if (!svc_walk_discovered(vgpu, va & ~0xfffULL, &pa, &ap)) { + *addr = pa + (va & 0xfff); + *aperture = (ap == SVC_APERTURE_FB) ? CE_APERTURE_VID : + CE_APERTURE_SYS; + return 0; + } return -ENOENT; } |
