diff options
| author | Arthur Hanson Rasmusson <arthur@vgpu.io> | 2026-09-30 06:56:05 -0400 |
|---|---|---|
| committer | Arthur Hanson Rasmusson <arthur@vgpu.io> | 2026-09-30 06:56:05 -0400 |
| commit | 89aace067cb26865d0ffa36f995d6c9ff2a3fd17 (patch) | |
| tree | ac14b82b68f6d3878e6dda09165033c278a706a6 /kernel | |
| parent | 19e61f2dddadf9ea7f17fbcdc23ed43d4d40ff72 (diff) | |
| download | open-iov-89aace067cb26865d0ffa36f995d6c9ff2a3fd17.tar.gz open-iov-89aace067cb26865d0ffa36f995d6c9ff2a3fd17.zip | |
sema-svc: CE op translation falls back to the GMMU walk for virtual operands
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; } |
