From 8209652159f2e3cc7cdb5de9e475001058282274 Mon Sep 17 00:00:00 2001 From: Christopher Desiniotis Date: Fri, 8 Jul 2022 13:11:01 -0700 Subject: [PATCH] Detect driver bound to mdev devices Signed-off-by: Christopher Desiniotis --- pkg/nvmdev/mock.go | 9 +++++++++ pkg/nvmdev/nvmdev.go | 15 +++++++++++++++ pkg/nvmdev/nvmdev_test.go | 1 + 3 files changed, 25 insertions(+) diff --git a/pkg/nvmdev/mock.go b/pkg/nvmdev/mock.go index ed7a055..626e3e9 100644 --- a/pkg/nvmdev/mock.go +++ b/pkg/nvmdev/mock.go @@ -196,6 +196,15 @@ func (m *MockNvmdev) AddMockA100Mdev(uuid string, mdevType string, mdevTypeDir s return err } + _, err = os.Create(filepath.Join(mdevDeviceDir, "vfio_mdev")) + if err != nil { + return err + } + err = os.Symlink(filepath.Join(mdevDeviceDir, "vfio_mdev"), filepath.Join(mdevDeviceDir, "driver")) + if err != nil { + return err + } + err = os.Symlink(mdevDeviceDir, filepath.Join(m.mdevDevicesRoot, uuid)) if err != nil { return err diff --git a/pkg/nvmdev/nvmdev.go b/pkg/nvmdev/nvmdev.go index 3e4befe..dfcfef7 100644 --- a/pkg/nvmdev/nvmdev.go +++ b/pkg/nvmdev/nvmdev.go @@ -56,6 +56,7 @@ type Device struct { Path string UUID string MDEVType string + Driver string Parent *ParentDevice } @@ -143,10 +144,16 @@ func NewDevice(root string, uuid string) (*Device, error) { return nil, fmt.Errorf("error getting mdev type: %v", err) } + driver, err := m.driver() + if err != nil { + return nil, fmt.Errorf("error detecting driver: %v", err) + } + device := Device{ Path: path, UUID: uuid, MDEVType: mdevType, + Driver: driver, Parent: parent, } @@ -193,6 +200,14 @@ func (m mdev) Type() (string, error) { return mdevTypeSplit[1], nil } +func (m mdev) driver() (string, error) { + driver, err := filepath.EvalSymlinks(path.Join(string(m), "driver")) + if err != nil { + return "", err + } + return filepath.Base(driver), nil +} + // NewParentDevice constructs a ParentDevice func NewParentDevice(devicePath string) (*ParentDevice, error) { nvdevice, err := nvpci.NewDevice(devicePath) diff --git a/pkg/nvmdev/nvmdev_test.go b/pkg/nvmdev/nvmdev_test.go index d044a9c..78d1058 100644 --- a/pkg/nvmdev/nvmdev_test.go +++ b/pkg/nvmdev/nvmdev_test.go @@ -46,4 +46,5 @@ func TestNvmdev(t *testing.T) { mdevs, err := nvmdev.GetAllDevices() require.Nil(t, err, "Error getting NVIDIA MDEV (vGPU) devices") require.Equal(t, 1, len(mdevs), "Wrong number of NVIDIA MDEV (vGPU) devices") + require.Equal(t, "vfio_mdev", mdevs[0].Driver, "Wrong driver detected for mdev device") }