diff --git a/cmd/fpga_plugin/devicecache/devicecache.go b/cmd/fpga_plugin/devicecache/devicecache.go index ad290cb6..bc7450a7 100644 --- a/cmd/fpga_plugin/devicecache/devicecache.go +++ b/cmd/fpga_plugin/devicecache/devicecache.go @@ -242,45 +242,9 @@ func (c *Cache) scanFPGAs() error { return err } - var regions []region - var afus []afu - for _, deviceFile := range deviceFiles { - name := deviceFile.Name() - - if c.fmeReg.MatchString(name) { - if len(regions) > 0 { - return fmt.Errorf("Detected more than one FPGA region for device %s. Only one region per FPGA device is supported", fname) - } - interfaceIDFile := path.Join(deviceFolder, name, "pr", "interface_id") - data, err := ioutil.ReadFile(interfaceIDFile) - if err != nil { - return err - } - devNode, err := c.getDevNode(name) - if err != nil { - return err - } - regions = append(regions, region{ - id: name, - interfaceID: strings.TrimSpace(string(data)), - devNode: devNode, - }) - } else if c.portReg.MatchString(name) { - afuFile := path.Join(deviceFolder, name, "afu_id") - data, err := ioutil.ReadFile(afuFile) - if err != nil { - return err - } - devNode, err := c.getDevNode(name) - if err != nil { - return err - } - afus = append(afus, afu{ - id: name, - afuID: strings.TrimSpace(string(data)), - devNode: devNode, - }) - } + regions, afus, err := c.getSysFsInfo(deviceFolder, deviceFiles, fname) + if err != nil { + return err } if len(regions) == 0 { @@ -301,6 +265,51 @@ func (c *Cache) scanFPGAs() error { return nil } +func (c *Cache) getSysFsInfo(deviceFolder string, deviceFiles []os.FileInfo, fname string) ([]region, []afu, error) { + var regions []region + var afus []afu + for _, deviceFile := range deviceFiles { + name := deviceFile.Name() + + if c.fmeReg.MatchString(name) { + if len(regions) > 0 { + return nil, nil, fmt.Errorf("Detected more than one FPGA region for device %s. Only one region per FPGA device is supported", fname) + } + interfaceIDFile := path.Join(deviceFolder, name, "pr", "interface_id") + data, err := ioutil.ReadFile(interfaceIDFile) + if err != nil { + return nil, nil, err + } + devNode, err := c.getDevNode(name) + if err != nil { + return nil, nil, err + } + regions = append(regions, region{ + id: name, + interfaceID: strings.TrimSpace(string(data)), + devNode: devNode, + }) + } else if c.portReg.MatchString(name) { + afuFile := path.Join(deviceFolder, name, "afu_id") + data, err := ioutil.ReadFile(afuFile) + if err != nil { + return nil, nil, err + } + devNode, err := c.getDevNode(name) + if err != nil { + return nil, nil, err + } + afus = append(afus, afu{ + id: name, + afuID: strings.TrimSpace(string(data)), + devNode: devNode, + }) + } + } + + return regions, afus, nil +} + // Run starts scanning of FPGA devices on the host func (c *Cache) Run() error { for {