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 | 06a6e25d6bce4a24018df97ee7c72fcb9734d950 (patch) | |
| tree | 9d305900938c51edd41f0971a31c09066402b7f6 /kernel | |
| parent | 94d97920237215df53a2db4918d5cf71df3411db (diff) | |
| download | open-iov-06a6e25d6bce4a24018df97ee7c72fcb9734d950.tar.gz open-iov-06a6e25d6bce4a24018df97ee7c72fcb9734d950.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; } |
