Skip to content

Commit f15db29

Browse files
committed
Create device nodes in JIT-CDI mode
Signed-off-by: Evan Lezar <[email protected]>
1 parent 76b6d4d commit f15db29

File tree

1 file changed

+30
-1
lines changed

1 file changed

+30
-1
lines changed

internal/modifier/cdi.go

+30-1
Original file line numberDiff line numberDiff line change
@@ -22,12 +22,15 @@ import (
2222

2323
"tags.cncf.io/container-device-interface/pkg/parser"
2424

25+
"github.com/NVIDIA/go-nvlib/pkg/nvlib/device"
26+
2527
"github.com/NVIDIA/nvidia-container-toolkit/internal/config"
2628
"github.com/NVIDIA/nvidia-container-toolkit/internal/config/image"
2729
"github.com/NVIDIA/nvidia-container-toolkit/internal/logger"
2830
"github.com/NVIDIA/nvidia-container-toolkit/internal/lookup/root"
2931
"github.com/NVIDIA/nvidia-container-toolkit/internal/modifier/cdi"
3032
"github.com/NVIDIA/nvidia-container-toolkit/internal/oci"
33+
"github.com/NVIDIA/nvidia-container-toolkit/internal/system/nvdevices"
3134
"github.com/NVIDIA/nvidia-container-toolkit/pkg/nvcdi"
3235
"github.com/NVIDIA/nvidia-container-toolkit/pkg/nvcdi/spec"
3336
)
@@ -198,12 +201,14 @@ func generateAutomaticCDISpec(logger logger.Interface, cfg *config.Config, drive
198201
logger.Warningf("Ignoring error(s) loading kernel modules: %v", err)
199202
}
200203

201-
identifiers := []string{}
204+
var identifiers []string
202205
for _, device := range devices {
203206
_, _, id := parser.ParseDevice(device)
204207
identifiers = append(identifiers, id)
205208
}
206209

210+
tryCreateDeviceNodes(logger, driver, identifiers...)
211+
207212
deviceSpecs, err := cdilib.GetDeviceSpecsByID(identifiers...)
208213
if err != nil {
209214
return nil, fmt.Errorf("failed to get CDI device specs: %w", err)
@@ -221,3 +226,27 @@ func generateAutomaticCDISpec(logger logger.Interface, cfg *config.Config, drive
221226
spec.WithClass("gpu"),
222227
)
223228
}
229+
230+
func tryCreateDeviceNodes(logger logger.Interface, driver *root.Driver, identifiers ...string) {
231+
devices, err := nvdevices.New(
232+
nvdevices.WithLogger(logger),
233+
nvdevices.WithDevRoot(driver.Root),
234+
)
235+
if err != nil {
236+
logger.Warningf("Failed to create devices library: %v", err)
237+
return
238+
}
239+
if err := devices.CreateNVIDIAControlDevices(); err != nil {
240+
logger.Warningf("Failed to create control devices: %v", err)
241+
}
242+
if err := devices.CreateNVIDIACapsControlDeviceNodes(); err != nil {
243+
logger.Warningf("Failed to create nvidia-caps control devices: %v", err)
244+
}
245+
246+
for _, id := range identifiers {
247+
identifier := device.Identifier(id)
248+
if err := devices.CreateDeviceNodes(identifier); err != nil {
249+
logger.Warningf("Error creating device nodes for %v: %v", identifier, err)
250+
}
251+
}
252+
}

0 commit comments

Comments
 (0)