mirror of
https://github.com/kata-containers/kata-containers.git
synced 2025-06-28 00:07:16 +00:00
Merge pull request #662 from dgibson/fix611
drivers: Correct isPCIeDevice logic
This commit is contained in:
commit
c7745a3350
@ -89,9 +89,6 @@ var SysIOMMUPath = "/sys/kernel/iommu_groups"
|
||||
// SysBusPciDevicesPath is static string of /sys/bus/pci/devices
|
||||
var SysBusPciDevicesPath = "/sys/bus/pci/devices"
|
||||
|
||||
// SysBusPciSlotsPath is static string of /sys/bus/pci/slots
|
||||
var SysBusPciSlotsPath = "/sys/bus/pci/slots"
|
||||
|
||||
var getSysDevPath = getSysDevPathImpl
|
||||
|
||||
// DeviceInfo is an embedded type that contains device data common to all types of devices.
|
||||
|
@ -9,6 +9,7 @@ package drivers
|
||||
import (
|
||||
"fmt"
|
||||
"io/ioutil"
|
||||
"os"
|
||||
"path/filepath"
|
||||
"strings"
|
||||
|
||||
@ -22,6 +23,8 @@ const (
|
||||
|
||||
PCIDomain = "0000"
|
||||
PCIeKeyword = "PCIe"
|
||||
|
||||
PCIConfigSpaceSize = 256
|
||||
)
|
||||
|
||||
type PCISysFsType string
|
||||
@ -52,23 +55,17 @@ func isPCIeDevice(bdf string) bool {
|
||||
if len(strings.Split(bdf, ":")) == 2 {
|
||||
bdf = PCIDomain + ":" + bdf
|
||||
}
|
||||
slots, err := ioutil.ReadDir(config.SysBusPciSlotsPath)
|
||||
|
||||
configPath := filepath.Join(config.SysBusPciDevicesPath, bdf, "config")
|
||||
fi, err := os.Stat(configPath)
|
||||
if err != nil {
|
||||
deviceLogger().WithError(err).WithField("path", config.SysBusPciSlotsPath).Warn("failed to list pci slots")
|
||||
return false
|
||||
deviceLogger().WithField("dev-bdf", bdf).WithField("error", err).Warning("Couldn't stat() configuration space file")
|
||||
return false //Who knows?
|
||||
}
|
||||
b := strings.Split(bdf, ".")[0]
|
||||
for _, slot := range slots {
|
||||
address := getPCISlotProperty(slot.Name(), PCISysFsSlotsAddress)
|
||||
if b == address {
|
||||
maxBusSpeed := getPCISlotProperty(slot.Name(), PCISysFsSlotsMaxBusSpeed)
|
||||
if strings.Contains(maxBusSpeed, PCIeKeyword) {
|
||||
return true
|
||||
}
|
||||
}
|
||||
}
|
||||
deviceLogger().WithField("dev-bdf", bdf).Debug("can not find slot for bdf of pci device")
|
||||
return false
|
||||
|
||||
// Plain PCI devices hav 256 bytes of configuration space,
|
||||
// PCI-Express devices have 4096 bytes
|
||||
return fi.Size() > PCIConfigSpaceSize
|
||||
}
|
||||
|
||||
// read from /sys/bus/pci/devices/xxx/property
|
||||
@ -85,17 +82,6 @@ func getPCIDeviceProperty(bdf string, property PCISysFsProperty) string {
|
||||
return rlt
|
||||
}
|
||||
|
||||
// read from /sys/bus/pci/slots/xxx/property
|
||||
func getPCISlotProperty(slot string, property PCISysFsProperty) string {
|
||||
propertyPath := filepath.Join(config.SysBusPciSlotsPath, slot, string(property))
|
||||
rlt, err := readPCIProperty(propertyPath)
|
||||
if err != nil {
|
||||
deviceLogger().WithError(err).WithField("path", propertyPath).Warn("failed to read pci slot property")
|
||||
return ""
|
||||
}
|
||||
return rlt
|
||||
}
|
||||
|
||||
func readPCIProperty(propertyPath string) (string, error) {
|
||||
var (
|
||||
buf []byte
|
||||
|
Loading…
Reference in New Issue
Block a user