From 01c79164c5f32f292cdc52973fd312225429c9cb Mon Sep 17 00:00:00 2001 From: Botir Khaltaev Date: Thu, 27 Aug 2026 14:36:05 +0000 Subject: [PATCH 1/2] nvproxy: support AMPERE_B graphics allocation class Ampere GA10x uses class 0xc797 (AMPERE_B) rather than AMPERE_A (0xc697, GA100). vkCreateDevice fails with "handler is undefined for allocation class 0xc797" until this class is proxied with the same NV_GR_ALLOCATION_PARAMETERS as AMPERE_A. Assisted-by: Cursor --- pkg/abi/nvgpu/classes.go | 1 + pkg/sentry/devices/nvproxy/version.go | 2 ++ 2 files changed, 3 insertions(+) diff --git a/pkg/abi/nvgpu/classes.go b/pkg/abi/nvgpu/classes.go index 579f0b93d8b..2fd341b2f47 100644 --- a/pkg/abi/nvgpu/classes.go +++ b/pkg/abi/nvgpu/classes.go @@ -108,6 +108,7 @@ const ( AMPERE_COMPUTE_A = 0x0000c6c0 NVC6FA_VIDEO_OFA = 0x0000c6fa BLACKWELL_USERMODE_A = 0x0000c761 + AMPERE_B = 0x0000c797 NVC7B0_VIDEO_DECODER = 0x0000c7b0 AMPERE_DMA_COPY_B = 0x0000c7b5 NVC7B7_VIDEO_ENCODER = 0x0000c7b7 diff --git a/pkg/sentry/devices/nvproxy/version.go b/pkg/sentry/devices/nvproxy/version.go index a196208a2b5..d5edecc1249 100644 --- a/pkg/sentry/devices/nvproxy/version.go +++ b/pkg/sentry/devices/nvproxy/version.go @@ -466,6 +466,7 @@ func Init() { nvgpu.HOPPER_CHANNEL_GPFIFO_A: allocHandler(rmAllocChannel, compUtil), nvgpu.TURING_A: allocHandler(rmAllocSimple[nvgpu.NV_GR_ALLOCATION_PARAMETERS], nvconf.CapGraphics), nvgpu.AMPERE_A: allocHandler(rmAllocSimple[nvgpu.NV_GR_ALLOCATION_PARAMETERS], nvconf.CapGraphics), + nvgpu.AMPERE_B: allocHandler(rmAllocSimple[nvgpu.NV_GR_ALLOCATION_PARAMETERS], nvconf.CapGraphics), nvgpu.ADA_A: allocHandler(rmAllocSimple[nvgpu.NV_GR_ALLOCATION_PARAMETERS], nvconf.CapGraphics), nvgpu.HOPPER_A: allocHandler(rmAllocSimple[nvgpu.NV_GR_ALLOCATION_PARAMETERS], nvconf.CapGraphics), nvgpu.TURING_DMA_COPY_A: allocHandler(rmAllocSimple[nvgpu.NVB0B5_ALLOCATION_PARAMETERS], compUtil), @@ -794,6 +795,7 @@ func Init() { nvgpu.HOPPER_CHANNEL_GPFIFO_A: ioctlInfo("HOPPER_CHANNEL_GPFIFO_A", nvgpu.NV_CHANNEL_ALLOC_PARAMS{}), nvgpu.TURING_A: ioctlInfo("TURING_A", nvgpu.NV_GR_ALLOCATION_PARAMETERS{}), nvgpu.AMPERE_A: ioctlInfo("AMPERE_A", nvgpu.NV_GR_ALLOCATION_PARAMETERS{}), + nvgpu.AMPERE_B: ioctlInfo("AMPERE_B", nvgpu.NV_GR_ALLOCATION_PARAMETERS{}), nvgpu.ADA_A: ioctlInfo("ADA_A", nvgpu.NV_GR_ALLOCATION_PARAMETERS{}), nvgpu.HOPPER_A: ioctlInfo("HOPPER_A", nvgpu.NV_GR_ALLOCATION_PARAMETERS{}), nvgpu.TURING_DMA_COPY_A: ioctlInfo("TURING_DMA_COPY_A", nvgpu.NVB0B5_ALLOCATION_PARAMETERS{}), From 3e69c51e1bb8f525f87c399575eff6094457b9dc Mon Sep 17 00:00:00 2001 From: Botir Khaltaev Date: Thu, 27 Aug 2026 20:55:07 +0000 Subject: [PATCH 2/2] nvproxy: support NVB0CC_CTRL_CMD_GET_HS_CREDITS_MAPPING Nsight Compute on multi-chiplet GPUs issues 0xb0cc0116 after GET_CHIPLET_HS_CREDIT_POOL. Without this allowlist the sentry logs "handler is undefined" and NCU fails to prepare the kernel. Register it on the 560.28.03 ABI node under CapProfiling, same as the other B0CC profiler commands. Assisted-by: Cursor --- pkg/abi/nvgpu/ctrl.go | 1 + pkg/sentry/devices/nvproxy/version.go | 2 ++ 2 files changed, 3 insertions(+) diff --git a/pkg/abi/nvgpu/ctrl.go b/pkg/abi/nvgpu/ctrl.go index fc07881b2bd..e57d51e2cab 100644 --- a/pkg/abi/nvgpu/ctrl.go +++ b/pkg/abi/nvgpu/ctrl.go @@ -903,6 +903,7 @@ const ( NVB0CC_CTRL_CMD_GET_TOTAL_HS_CREDITS = 0xb0cc010d NVB0CC_CTRL_CMD_SET_HS_CREDITS = 0xb0cc010e NVB0CC_CTRL_CMD_GET_CHIPLET_HS_CREDIT_POOL = 0xb0cc0115 + NVB0CC_CTRL_CMD_GET_HS_CREDITS_MAPPING = 0xb0cc0116 NVB0CC_CTRL_CMD_RESERVE_CCU_PROF = 0xb0cc0119 NVB0CC_CTRL_CMD_POWER_REQUEST_FEATURES = 0xb0cc0301 NVB0CC_CTRL_CMD_POWER_RELEASE_FEATURES = 0xb0cc0302 diff --git a/pkg/sentry/devices/nvproxy/version.go b/pkg/sentry/devices/nvproxy/version.go index d5edecc1249..61d262737db 100644 --- a/pkg/sentry/devices/nvproxy/version.go +++ b/pkg/sentry/devices/nvproxy/version.go @@ -992,6 +992,7 @@ func Init() { abi.controlCmd[nvgpu.NV2080_CTRL_CMD_NVLINK_GET_PLATFORM_INFO] = ctrlHandler(rmControlSimple, nvconf.CapFabricIMEXManagement) abi.controlCmd[nvgpu.NV2080_CTRL_CMD_BUS_GET_PCIE_CPL_ATOMICS_CAPS] = ctrlHandler(rmControlSimple, nvconf.CapGraphics) abi.controlCmd[nvgpu.NVB0CC_CTRL_CMD_GET_CHIPLET_HS_CREDIT_POOL] = ctrlHandler(rmControlSimple, nvconf.CapProfiling) + abi.controlCmd[nvgpu.NVB0CC_CTRL_CMD_GET_HS_CREDITS_MAPPING] = ctrlHandler(rmControlSimple, nvconf.CapProfiling) prevGetInfo := abi.getInfo abi.getInfo = func() *DriverABIInfo { info := prevGetInfo() @@ -1007,6 +1008,7 @@ func Init() { info.ControlInfos[nvgpu.NV2080_CTRL_CMD_NVLINK_GET_PLATFORM_INFO] = simpleIoctlInfo("NV2080_CTRL_CMD_NVLINK_GET_PLATFORM_INFO", "NV2080_CTRL_NVLINK_GET_PLATFORM_INFO_PARAMS") info.ControlInfos[nvgpu.NV2080_CTRL_CMD_BUS_GET_PCIE_CPL_ATOMICS_CAPS] = simpleIoctlInfo("NV2080_CTRL_CMD_BUS_GET_PCIE_CPL_ATOMICS_CAPS", "NV2080_CTRL_CMD_BUS_GET_PCIE_CPL_ATOMICS_CAPS_PARAMS") info.ControlInfos[nvgpu.NVB0CC_CTRL_CMD_GET_CHIPLET_HS_CREDIT_POOL] = simpleIoctlInfo("NVB0CC_CTRL_CMD_GET_CHIPLET_HS_CREDIT_POOL", "NVB0CC_CTRL_GET_CHIPLET_HS_CREDIT_POOL") + info.ControlInfos[nvgpu.NVB0CC_CTRL_CMD_GET_HS_CREDITS_MAPPING] = simpleIoctlInfo("NVB0CC_CTRL_CMD_GET_HS_CREDITS_MAPPING", "NVB0CC_CTRL_GET_HS_CREDITS_POOL_MAPPING_PARAMS") return info } return abi