@@ -34,41 +34,41 @@ import (
3434
3535// NewDriverDiscoverer creates a discoverer for the libraries and binaries associated with a driver installation.
3636// 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 {
3939 return nil , fmt .Errorf ("failed to initialize NVML: %v" , r )
4040 }
4141 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 )
4444 }
4545 }()
4646
47- version , r := nvmllib .SystemGetDriverVersion ()
47+ version , r := l . nvmllib .SystemGetDriverVersion ()
4848 if r != nvml .SUCCESS {
4949 return nil , fmt .Errorf ("failed to determine driver version: %v" , r )
5050 }
5151
52- return newDriverVersionDiscoverer (logger , driver , nvidiaCDIHookPath , ldconfigPath , version )
52+ return ( * nvcdilib )( l ). newDriverVersionDiscoverer (version )
5353}
5454
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 )
5757 if err != nil {
5858 return nil , fmt .Errorf ("failed to create discoverer for driver libraries: %v" , err )
5959 }
6060
61- ipcs , err := discover .NewIPCDiscoverer (logger , driver .Root )
61+ ipcs , err := discover .NewIPCDiscoverer (l . logger , l . driver .Root )
6262 if err != nil {
6363 return nil , fmt .Errorf ("failed to create discoverer for IPC sockets: %v" , err )
6464 }
6565
66- firmwares , err := NewDriverFirmwareDiscoverer (logger , driver .Root , version )
66+ firmwares , err := NewDriverFirmwareDiscoverer (l . logger , l . driver .Root , version )
6767 if err != nil {
6868 return nil , fmt .Errorf ("failed to create discoverer for GSP firmware: %v" , err )
6969 }
7070
71- binaries := NewDriverBinariesDiscoverer (logger , driver .Root )
71+ binaries := NewDriverBinariesDiscoverer (l . logger , l . driver .Root )
7272
7373 d := discover .Merge (
7474 libraries ,
@@ -81,35 +81,41 @@ func newDriverVersionDiscoverer(logger logger.Interface, driver *root.Driver, nv
8181}
8282
8383// 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 )
8686 if err != nil {
8787 return nil , fmt .Errorf ("failed to get libraries for driver version: %v" , err )
8888 }
8989
9090 libraries := discover .NewMounts (
91- logger ,
91+ l . logger ,
9292 lookup .NewFileLocator (
93- lookup .WithLogger (logger ),
94- lookup .WithRoot (driver .Root ),
93+ lookup .WithLogger (l . logger ),
94+ lookup .WithRoot (l . driver .Root ),
9595 ),
96- driver .Root ,
96+ l . driver .Root ,
9797 libraryPaths ,
9898 )
9999
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
103101
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 ,
112106 )
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 ... )
113119
114120 return d , nil
115121}
0 commit comments