nvproxy: Add support for UVM_ENABLE_READ_DUPLICATION and UVM_SET_ACCESSED_BY.

Verified that the following reproducer works:
```
docker run --runtime=runsc --gpus all --rm \
   nvidia/cuda:12.4.1-devel-ubuntu22.04 \
   bash -c "apt-get update && apt-get install -y python3 python3-pip && \
   pip install 'mlx[cuda]==0.27.1' 'mlx-lm==0.26.3' && \
   python3 -c 'import mlx_lm; print(\"Import Successful\")'"
```

Support for UVM_ENABLE_READ_DUPLICATION was sufficient to satisfy the
reproducer. Support for UVM_SET_ACCESSED_BY was added because
`TestCUDA/Samples/4_CUDA_Libraries/conjugateGradientMultiDeviceCG` was failing
without it.

Fixes #12034

PiperOrigin-RevId: 852757609
This commit is contained in:
Ayush Ranjan
2026-01-06 06:49:15 -08:00
committed by gVisor bot
parent 3ea8558fb1
commit 62023143e7
3 changed files with 45 additions and 0 deletions
+39
View File
@@ -37,7 +37,9 @@ const (
UVM_PAGEABLE_MEM_ACCESS = 39
UVM_SET_PREFERRED_LOCATION = 42
UVM_UNSET_PREFERRED_LOCATION = 43
UVM_ENABLE_READ_DUPLICATION = 44
UVM_DISABLE_READ_DUPLICATION = 45
UVM_SET_ACCESSED_BY = 46
UVM_UNSET_ACCESSED_BY = 47
UVM_MIGRATE = 51
UVM_MIGRATE_RANGE_GROUP = 53
@@ -462,6 +464,24 @@ func (p *UVM_UNSET_PREFERRED_LOCATION_PARAMS) SetStatus(status uint32) {
p.RMStatus = status
}
// +marshal
type UVM_ENABLE_READ_DUPLICATION_PARAMS struct {
RequestedBase uint64
Length uint64
RMStatus uint32
Pad0 [4]byte
}
// GetStatus implements HasStatus.GetStatus.
func (p *UVM_ENABLE_READ_DUPLICATION_PARAMS) GetStatus() uint32 {
return p.RMStatus
}
// SetStatus implements HasStatus.SetStatus.
func (p *UVM_ENABLE_READ_DUPLICATION_PARAMS) SetStatus(status uint32) {
p.RMStatus = status
}
// +marshal
type UVM_DISABLE_READ_DUPLICATION_PARAMS struct {
RequestedBase uint64
@@ -480,6 +500,25 @@ func (p *UVM_DISABLE_READ_DUPLICATION_PARAMS) SetStatus(status uint32) {
p.RMStatus = status
}
// +marshal
type UVM_SET_ACCESSED_BY_PARAMS struct {
RequestedBase uint64
Length uint64
AccessedByUUID NvUUID
RMStatus uint32
Pad0 [4]byte
}
// GetStatus implements HasStatus.GetStatus.
func (p *UVM_SET_ACCESSED_BY_PARAMS) GetStatus() uint32 {
return p.RMStatus
}
// SetStatus implements HasStatus.SetStatus.
func (p *UVM_SET_ACCESSED_BY_PARAMS) SetStatus(status uint32) {
p.RMStatus = status
}
// +marshal
type UVM_UNSET_ACCESSED_BY_PARAMS struct {
RequestedBase uint64
@@ -99,7 +99,9 @@ func uvmIoctlFilters(enabledCaps nvconf.DriverCaps) []seccomp.SyscallRule {
{seccomp.EqualTo(nvgpu.UVM_PAGEABLE_MEM_ACCESS), compUtil},
{seccomp.EqualTo(nvgpu.UVM_SET_PREFERRED_LOCATION), compUtil},
{seccomp.EqualTo(nvgpu.UVM_UNSET_PREFERRED_LOCATION), compUtil},
{seccomp.EqualTo(nvgpu.UVM_ENABLE_READ_DUPLICATION), compUtil},
{seccomp.EqualTo(nvgpu.UVM_DISABLE_READ_DUPLICATION), compUtil},
{seccomp.EqualTo(nvgpu.UVM_SET_ACCESSED_BY), compUtil},
{seccomp.EqualTo(nvgpu.UVM_UNSET_ACCESSED_BY), compUtil},
{seccomp.EqualTo(nvgpu.UVM_MIGRATE), compUtil},
{seccomp.EqualTo(nvgpu.UVM_MIGRATE_RANGE_GROUP), compUtil},
+4
View File
@@ -208,7 +208,9 @@ func Init() {
nvgpu.UVM_PAGEABLE_MEM_ACCESS: uvmHandler(uvmIoctlSimple[nvgpu.UVM_PAGEABLE_MEM_ACCESS_PARAMS], compUtil),
nvgpu.UVM_SET_PREFERRED_LOCATION: uvmHandler(uvmIoctlSimple[nvgpu.UVM_SET_PREFERRED_LOCATION_PARAMS], compUtil),
nvgpu.UVM_UNSET_PREFERRED_LOCATION: uvmHandler(uvmIoctlSimple[nvgpu.UVM_UNSET_PREFERRED_LOCATION_PARAMS], compUtil),
nvgpu.UVM_ENABLE_READ_DUPLICATION: uvmHandler(uvmIoctlSimple[nvgpu.UVM_ENABLE_READ_DUPLICATION_PARAMS], compUtil),
nvgpu.UVM_DISABLE_READ_DUPLICATION: uvmHandler(uvmIoctlSimple[nvgpu.UVM_DISABLE_READ_DUPLICATION_PARAMS], compUtil),
nvgpu.UVM_SET_ACCESSED_BY: uvmHandler(uvmIoctlSimple[nvgpu.UVM_SET_ACCESSED_BY_PARAMS], compUtil),
nvgpu.UVM_UNSET_ACCESSED_BY: uvmHandler(uvmIoctlSimple[nvgpu.UVM_UNSET_ACCESSED_BY_PARAMS], compUtil),
nvgpu.UVM_MIGRATE: uvmHandler(uvmIoctlSimple[nvgpu.UVM_MIGRATE_PARAMS], compUtil),
nvgpu.UVM_MIGRATE_RANGE_GROUP: uvmHandler(uvmIoctlSimple[nvgpu.UVM_MIGRATE_RANGE_GROUP_PARAMS], compUtil),
@@ -475,7 +477,9 @@ func Init() {
nvgpu.UVM_PAGEABLE_MEM_ACCESS: ioctlInfo("UVM_PAGEABLE_MEM_ACCESS", nvgpu.UVM_PAGEABLE_MEM_ACCESS_PARAMS{}),
nvgpu.UVM_SET_PREFERRED_LOCATION: ioctlInfo("UVM_SET_PREFERRED_LOCATION", nvgpu.UVM_SET_PREFERRED_LOCATION_PARAMS{}),
nvgpu.UVM_UNSET_PREFERRED_LOCATION: ioctlInfo("UVM_UNSET_PREFERRED_LOCATION", nvgpu.UVM_UNSET_PREFERRED_LOCATION_PARAMS{}),
nvgpu.UVM_ENABLE_READ_DUPLICATION: ioctlInfo("UVM_ENABLE_READ_DUPLICATION", nvgpu.UVM_ENABLE_READ_DUPLICATION_PARAMS{}),
nvgpu.UVM_DISABLE_READ_DUPLICATION: ioctlInfo("UVM_DISABLE_READ_DUPLICATION", nvgpu.UVM_DISABLE_READ_DUPLICATION_PARAMS{}),
nvgpu.UVM_SET_ACCESSED_BY: ioctlInfo("UVM_SET_ACCESSED_BY", nvgpu.UVM_SET_ACCESSED_BY_PARAMS{}),
nvgpu.UVM_UNSET_ACCESSED_BY: ioctlInfo("UVM_UNSET_ACCESSED_BY", nvgpu.UVM_UNSET_ACCESSED_BY_PARAMS{}),
nvgpu.UVM_MIGRATE: ioctlInfo("UVM_MIGRATE", nvgpu.UVM_MIGRATE_PARAMS{}),
nvgpu.UVM_MIGRATE_RANGE_GROUP: ioctlInfo("UVM_MIGRATE_RANGE_GROUP", nvgpu.UVM_MIGRATE_RANGE_GROUP_PARAMS{}),