Files
Ayush RanjanandgVisor bot c652514e4f Move nvproxy.objsMu to rootClient.
The objsMu sychronizes 2 things:
- nvproxy object book-keeping
- host ioctl(2) invocations

Since this mutex was on nvproxy device level, nvproxy was synchronizing host
ioctl invocations across clients even though the NVIDIA kernel driver allows
ioctl commands across clients to proceed in parallel.

Move the lock to rootClient and implement locking on a per-client basis. This
is similar to what the NVIDIA kernel driver does; see usages of
_serverLockClientWithLockInfo() in the driver.

As far as we can tell, CUDA programs issue one command to each client at a time
so synchronizing on a per-client basis shouldn't hurt concurrency.

Investigated-by: Jamie Liu <[email protected]>
Suggested-by: Jamie Liu <[email protected]>
PiperOrigin-RevId: 740647187
2025-03-26 00:05:41 -07:00

27 lines
953 B
Go

// Copyright 2023 The gVisor Authors.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
package nvgpu
// Status codes, from src/common/sdk/nvidia/inc/nvstatuscodes.h.
const (
NV_OK = 0x00000000
NV_ERR_INVALID_ADDRESS = 0x0000001e
NV_ERR_INVALID_ARGUMENT = 0x0000001f
NV_ERR_INVALID_CLASS = 0x00000022
NV_ERR_INVALID_CLIENT = 0x00000023
NV_ERR_INVALID_LIMIT = 0x0000002e
NV_ERR_NOT_SUPPORTED = 0x00000056
)