@@ -34,41 +34,41 @@ import (
34
34
35
35
// NewDriverDiscoverer creates a discoverer for the libraries and binaries associated with a driver installation.
36
36
// The supplied NVML Library is used to query the expected driver version.
37
- func NewDriverDiscoverer ( logger logger. Interface , driver * root. Driver , nvidiaCDIHookPath string , ldconfigPath string , nvmllib nvml. Interface ) (discover.Discover , error ) {
38
- if r := nvmllib .Init (); r != nvml .SUCCESS {
37
+ func ( l * nvmllib ) NewDriverDiscoverer ( ) (discover.Discover , error ) {
38
+ if r := l . nvmllib .Init (); r != nvml .SUCCESS {
39
39
return nil , fmt .Errorf ("failed to initialize NVML: %v" , r )
40
40
}
41
41
defer func () {
42
- if r := nvmllib .Shutdown (); r != nvml .SUCCESS {
43
- logger .Warningf ("failed to shutdown NVML: %v" , r )
42
+ if r := l . nvmllib .Shutdown (); r != nvml .SUCCESS {
43
+ l . logger .Warningf ("failed to shutdown NVML: %v" , r )
44
44
}
45
45
}()
46
46
47
- version , r := nvmllib .SystemGetDriverVersion ()
47
+ version , r := l . nvmllib .SystemGetDriverVersion ()
48
48
if r != nvml .SUCCESS {
49
49
return nil , fmt .Errorf ("failed to determine driver version: %v" , r )
50
50
}
51
51
52
- return newDriverVersionDiscoverer (logger , driver , nvidiaCDIHookPath , ldconfigPath , version )
52
+ return ( * nvcdilib )( l ). newDriverVersionDiscoverer (version )
53
53
}
54
54
55
- func newDriverVersionDiscoverer ( logger logger. Interface , driver * root. Driver , nvidiaCDIHookPath , ldconfigPath , version string ) (discover.Discover , error ) {
56
- libraries , err := NewDriverLibraryDiscoverer (logger , driver , nvidiaCDIHookPath , ldconfigPath , version )
55
+ func ( l * nvcdilib ) newDriverVersionDiscoverer ( version string ) (discover.Discover , error ) {
56
+ libraries , err := l . NewDriverLibraryDiscoverer (version )
57
57
if err != nil {
58
58
return nil , fmt .Errorf ("failed to create discoverer for driver libraries: %v" , err )
59
59
}
60
60
61
- ipcs , err := discover .NewIPCDiscoverer (logger , driver .Root )
61
+ ipcs , err := discover .NewIPCDiscoverer (l . logger , l . driver .Root )
62
62
if err != nil {
63
63
return nil , fmt .Errorf ("failed to create discoverer for IPC sockets: %v" , err )
64
64
}
65
65
66
- firmwares , err := NewDriverFirmwareDiscoverer (logger , driver .Root , version )
66
+ firmwares , err := NewDriverFirmwareDiscoverer (l . logger , l . driver .Root , version )
67
67
if err != nil {
68
68
return nil , fmt .Errorf ("failed to create discoverer for GSP firmware: %v" , err )
69
69
}
70
70
71
- binaries := NewDriverBinariesDiscoverer (logger , driver .Root )
71
+ binaries := NewDriverBinariesDiscoverer (l . logger , l . driver .Root )
72
72
73
73
d := discover .Merge (
74
74
libraries ,
@@ -81,35 +81,41 @@ func newDriverVersionDiscoverer(logger logger.Interface, driver *root.Driver, nv
81
81
}
82
82
83
83
// NewDriverLibraryDiscoverer creates a discoverer for the libraries associated with the specified driver version.
84
- func NewDriverLibraryDiscoverer ( logger logger. Interface , driver * root. Driver , nvidiaCDIHookPath , ldconfigPath , version string ) (discover.Discover , error ) {
85
- libraryPaths , err := getVersionLibs (logger , driver , version )
84
+ func ( l * nvcdilib ) NewDriverLibraryDiscoverer ( version string ) (discover.Discover , error ) {
85
+ libraryPaths , err := getVersionLibs (l . logger , l . driver , version )
86
86
if err != nil {
87
87
return nil , fmt .Errorf ("failed to get libraries for driver version: %v" , err )
88
88
}
89
89
90
90
libraries := discover .NewMounts (
91
- logger ,
91
+ l . logger ,
92
92
lookup .NewFileLocator (
93
- lookup .WithLogger (logger ),
94
- lookup .WithRoot (driver .Root ),
93
+ lookup .WithLogger (l . logger ),
94
+ lookup .WithRoot (l . driver .Root ),
95
95
),
96
- driver .Root ,
96
+ l . driver .Root ,
97
97
libraryPaths ,
98
98
)
99
99
100
- // TODO: The following should use the version directly.
101
- cudaCompatLibHookDiscoverer := discover .NewCUDACompatHookDiscoverer (logger , nvidiaCDIHookPath , driver )
102
- updateLDCache , _ := discover .NewLDCacheUpdateHook (logger , libraries , nvidiaCDIHookPath , ldconfigPath )
100
+ var discoverers []discover.Discover
103
101
104
- d := discover .Merge (
105
- discover .WithDriverDotSoSymlinks (
106
- libraries ,
107
- version ,
108
- nvidiaCDIHookPath ,
109
- ),
110
- cudaCompatLibHookDiscoverer ,
111
- updateLDCache ,
102
+ driverDotSoSymlinksDiscoverer := discover .WithDriverDotSoSymlinks (
103
+ libraries ,
104
+ version ,
105
+ l .nvidiaCDIHookPath ,
112
106
)
107
+ discoverers = append (discoverers , driverDotSoSymlinksDiscoverer )
108
+
109
+ if l .HookIsSupported (HookEnableCudaCompat ) {
110
+ // TODO: The following should use the version directly.
111
+ cudaCompatLibHookDiscoverer := discover .NewCUDACompatHookDiscoverer (l .logger , l .nvidiaCDIHookPath , l .driver )
112
+ discoverers = append (discoverers , cudaCompatLibHookDiscoverer )
113
+ }
114
+
115
+ updateLDCache , _ := discover .NewLDCacheUpdateHook (l .logger , libraries , l .nvidiaCDIHookPath , l .ldconfigPath )
116
+ discoverers = append (discoverers , updateLDCache )
117
+
118
+ d := discover .Merge (discoverers ... )
113
119
114
120
return d , nil
115
121
}
0 commit comments