Add support for unsupported UVM ioctls used by cuda-tests/run_smoke.sh.

Specifically, these are UVM_UNSET_PREFERRED_LOCATION, UVM_UNSET_ACCESSED_BY,
and UVM_MIGRATE ioctls.

PiperOrigin-RevId: 663543536
This commit is contained in:
Anthony Cui
2024-08-15 19:13:00 -07:00
committed by gVisor bot
parent 724e976061
commit 081bbcf363
3 changed files with 75 additions and 0 deletions
+55
View File
@@ -36,7 +36,10 @@ const (
UVM_UNREGISTER_GPU = 38
UVM_PAGEABLE_MEM_ACCESS = 39
UVM_SET_PREFERRED_LOCATION = 42
UVM_UNSET_PREFERRED_LOCATION = 43
UVM_DISABLE_READ_DUPLICATION = 45
UVM_UNSET_ACCESSED_BY = 47
UVM_MIGRATE = 51
UVM_MIGRATE_RANGE_GROUP = 53
UVM_TOOLS_READ_PROCESS_MEMORY = 62
UVM_TOOLS_WRITE_PROCESS_MEMORY = 63
@@ -260,6 +263,14 @@ type UVM_SET_PREFERRED_LOCATION_PARAMS_V550 struct {
RMStatus uint32
}
// +marshal
type UVM_UNSET_PREFERRED_LOCATION_PARAMS struct {
RequestedBase uint64 `nvproxy:"same"`
Length uint64
RMStatus uint32
Pad0 [4]byte
}
// +marshal
type UVM_DISABLE_READ_DUPLICATION_PARAMS struct {
RequestedBase uint64 `nvproxy:"same"`
@@ -268,6 +279,50 @@ type UVM_DISABLE_READ_DUPLICATION_PARAMS struct {
Pad0 [4]byte
}
// +marshal
type UVM_UNSET_ACCESSED_BY_PARAMS struct {
RequestedBase uint64 `nvproxy:"same"`
Length uint64
AccessedByUUID NvUUID
RMStatus uint32
Pad0 [4]byte
}
// +marshal
type UVM_MIGRATE_PARAMS struct {
Base uint64 `nvproxy:"same"`
Length uint64
DestinationUUID NvUUID
Flags uint32
_ [4]byte
SemaphoreAddress uint64
SemaphorePayload uint32
CPUNumaNode uint32
UserSpaceStart uint64
UserSpaceLength uint64
RMStatus uint32
_ [4]byte
}
// UVM_MIGRATE_PARAMS_V550 is the updated version of
// UVM_MIGRATE_PARAMS since 550.40.07.
//
// +marshal
type UVM_MIGRATE_PARAMS_V550 struct {
Base uint64 `nvproxy:"UVM_MIGRATE_PARAMS"`
Length uint64
DestinationUUID NvUUID
Flags uint32
_ [4]byte
SemaphoreAddress uint64
SemaphorePayload uint32
CPUNumaNode int32
UserSpaceStart uint64
UserSpaceLength uint64
RMStatus uint32
_ [4]byte
}
// +marshal
type UVM_MIGRATE_RANGE_GROUP_PARAMS struct {
RangeGroupID uint64 `nvproxy:"same"`
@@ -170,10 +170,22 @@ func Filters() seccomp.SyscallRules {
seccomp.NonNegativeFD{},
seccomp.EqualTo(nvgpu.UVM_SET_PREFERRED_LOCATION),
},
seccomp.PerArg{
seccomp.NonNegativeFD{},
seccomp.EqualTo(nvgpu.UVM_UNSET_PREFERRED_LOCATION),
},
seccomp.PerArg{
seccomp.NonNegativeFD{},
seccomp.EqualTo(nvgpu.UVM_DISABLE_READ_DUPLICATION),
},
seccomp.PerArg{
seccomp.NonNegativeFD{},
seccomp.EqualTo(nvgpu.UVM_UNSET_ACCESSED_BY),
},
seccomp.PerArg{
seccomp.NonNegativeFD{},
seccomp.EqualTo(nvgpu.UVM_MIGRATE),
},
seccomp.PerArg{
seccomp.NonNegativeFD{},
seccomp.EqualTo(nvgpu.UVM_MIGRATE_RANGE_GROUP),
+8
View File
@@ -218,7 +218,10 @@ func Init() {
nvgpu.UVM_UNREGISTER_GPU: uvmIoctlSimple[nvgpu.UVM_UNREGISTER_GPU_PARAMS],
nvgpu.UVM_PAGEABLE_MEM_ACCESS: uvmIoctlSimple[nvgpu.UVM_PAGEABLE_MEM_ACCESS_PARAMS],
nvgpu.UVM_SET_PREFERRED_LOCATION: uvmIoctlSimple[nvgpu.UVM_SET_PREFERRED_LOCATION_PARAMS],
nvgpu.UVM_UNSET_PREFERRED_LOCATION: uvmIoctlSimple[nvgpu.UVM_UNSET_PREFERRED_LOCATION_PARAMS],
nvgpu.UVM_DISABLE_READ_DUPLICATION: uvmIoctlSimple[nvgpu.UVM_DISABLE_READ_DUPLICATION_PARAMS],
nvgpu.UVM_UNSET_ACCESSED_BY: uvmIoctlSimple[nvgpu.UVM_UNSET_ACCESSED_BY_PARAMS],
nvgpu.UVM_MIGRATE: uvmIoctlSimple[nvgpu.UVM_MIGRATE_PARAMS],
nvgpu.UVM_MIGRATE_RANGE_GROUP: uvmIoctlSimple[nvgpu.UVM_MIGRATE_RANGE_GROUP_PARAMS],
nvgpu.UVM_MAP_DYNAMIC_PARALLELISM_REGION: uvmIoctlSimple[nvgpu.UVM_MAP_DYNAMIC_PARALLELISM_REGION_PARAMS],
nvgpu.UVM_UNMAP_EXTERNAL: uvmIoctlSimple[nvgpu.UVM_UNMAP_EXTERNAL_PARAMS],
@@ -413,7 +416,10 @@ func Init() {
nvgpu.UVM_UNREGISTER_GPU: getStructName(nvgpu.UVM_UNREGISTER_GPU_PARAMS{}),
nvgpu.UVM_PAGEABLE_MEM_ACCESS: getStructName(nvgpu.UVM_PAGEABLE_MEM_ACCESS_PARAMS{}),
nvgpu.UVM_SET_PREFERRED_LOCATION: getStructName(nvgpu.UVM_SET_PREFERRED_LOCATION_PARAMS{}),
nvgpu.UVM_UNSET_PREFERRED_LOCATION: getStructName(nvgpu.UVM_UNSET_PREFERRED_LOCATION_PARAMS{}),
nvgpu.UVM_DISABLE_READ_DUPLICATION: getStructName(nvgpu.UVM_DISABLE_READ_DUPLICATION_PARAMS{}),
nvgpu.UVM_UNSET_ACCESSED_BY: getStructName(nvgpu.UVM_UNSET_ACCESSED_BY_PARAMS{}),
nvgpu.UVM_MIGRATE: getStructName(nvgpu.UVM_MIGRATE_PARAMS{}),
nvgpu.UVM_MIGRATE_RANGE_GROUP: getStructName(nvgpu.UVM_MIGRATE_RANGE_GROUP_PARAMS{}),
nvgpu.UVM_MAP_DYNAMIC_PARALLELISM_REGION: getStructName(nvgpu.UVM_MAP_DYNAMIC_PARALLELISM_REGION_PARAMS{}),
nvgpu.UVM_UNMAP_EXTERNAL: getStructName(nvgpu.UVM_UNMAP_EXTERNAL_PARAMS{}),
@@ -624,6 +630,7 @@ func Init() {
abi.controlCmd[(nvgpu.NV2081_BINAPI<<16)|0x0108] = rmControlSimple
abi.controlCmd[nvgpu.NV0000_CTRL_CMD_SYSTEM_GET_P2P_CAPS] = ctrlClientSystemGetP2PCapsV550
abi.uvmIoctl[nvgpu.UVM_SET_PREFERRED_LOCATION] = uvmIoctlSimple[nvgpu.UVM_SET_PREFERRED_LOCATION_PARAMS_V550]
abi.uvmIoctl[nvgpu.UVM_MIGRATE] = uvmIoctlSimple[nvgpu.UVM_MIGRATE_PARAMS_V550]
prevNames := abi.getStructNames
abi.getStructNames = func() *driverStructNames {
@@ -639,6 +646,7 @@ func Init() {
names.controlNames[(nvgpu.NV2081_BINAPI<<16)|0x0108] = nil
names.controlNames[nvgpu.NV0000_CTRL_CMD_SYSTEM_GET_P2P_CAPS] = getStructName(nvgpu.NV0000_CTRL_SYSTEM_GET_P2P_CAPS_PARAMS_V550{})
names.uvmNames[nvgpu.UVM_SET_PREFERRED_LOCATION] = getStructName(nvgpu.UVM_SET_PREFERRED_LOCATION_PARAMS_V550{})
names.uvmNames[nvgpu.UVM_MIGRATE] = getStructName(nvgpu.UVM_MIGRATE_PARAMS_V550{})
return names
}