Skip to content

Add MDEVName field to nvmdev.Device #8

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Draft
wants to merge 1 commit into
base: main
Choose a base branch
from
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
33 changes: 25 additions & 8 deletions pkg/nvmdev/nvmdev.go
Original file line number Diff line number Diff line change
Expand Up @@ -56,6 +56,7 @@ type ParentDevice struct {
type Device struct {
Path string
UUID string
MDEVName string
MDEVType string
Driver string
IommuGroup int
Expand Down Expand Up @@ -141,6 +142,11 @@ func NewDevice(root string, uuid string) (*Device, error) {
return nil, nil
}

mdevName, err := m.name()
if err != nil {
return nil, fmt.Errorf("error geting mdev name: %v", err)
}

mdevType, err := m.Type()
if err != nil {
return nil, fmt.Errorf("error getting mdev type: %v", err)
Expand All @@ -159,6 +165,7 @@ func NewDevice(root string, uuid string) (*Device, error) {
device := Device{
Path: path,
UUID: uuid,
MDEVName: mdevName,
MDEVType: mdevType,
Driver: driver,
IommuGroup: iommuGroup,
Expand Down Expand Up @@ -198,24 +205,34 @@ func (m mdev) parentDevicePath() string {
return path.Dir(string(m))
}

func (m mdev) Type() (string, error) {
func (m mdev) name() (string, error) {
mdevTypeDir, err := m.resolve("mdev_type")
if err != nil {
return "", err
}

mdevType, err := os.ReadFile(path.Join(mdevTypeDir, "name"))
mdevName, err := os.ReadFile(path.Join(mdevTypeDir, "name"))
if err != nil {
return "", fmt.Errorf("unable to read mdev_type name for mdev %s: %v", m, err)
}
// file in the format: [NVIDIA|GRID] <vGPU type>
mdevTypeStr := strings.TrimSpace(string(mdevType))
mdevTypeSplit := strings.SplitN(mdevTypeStr, " ", 2)
if len(mdevTypeSplit) != 2 {
return "", fmt.Errorf("unable to parse mdev_type name %s for mdev %s", mdevTypeStr, m)
mdevNameStr := strings.TrimSpace(string(mdevName))

return mdevNameStr, nil
}

func (m mdev) Type() (string, error) {
mdevName, err := m.name()
if err != nil {
return "", fmt.Errorf("error getting the mdev_type name: %v", err)
}

// mdevName is in the format: [NVIDIA|GRID] <vGPU type>
mdevNameSplit := strings.SplitN(mdevName, " ", 2)
if len(mdevNameSplit) != 2 {
return "", fmt.Errorf("unable to parse mdev_type name '%s' for mdev %s", mdevName, m)
}

return mdevTypeSplit[1], nil
return mdevNameSplit[1], nil
}

func (m mdev) driver() (string, error) {
Expand Down
6 changes: 4 additions & 2 deletions pkg/nvmdev/nvmdev_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -17,8 +17,9 @@
package nvmdev

import (
"github.com/stretchr/testify/require"
"testing"

"github.com/stretchr/testify/require"
)

func TestNvmdev(t *testing.T) {
Expand Down Expand Up @@ -54,7 +55,8 @@ func TestNvmdev(t *testing.T) {

mdevA100 := mdevs[0]

require.Equal(t, "A100-4C", mdevA100.MDEVType, "Wrong value for mdev_type")
require.Equal(t, "NVIDIA A100-4C", mdevA100.MDEVName, "Wrong value for mdev name")
require.Equal(t, "A100-4C", mdevA100.MDEVType, "Wrong value for mdev type")
require.Equal(t, "vfio_mdev", mdevA100.Driver, "Wrong driver detected for mdev device")
require.Equal(t, 200, mdevA100.IommuGroup, "Wrong value for iommu_group")

Expand Down