65 Commits
Author SHA1 Message Date
Ayush RanjanandgVisor bot 738e1d995f nvproxy: Add HasStatus.SetStatus and provide failWithStatus() util functions.
This creates a more centralized way for nvproxy to return errors to the the
user mode driver via the NvStatus field in ioctl structs. As opposed to failing
the ioctl with mysterious EINVALs.

Also updated the following structs to NOT implement HasStatus interface:
- IoctlRegisterFD
- RMAPIVersion
- IoctlSysParams

These don't have a Status field so it is misleading for them to implement
HasStatus. Created frontendIoctlSimpleNoStatus() and
frontendIoctlInvokeNoStatus() for such structs to use.

PiperOrigin-RevId: 738959856
2025-03-20 15:29:44 -07:00
Jamie LiuandgVisor bot b01944883b Add memmap.File.MemoryType()
This has no effect (outside of debug logging) until cl/723723715.

Updates #11436

PiperOrigin-RevId: 736686635
2025-03-13 17:08:52 -07:00
Ayush RanjanandgVisor bot 6b4f0082c2 nvproxy: Add support for AMPERE_A, ADA_A, HOPPER_A.
TURING_A was added in e6e1ecbdcc ("Add support for graphics in nvproxy.").
{GPU_ARCH}_A class is used for graphics workloads. Add the missing classes for
other GPU architectures we support.

PiperOrigin-RevId: 726620575
2025-02-13 13:45:12 -08:00
1a9abee80b nvproxy: Add support for 570.86.15 driver.
Co-authored-by: Zach Koopmans <zkoopmans@google.com>
PiperOrigin-RevId: 721910920
2025-01-31 14:53:49 -08:00
Ayush RanjanandgVisor bot 0b5ee6d4df nvproxy: Add support for v565.57.01.
PiperOrigin-RevId: 720557549
2025-01-28 06:54:35 -08:00
2022tgoel 7399a32b4c Add GPU video codecs support to nvproxy (so that tools like ffmpeg work)
adding cap

tests work

fix merge

unit test

small fixes

additional ioctls for L4 gpu
2025-01-09 01:09:47 +00:00
Ayush RanjanandgVisor bot b11efeaecd nvproxy: Clean up struct field tags.
Before this change, there were 2 places in which the driver struct names were
defined for nvproxy structs:
1. As struct field tags. The first field of structs had a tag `nvproxy:*`. This
   was kind of awkward. Such metadata is usually a struct comment.
2. In version.go while registering the struct with a name. Not all structs are
   defined in nvproxy (for example simple structs). In such cases, the driver
   struct name is directly assigned while registering struct info.

This change gets rid of (1). Most of the struct tags were `nvproxy:"same"`. Now
driverStructs() always infers the driver struct name using the nvproxy struct
name itself. The few cases where the nvproxy tag was needed, because driver
struct name was lower cased, were handled by defining driverStructWithName()
which allows specifying a different name. Now all driver struct names
definitions are in one place.

