mirror of
https://github.com/NVIDIA/nvidia-container-toolkit
synced 2025-02-16 17:42:20 +00:00
Include meta devices in generated CDI spec
This change includes meta devices (e.g. /dev/nvidiactl) in the generated CDI spec. Missing device nodes are ignored. Signed-off-by: Evan Lezar <elezar@nvidia.com>
This commit is contained in:
parent
dfa041991f
commit
3dd8020695
@ -176,6 +176,8 @@ func (m command) generateSpec() (*specs.Spec, error) {
|
|||||||
return nil, fmt.Errorf("falied to generate CDI spec for MIG devices: %v", err)
|
return nil, fmt.Errorf("falied to generate CDI spec for MIG devices: %v", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
spec.ContainerEdits.DeviceNodes = m.getExistingMetaDeviceNodes()
|
||||||
|
|
||||||
libraries, err := m.findLibs(nvmllib)
|
libraries, err := m.findLibs(nvmllib)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, fmt.Errorf("failed to locate driver libraries: %v", err)
|
return nil, fmt.Errorf("failed to locate driver libraries: %v", err)
|
||||||
@ -201,18 +203,13 @@ func (m command) generateSpec() (*specs.Spec, error) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func generateEditsForDevice(name string, d deviceInfo) (specs.Device, error) {
|
func generateEditsForDevice(name string, d deviceInfo) (specs.Device, error) {
|
||||||
var deviceNodes []*specs.DeviceNode
|
|
||||||
|
|
||||||
deviceNodePaths, err := d.GetDeviceNodes()
|
deviceNodePaths, err := d.GetDeviceNodes()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return specs.Device{}, fmt.Errorf("failed to get paths for device: %v", err)
|
return specs.Device{}, fmt.Errorf("failed to get paths for device: %v", err)
|
||||||
}
|
}
|
||||||
for _, p := range deviceNodePaths {
|
|
||||||
deviceNode := specs.DeviceNode{
|
deviceNodes := getDeviceNodesFromPaths(deviceNodePaths)
|
||||||
Path: p,
|
|
||||||
}
|
|
||||||
deviceNodes = append(deviceNodes, &deviceNode)
|
|
||||||
}
|
|
||||||
device := specs.Device{
|
device := specs.Device{
|
||||||
Name: name,
|
Name: name,
|
||||||
ContainerEdits: specs.ContainerEdits{
|
ContainerEdits: specs.ContainerEdits{
|
||||||
@ -223,6 +220,38 @@ func generateEditsForDevice(name string, d deviceInfo) (specs.Device, error) {
|
|||||||
return device, nil
|
return device, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (m command) getExistingMetaDeviceNodes() []*specs.DeviceNode {
|
||||||
|
metaDeviceNodePaths := []string{
|
||||||
|
"/dev/nvidia-modeset",
|
||||||
|
"/dev/nvidia-uvm-tools",
|
||||||
|
"/dev/nvidia-uvm",
|
||||||
|
"/dev/nvidiactl",
|
||||||
|
}
|
||||||
|
|
||||||
|
var existingDeviceNodePaths []string
|
||||||
|
for _, p := range metaDeviceNodePaths {
|
||||||
|
if _, err := os.Stat(p); err != nil {
|
||||||
|
m.logger.Infof("Ignoring missing meta device %v", p)
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
existingDeviceNodePaths = append(existingDeviceNodePaths, p)
|
||||||
|
}
|
||||||
|
|
||||||
|
return getDeviceNodesFromPaths(existingDeviceNodePaths)
|
||||||
|
}
|
||||||
|
|
||||||
|
func getDeviceNodesFromPaths(deviceNodePaths []string) []*specs.DeviceNode {
|
||||||
|
var deviceNodes []*specs.DeviceNode
|
||||||
|
for _, p := range deviceNodePaths {
|
||||||
|
deviceNode := specs.DeviceNode{
|
||||||
|
Path: p,
|
||||||
|
}
|
||||||
|
deviceNodes = append(deviceNodes, &deviceNode)
|
||||||
|
}
|
||||||
|
|
||||||
|
return deviceNodes
|
||||||
|
}
|
||||||
|
|
||||||
func (m command) findLibs(nvmllib nvml.Interface) ([]string, error) {
|
func (m command) findLibs(nvmllib nvml.Interface) ([]string, error) {
|
||||||
version, r := nvmllib.SystemGetDriverVersion()
|
version, r := nvmllib.SystemGetDriverVersion()
|
||||||
if r != nvml.SUCCESS {
|
if r != nvml.SUCCESS {
|
||||||
|
Loading…
Reference in New Issue
Block a user