mirror of
https://github.com/clearml/go-nvlib
synced 2025-05-18 10:21:14 +00:00
Detect driver bound to mdev devices
Signed-off-by: Christopher Desiniotis <cdesiniotis@nvidia.com>
This commit is contained in:
parent
805db5afa8
commit
8209652159
@ -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
|
||||||
|
@ -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)
|
||||||
|
@ -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")
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user