Detect driver bound to mdev devices

Signed-off-by: Christopher Desiniotis <cdesiniotis@nvidia.com>
This commit is contained in:
Christopher Desiniotis 2022-07-08 13:11:01 -07:00
parent 805db5afa8
commit 8209652159
3 changed files with 25 additions and 0 deletions

View File

@ -196,6 +196,15 @@ func (m *MockNvmdev) AddMockA100Mdev(uuid string, mdevType string, mdevTypeDir s
return err 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)) err = os.Symlink(mdevDeviceDir, filepath.Join(m.mdevDevicesRoot, uuid))
if err != nil { if err != nil {
return err return err

View File

@ -56,6 +56,7 @@ type Device struct {
Path string Path string
UUID string UUID string
MDEVType string MDEVType string
Driver string
Parent *ParentDevice Parent *ParentDevice
} }
@ -143,10 +144,16 @@ func NewDevice(root string, uuid string) (*Device, error) {
return nil, fmt.Errorf("error getting mdev type: %v", err) 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{ device := Device{
Path: path, Path: path,
UUID: uuid, UUID: uuid,
MDEVType: mdevType, MDEVType: mdevType,
Driver: driver,
Parent: parent, Parent: parent,
} }
@ -193,6 +200,14 @@ func (m mdev) Type() (string, error) {
return mdevTypeSplit[1], nil 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 // NewParentDevice constructs a ParentDevice
func NewParentDevice(devicePath string) (*ParentDevice, error) { func NewParentDevice(devicePath string) (*ParentDevice, error) {
nvdevice, err := nvpci.NewDevice(devicePath) nvdevice, err := nvpci.NewDevice(devicePath)

View File

@ -46,4 +46,5 @@ func TestNvmdev(t *testing.T) {
mdevs, err := nvmdev.GetAllDevices() mdevs, err := nvmdev.GetAllDevices()
require.Nil(t, err, "Error getting NVIDIA MDEV (vGPU) devices") 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, 1, len(mdevs), "Wrong number of NVIDIA MDEV (vGPU) devices")
require.Equal(t, "vfio_mdev", mdevs[0].Driver, "Wrong driver detected for mdev device")
} }