From cfa26472602c1fe75872c45067171ba3f32c60a9 Mon Sep 17 00:00:00 2001 From: Evan Lezar Date: Thu, 2 Feb 2023 15:42:01 +0100 Subject: [PATCH] Rename root to driverRoot for CDI generation This makes the intent of the command line argument clearer since this relates specifically to the root where the NVIDIA driver is installed. Signed-off-by: Evan Lezar --- cmd/nvidia-ctk/cdi/generate/common.go | 10 ++--- .../cdi/generate/device-folder-permissions.go | 6 +-- cmd/nvidia-ctk/cdi/generate/driver.go | 40 +++++++++---------- cmd/nvidia-ctk/cdi/generate/full-gpu.go | 10 ++--- cmd/nvidia-ctk/cdi/generate/generate.go | 24 +++++------ cmd/nvidia-ctk/cdi/generate/ipc.go | 6 +-- cmd/nvidia-ctk/cdi/generate/mig-device.go | 4 +- 7 files changed, 50 insertions(+), 50 deletions(-) diff --git a/cmd/nvidia-ctk/cdi/generate/common.go b/cmd/nvidia-ctk/cdi/generate/common.go index 212c483f..136e1264 100644 --- a/cmd/nvidia-ctk/cdi/generate/common.go +++ b/cmd/nvidia-ctk/cdi/generate/common.go @@ -27,14 +27,14 @@ import ( // NewCommonDiscoverer returns a discoverer for entities that are not associated with a specific CDI device. // This includes driver libraries and meta devices, for example. -func NewCommonDiscoverer(logger *logrus.Logger, root string, nvidiaCTKPath string, nvmllib nvml.Interface) (discover.Discover, error) { +func NewCommonDiscoverer(logger *logrus.Logger, driverRoot string, nvidiaCTKPath string, nvmllib nvml.Interface) (discover.Discover, error) { metaDevices := discover.NewDeviceDiscoverer( logger, lookup.NewCharDeviceLocator( lookup.WithLogger(logger), - lookup.WithRoot(root), + lookup.WithRoot(driverRoot), ), - root, + driverRoot, []string{ "/dev/nvidia-modeset", "/dev/nvidia-uvm-tools", @@ -43,12 +43,12 @@ func NewCommonDiscoverer(logger *logrus.Logger, root string, nvidiaCTKPath strin }, ) - graphicsMounts, err := discover.NewGraphicsMountsDiscoverer(logger, root) + graphicsMounts, err := discover.NewGraphicsMountsDiscoverer(logger, driverRoot) if err != nil { return nil, fmt.Errorf("error constructing discoverer for graphics mounts: %v", err) } - driverFiles, err := NewDriverDiscoverer(logger, root, nvidiaCTKPath, nvmllib) + driverFiles, err := NewDriverDiscoverer(logger, driverRoot, nvidiaCTKPath, nvmllib) if err != nil { return nil, fmt.Errorf("failed to create discoverer for driver files: %v", err) } diff --git a/cmd/nvidia-ctk/cdi/generate/device-folder-permissions.go b/cmd/nvidia-ctk/cdi/generate/device-folder-permissions.go index d4602544..418a4a3d 100644 --- a/cmd/nvidia-ctk/cdi/generate/device-folder-permissions.go +++ b/cmd/nvidia-ctk/cdi/generate/device-folder-permissions.go @@ -26,7 +26,7 @@ import ( type deviceFolderPermissions struct { logger *logrus.Logger - root string + driverRoot string nvidiaCTKPath string folders []string } @@ -39,7 +39,7 @@ var _ discover.Discover = (*deviceFolderPermissions)(nil) // The nested devices that are applicable to the NVIDIA GPU devices are: // - DRM devices at /dev/dri/* // - NVIDIA Caps devices at /dev/nvidia-caps/* -func NewDeviceFolderPermissionHookDiscoverer(logger *logrus.Logger, root string, nvidiaCTKPath string, deviceSpecs []specs.Device) (discover.Discover, error) { +func NewDeviceFolderPermissionHookDiscoverer(logger *logrus.Logger, driverRoot string, nvidiaCTKPath string, deviceSpecs []specs.Device) (discover.Discover, error) { var folders []string seen := make(map[string]bool) for _, device := range deviceSpecs { @@ -66,7 +66,7 @@ func NewDeviceFolderPermissionHookDiscoverer(logger *logrus.Logger, root string, d := &deviceFolderPermissions{ logger: logger, - root: root, + driverRoot: driverRoot, nvidiaCTKPath: nvidiaCTKPath, folders: folders, } diff --git a/cmd/nvidia-ctk/cdi/generate/driver.go b/cmd/nvidia-ctk/cdi/generate/driver.go index bea3068c..0b2accd8 100644 --- a/cmd/nvidia-ctk/cdi/generate/driver.go +++ b/cmd/nvidia-ctk/cdi/generate/driver.go @@ -30,20 +30,20 @@ import ( // NewDriverDiscoverer creates a discoverer for the libraries and binaries associated with a driver installation. // The supplied NVML Library is used to query the expected driver version. -func NewDriverDiscoverer(logger *logrus.Logger, root string, nvidiaCTKPath string, nvmllib nvml.Interface) (discover.Discover, error) { +func NewDriverDiscoverer(logger *logrus.Logger, driverRoot string, nvidiaCTKPath string, nvmllib nvml.Interface) (discover.Discover, error) { version, r := nvmllib.SystemGetDriverVersion() if r != nvml.SUCCESS { return nil, fmt.Errorf("failed to determine driver version: %v", r) } - libraries, err := NewDriverLibraryDiscoverer(logger, root, nvidiaCTKPath, version) + libraries, err := NewDriverLibraryDiscoverer(logger, driverRoot, nvidiaCTKPath, version) if err != nil { return nil, fmt.Errorf("failed to create discoverer for driver libraries: %v", err) } - firmwares := NewDriverFirmwareDiscoverer(logger, root, version) + firmwares := NewDriverFirmwareDiscoverer(logger, driverRoot, version) - binaries := NewDriverBinariesDiscoverer(logger, root) + binaries := NewDriverBinariesDiscoverer(logger, driverRoot) d := discover.Merge( libraries, @@ -55,8 +55,8 @@ func NewDriverDiscoverer(logger *logrus.Logger, root string, nvidiaCTKPath strin } // NewDriverLibraryDiscoverer creates a discoverer for the libraries associated with the specified driver version. -func NewDriverLibraryDiscoverer(logger *logrus.Logger, root string, nvidiaCTKPath string, version string) (discover.Discover, error) { - libraryPaths, err := getVersionLibs(logger, root, version) +func NewDriverLibraryDiscoverer(logger *logrus.Logger, driverRoot string, nvidiaCTKPath string, version string) (discover.Discover, error) { + libraryPaths, err := getVersionLibs(logger, driverRoot, version) if err != nil { return nil, fmt.Errorf("failed to get libraries for driver version: %v", err) } @@ -65,14 +65,14 @@ func NewDriverLibraryDiscoverer(logger *logrus.Logger, root string, nvidiaCTKPat logger, lookup.NewFileLocator( lookup.WithLogger(logger), - lookup.WithRoot(root), + lookup.WithRoot(driverRoot), ), - root, + driverRoot, libraryPaths, ) cfg := &discover.Config{ - Root: root, + Root: driverRoot, NvidiaCTKPath: nvidiaCTKPath, } hooks, _ := discover.NewLDCacheUpdateHook(logger, libraries, cfg) @@ -86,25 +86,25 @@ func NewDriverLibraryDiscoverer(logger *logrus.Logger, root string, nvidiaCTKPat } // NewDriverFirmwareDiscoverer creates a discoverer for GSP firmware associated with the specified driver version. -func NewDriverFirmwareDiscoverer(logger *logrus.Logger, root string, version string) discover.Discover { +func NewDriverFirmwareDiscoverer(logger *logrus.Logger, driverRoot string, version string) discover.Discover { gspFirmwarePath := filepath.Join("/lib/firmware/nvidia", version, "gsp.bin") return discover.NewMounts( logger, lookup.NewFileLocator( lookup.WithLogger(logger), - lookup.WithRoot(root), + lookup.WithRoot(driverRoot), ), - root, + driverRoot, []string{gspFirmwarePath}, ) } // NewDriverBinariesDiscoverer creates a discoverer for GSP firmware associated with the GPU driver. -func NewDriverBinariesDiscoverer(logger *logrus.Logger, root string) discover.Discover { +func NewDriverBinariesDiscoverer(logger *logrus.Logger, driverRoot string) discover.Discover { return discover.NewMounts( logger, - lookup.NewExecutableLocator(logger, root), - root, + lookup.NewExecutableLocator(logger, driverRoot), + driverRoot, []string{ "nvidia-smi", /* System management interface */ "nvidia-debugdump", /* GPU coredump utility */ @@ -116,12 +116,12 @@ func NewDriverBinariesDiscoverer(logger *logrus.Logger, root string) discover.Di } // getVersionLibs checks the LDCache for libraries ending in the specified driver version. -// Although the ldcache at the specified root is queried, the paths are returned relative to this root. +// Although the ldcache at the specified driverRoot is queried, the paths are returned relative to this driverRoot. // This allows the standard mount location logic to be used for resolving the mounts. -func getVersionLibs(logger *logrus.Logger, root string, version string) ([]string, error) { +func getVersionLibs(logger *logrus.Logger, driverRoot string, version string) ([]string, error) { logger.Infof("Using driver version %v", version) - cache, err := ldcache.New(logger, root) + cache, err := ldcache.New(logger, driverRoot) if err != nil { return nil, fmt.Errorf("failed to load ldcache: %v", err) } @@ -143,13 +143,13 @@ func getVersionLibs(logger *logrus.Logger, root string, version string) ([]strin } } - if root == "/" || root == "" { + if driverRoot == "/" || driverRoot == "" { return libs, nil } var relative []string for _, l := range libs { - relative = append(relative, strings.TrimPrefix(l, root)) + relative = append(relative, strings.TrimPrefix(l, driverRoot)) } return relative, nil diff --git a/cmd/nvidia-ctk/cdi/generate/full-gpu.go b/cmd/nvidia-ctk/cdi/generate/full-gpu.go index 7b19f246..52039eaa 100644 --- a/cmd/nvidia-ctk/cdi/generate/full-gpu.go +++ b/cmd/nvidia-ctk/cdi/generate/full-gpu.go @@ -32,7 +32,7 @@ import ( // byPathHookDiscoverer discovers the entities required for injecting by-path DRM device links type byPathHookDiscoverer struct { logger *logrus.Logger - root string + driverRoot string nvidiaCTKPath string pciBusID string } @@ -40,7 +40,7 @@ type byPathHookDiscoverer struct { var _ discover.Discover = (*byPathHookDiscoverer)(nil) // NewFullGPUDiscoverer creates a discoverer for the full GPU defined by the specified device. -func NewFullGPUDiscoverer(logger *logrus.Logger, root string, nvidiaCTKPath string, d device.Device) (discover.Discover, error) { +func NewFullGPUDiscoverer(logger *logrus.Logger, driverRoot string, nvidiaCTKPath string, d device.Device) (discover.Discover, error) { // TODO: The functionality to get device paths should be integrated into the go-nvlib/pkg/device.Device interface. // This will allow reuse here and in other code where the paths are queried such as the NVIDIA device plugin. minor, ret := d.GetMinorNumber() @@ -65,12 +65,12 @@ func NewFullGPUDiscoverer(logger *logrus.Logger, root string, nvidiaCTKPath stri deviceNodes := discover.NewCharDeviceDiscoverer( logger, deviceNodePaths, - root, + driverRoot, ) byPathHooks := &byPathHookDiscoverer{ logger: logger, - root: root, + driverRoot: driverRoot, nvidiaCTKPath: nvidiaCTKPath, pciBusID: pciBusID, } @@ -127,7 +127,7 @@ func (d *byPathHookDiscoverer) deviceNodeLinks() ([]string, error) { var links []string for _, c := range candidates { - linkPath := filepath.Join(d.root, c) + linkPath := filepath.Join(d.driverRoot, c) device, err := os.Readlink(linkPath) if err != nil { d.logger.Warningf("Failed to evaluate symlink %v; ignoring", linkPath) diff --git a/cmd/nvidia-ctk/cdi/generate/generate.go b/cmd/nvidia-ctk/cdi/generate/generate.go index 23bd17c9..66fc32dd 100644 --- a/cmd/nvidia-ctk/cdi/generate/generate.go +++ b/cmd/nvidia-ctk/cdi/generate/generate.go @@ -47,7 +47,7 @@ type config struct { output string format string deviceNameStrategy string - root string + driverRoot string nvidiaCTKPath string } @@ -94,9 +94,9 @@ func (m command) build() *cli.Command { Destination: &cfg.deviceNameStrategy, }, &cli.StringFlag{ - Name: "root", - Usage: "Specify the root to use when discovering the entities that should be included in the CDI specification.", - Destination: &cfg.root, + Name: "driver-root", + Usage: "Specify the NVIDIA GPU driver root to use when discovering the entities that should be included in the CDI specification.", + Destination: &cfg.driverRoot, }, &cli.StringFlag{ Name: "nvidia-ctk-path", @@ -132,7 +132,7 @@ func (m command) run(c *cli.Context, cfg *config) error { } spec, err := m.generateSpec( - cfg.root, + cfg.driverRoot, discover.FindNvidiaCTK(m.logger, cfg.nvidiaCTKPath), deviceNamer, ) @@ -214,7 +214,7 @@ func writeToOutput(format string, data []byte, output io.Writer) error { return nil } -func (m command) generateSpec(root string, nvidiaCTKPath string, namer deviceNamer) (*specs.Spec, error) { +func (m command) generateSpec(driverRoot string, nvidiaCTKPath string, namer deviceNamer) (*specs.Spec, error) { nvmllib := nvml.New() if r := nvmllib.Init(); r != nvml.SUCCESS { return nil, r @@ -223,7 +223,7 @@ func (m command) generateSpec(root string, nvidiaCTKPath string, namer deviceNam devicelib := device.New(device.WithNvml(nvmllib)) - deviceSpecs, err := m.generateDeviceSpecs(devicelib, root, nvidiaCTKPath, namer) + deviceSpecs, err := m.generateDeviceSpecs(devicelib, driverRoot, nvidiaCTKPath, namer) if err != nil { return nil, fmt.Errorf("failed to create device CDI specs: %v", err) } @@ -234,7 +234,7 @@ func (m command) generateSpec(root string, nvidiaCTKPath string, namer deviceNam allEdits := edits.NewContainerEdits() - ipcs, err := NewIPCDiscoverer(m.logger, root) + ipcs, err := NewIPCDiscoverer(m.logger, driverRoot) if err != nil { return nil, fmt.Errorf("failed to create discoverer for IPC sockets: %v", err) } @@ -250,12 +250,12 @@ func (m command) generateSpec(root string, nvidiaCTKPath string, namer deviceNam allEdits.Append(ipcEdits) - common, err := NewCommonDiscoverer(m.logger, root, nvidiaCTKPath, nvmllib) + common, err := NewCommonDiscoverer(m.logger, driverRoot, nvidiaCTKPath, nvmllib) if err != nil { return nil, fmt.Errorf("failed to create discoverer for common entities: %v", err) } - deviceFolderPermissionHooks, err := NewDeviceFolderPermissionHookDiscoverer(m.logger, root, nvidiaCTKPath, deviceSpecs) + deviceFolderPermissionHooks, err := NewDeviceFolderPermissionHookDiscoverer(m.logger, driverRoot, nvidiaCTKPath, deviceSpecs) if err != nil { return nil, fmt.Errorf("failed to generated permission hooks for device nodes: %v", err) } @@ -286,7 +286,7 @@ func (m command) generateSpec(root string, nvidiaCTKPath string, namer deviceNam return &spec, nil } -func (m command) generateDeviceSpecs(devicelib device.Interface, root string, nvidiaCTKPath string, namer deviceNamer) ([]specs.Device, error) { +func (m command) generateDeviceSpecs(devicelib device.Interface, driverRoot string, nvidiaCTKPath string, namer deviceNamer) ([]specs.Device, error) { var deviceSpecs []specs.Device err := devicelib.VisitDevices(func(i int, d device.Device) error { @@ -297,7 +297,7 @@ func (m command) generateDeviceSpecs(devicelib device.Interface, root string, nv if isMigEnabled { return nil } - device, err := NewFullGPUDiscoverer(m.logger, root, nvidiaCTKPath, d) + device, err := NewFullGPUDiscoverer(m.logger, driverRoot, nvidiaCTKPath, d) if err != nil { return fmt.Errorf("failed to create device: %v", err) } diff --git a/cmd/nvidia-ctk/cdi/generate/ipc.go b/cmd/nvidia-ctk/cdi/generate/ipc.go index e7c940b1..3cd96ed8 100644 --- a/cmd/nvidia-ctk/cdi/generate/ipc.go +++ b/cmd/nvidia-ctk/cdi/generate/ipc.go @@ -23,14 +23,14 @@ import ( ) // NewIPCDiscoverer creats a discoverer for NVIDIA IPC sockets. -func NewIPCDiscoverer(logger *logrus.Logger, root string) (discover.Discover, error) { +func NewIPCDiscoverer(logger *logrus.Logger, driverRoot string) (discover.Discover, error) { d := discover.NewMounts( logger, lookup.NewFileLocator( lookup.WithLogger(logger), - lookup.WithRoot(root), + lookup.WithRoot(driverRoot), ), - root, + driverRoot, []string{ "/var/run/nvidia-persistenced/socket", "/var/run/nvidia-fabricmanager/socket", diff --git a/cmd/nvidia-ctk/cdi/generate/mig-device.go b/cmd/nvidia-ctk/cdi/generate/mig-device.go index f90ea413..ad18e6ad 100644 --- a/cmd/nvidia-ctk/cdi/generate/mig-device.go +++ b/cmd/nvidia-ctk/cdi/generate/mig-device.go @@ -27,7 +27,7 @@ import ( ) // NewMigDeviceDiscoverer creates a discoverer for the specified mig device and its parent. -func NewMigDeviceDiscoverer(logger *logrus.Logger, root string, parent device.Device, d device.MigDevice) (discover.Discover, error) { +func NewMigDeviceDiscoverer(logger *logrus.Logger, driverRoot string, parent device.Device, d device.MigDevice) (discover.Discover, error) { minor, ret := parent.GetMinorNumber() if ret != nvml.SUCCESS { return nil, fmt.Errorf("error getting GPU device minor number: %v", ret) @@ -68,7 +68,7 @@ func NewMigDeviceDiscoverer(logger *logrus.Logger, root string, parent device.De giCapDevicePath, ciCapDevicePath, }, - root, + driverRoot, ) return deviceNodes, nil