mirror of
				https://github.com/NVIDIA/nvidia-container-toolkit
				synced 2025-06-26 18:18:24 +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