[lxc-devel] [lxd/master] gpu: skip non-existing Nvidia devices

brauner on Github lxc-bot at linuxcontainers.org
Wed Nov 22 11:09:22 UTC 2017


A non-text attachment was scrubbed...
Name: not available
Type: text/x-mailbox
Size: 536 bytes
Desc: not available
URL: <http://lists.linuxcontainers.org/pipermail/lxc-devel/attachments/20171122/65d70506/attachment.bin>
-------------- next part --------------
From de70922e68967569c6bbacec162b24cd1a9664a2 Mon Sep 17 00:00:00 2001
From: Christian Brauner <christian.brauner at ubuntu.com>
Date: Wed, 22 Nov 2017 12:06:15 +0100
Subject: [PATCH] gpu: skip non-existing Nvidia devices

When the Nvidia driver isn't loaded the needed information about Nvidia gpu
devices cannot be gathered. In this case skip trying to list Nvidia cards.

Closes #4044.

Signed-off-by: Christian Brauner <christian.brauner at ubuntu.com>
---
 lxd/devices.go | 27 ++++++++++++++++++---------
 1 file changed, 18 insertions(+), 9 deletions(-)

diff --git a/lxd/devices.go b/lxd/devices.go
index 9b6edbfc1..bf2772a83 100644
--- a/lxd/devices.go
+++ b/lxd/devices.go
@@ -194,15 +194,6 @@ func deviceLoadGpu() ([]gpuDevice, []nvidiaGpuDevices, error) {
 				continue
 			}
 
-			if isCard {
-				// If it is a card it's minor number will be its id.
-				tmpGpu.id = strconv.Itoa(minorInt)
-				tmp := cardIds{
-					id:  tmpGpu.id,
-					pci: tmpGpu.pci,
-				}
-				cards = append(cards, tmp)
-			}
 			// Find matching /dev/nvidia* entry for /dev/dri/card*
 			if tmpGpu.isNvidiaGpu() && isCard {
 				if !isNvidia {
@@ -212,6 +203,10 @@ func deviceLoadGpu() ([]gpuDevice, []nvidiaGpuDevices, error) {
 				nvidiaPath := fmt.Sprintf("/proc/driver/nvidia/gpus/%s/information", tmpGpu.pci)
 				buf, err := ioutil.ReadFile(nvidiaPath)
 				if err != nil {
+					if os.IsNotExist(err) {
+						continue
+					}
+
 					return nil, nil, err
 				}
 				strBuf := strings.TrimSpace(string(buf))
@@ -240,6 +235,10 @@ func deviceLoadGpu() ([]gpuDevice, []nvidiaGpuDevices, error) {
 				stat := syscall.Stat_t{}
 				err = syscall.Stat(nvidiaPath, &stat)
 				if err != nil {
+					if os.IsNotExist(err) {
+						continue
+					}
+
 					return nil, nil, err
 				}
 				tmpGpu.nvidia.path = nvidiaPath
@@ -247,6 +246,16 @@ func deviceLoadGpu() ([]gpuDevice, []nvidiaGpuDevices, error) {
 				tmpGpu.nvidia.minor = shared.Minor(stat.Rdev)
 				tmpGpu.nvidia.id = strconv.Itoa(tmpGpu.nvidia.minor)
 			}
+
+			if isCard {
+				// If it is a card it's minor number will be its id.
+				tmpGpu.id = strconv.Itoa(minorInt)
+				tmp := cardIds{
+					id:  tmpGpu.id,
+					pci: tmpGpu.pci,
+				}
+				cards = append(cards, tmp)
+			}
 			gpus = append(gpus, tmpGpu)
 		}
 	}


More information about the lxc-devel mailing list