Along the way, also made the following fixes:
- For some reason, many structs defined in pkg/abi/nvgpu/frontend.go had
  camel-cased naming, while all other structs in pkg/abi/nvgpu/ctrl.go and
  pkg/abi/nvgpu/classes.go were named the same as their driver structs. The
  convention in the abi/* packages is to follow the kernel source naming.
  This is against Go sytle guide, but is more readable for gVisor purposes and
  has been a long accepted convention. This also makes the task of removing (1)
  easier. So renamed all such structs as per their driver names.
- A lot of code in pkg/sentry/devices/nvproxy/version.go was still referring to
  driver struct info as "struct names", even though it was representing more
  than just struct names. It also contains the reflect.Type of the struct which
  is used to compare the nvproxy struct layout to the driver struct layout.

PiperOrigin-RevId: 710648105
2024-12-30 01:32:41 -08:00
Ayush RanjanandgVisor bot e6e1ecbdcc Add support for graphics in nvproxy.
PiperOrigin-RevId: 708100465
2024-12-19 17:41:18 -08:00
Ayush RanjanandgVisor bot 1ca2bd4a69 nvproxy: Improve debuggability by logging failures coming from the host driver.
Most ioctl contain a `Status` field (which in driver code is of type NvStatus)
which indicates if the ioctl command succeeded or not. Non NV_OK=0 values
indicate some kind of failure. In case of failure, the ioctl(2) syscall still
succeeds. So the failure is currently not visible in gVisor strace/debug logs.

This helps flag instances where the host invocation of ioctl(2) resulted in a
failure in the driver.

This also helps avoid the usage of frontendIoctlSimple() in some cases.
frontendIoctlSimple() heap allocates a byte buffer. It is better to copy into
the ioctl params on the stack when possible.

PiperOrigin-RevId: 707312482
2024-12-17 17:26:22 -08:00
Jamie LiuandgVisor bot 01e30ab09b nvproxy: don't depend on HVASpace for non-virtmem NVOS32_FUNCTION_ALLOC_SIZE
PiperOrigin-RevId: 704780681
2024-12-10 11:26:47 -08:00
Jamie LiuandgVisor bot a55b3b2d90 nvproxy: track objects created by NV_ESC_RM_DUP_OBJECT
PiperOrigin-RevId: 704502046
2024-12-09 18:59:36 -08:00
Nathan Wang 4b1db872bd nvproxy: Add GF100_PROFILER allocation class and NV2080_CTRL_CMD_TIMER_SET_GR_TICK_FREQ control command 2024-09-27 20:03:57 +00:00
Otto Bittner 960c2d0925 nvproxy: add key-rotation ioctl
Signed-off-by: Otto Bittner <cobittner@posteo.net>
2024-08-27 11:43:56 +02:00
Anthony CuiandgVisor bot 081bbcf363 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
2024-08-15 19:13:00 -07:00
Anthony CuiandgVisor bot 34f8c3f24e Fix inconsistencies with nvproxy ioctl structs compared to the Nvidia driver.
This adds specific handling for NV0000_CTRL_GPU_GET_ID_INFO_PARAMS and
NV0000_CTRL_SYSTEM_GET_P2P_CAPS_PARAMS since they contain pointer fields.
This also fixes the layout of NV0000_CTRL_OS_UNIX_GET_EXPORT_OBJECT_INFO_PARAMS
and NV_CONFIDENTIAL_COMPUTE_ALLOC_PARAMS, and the typing of fields for
NV0000_CTRL_OS_UNIX_EXPORT_OBJECT and UVM_MAP_EXTERNAL_ALLOCATION_PARAMS.

PiperOrigin-RevId: 659630154
2024-08-05 11:54:06 -07:00
Anthony CuiandgVisor bot ced5d60576 Record driver struct names within nvproxy.
This is a necessary addition to enable our Nvidia driver differ tool, and
in general to make it easier to keep nvproxy up to date with driver changes.

The current maps have been partially validated by the test in cl/655637570.

PiperOrigin-RevId: 657705274
2024-07-30 13:16:27 -07:00
Ayush RanjanandgVisor bot 714f1590e1 Add NV00F8_CTRL_CMD_ATTACH_MEM support in nvproxy.
PiperOrigin-RevId: 657316851
2024-07-29 14:01:08 -07:00
Matt Nappo 40a09da5a1 nvproxy: Implement ioctls to display GPU ECC info 2024-07-23 14:32:06 +00:00
gVisor bot e04095d6d7 Merge pull request #10675 from mattnappo:mattnappo/perf-state-ioctl
PiperOrigin-RevId: 654920169
2024-07-22 15:41:30 -07:00
Ayush RanjanandgVisor bot e2f328e234 Add support for missing ioctls used by Triton Interface Server.
PiperOrigin-RevId: 654886437
2024-07-22 14:04:43 -07:00
Matt Nappo 4763cf2316 nvproxy: Added CTRL_CMD_PERF_GET_CURRENT_PSTATE control command 2024-07-22 17:39:31 +00:00
gVisor bot e87ab0a301 Merge pull request #10649 from thundergolfer:master
PiperOrigin-RevId: 652526851
2024-07-15 10:35:51 -07:00
Jonathon Belotti d3d19f12c5 nvproxy: implement missing NV_MEMORY_MULTICAST_FABRIC, NV00FD_* 2024-07-12 21:03:46 +00:00
Anthony CuiandgVisor bot 32ed2f7987 Add missing control ioctls used by NCCL-tests.
Fixes #10647.

PiperOrigin-RevId: 651491183
2024-07-11 12:10:27 -07:00
gVisor bot d8266a08b8 Merge pull request #10610 from luiscape:master
PiperOrigin-RevId: 650253505
2024-07-08 08:12:29 -07:00