Skip to content
This repository has been archived by the owner on May 12, 2021. It is now read-only.

Commit

Permalink
virtcontainers: improve algorithm to check Large bar devices
Browse files Browse the repository at this point in the history
Instead of iterate in a loop dividing bytes by 1024, use right shift
to convert Bytes to GBytes and check if that number is greater than 4G

Signed-off-by: Julio Montes <[email protected]>
  • Loading branch information
Julio Montes committed Mar 23, 2020
1 parent 7aff546 commit 3b53114
Showing 1 changed file with 5 additions and 13 deletions.
18 changes: 5 additions & 13 deletions virtcontainers/device/manager/utils.go
Original file line number Diff line number Diff line change
Expand Up @@ -102,7 +102,6 @@ func isLargeBarSpace(resourcePath string) (bool, error) {
// Refer:
// resource format: https://github.com/torvalds/linux/blob/63623fd44972d1ed2bfb6e0fb631dfcf547fd1e7/drivers/pci/pci-sysfs.c#L145
// calculate size : https://github.com/pciutils/pciutils/blob/61ecc14a327de030336f1ff3fea9c7e7e55a90ca/lspci.c#L388
suffix := []string{"", "K", "M", "G", "T"}
for rIdx, line := range strings.Split(string(buf), "\n") {
cols := strings.Fields(line)
// start and end columns are required to calculate the size
Expand All @@ -119,25 +118,18 @@ func isLargeBarSpace(resourcePath string) (bool, error) {
}).Debug("start is greater than end")
continue
}
size := end - start + 1
sIdx := 0
for i := range suffix {
if size/1024 < 1 {
break
}
size /= 1024
sIdx = i + 1
}
// Use right shift to convert Bytes to GBytes
// This is equivalent to ((end - start + 1) / 1024 / 1024 / 1024)
gbSize := (end - start + 1) >> 30
deviceLogger().WithFields(logrus.Fields{
"resource": resourcePath,
"region": rIdx,
"start": cols[0],
"end": cols[1],
"size": size,
"suffix": suffix[sIdx],
"gb-size": gbSize,
}).Debug("Check large bar space device")
//size is large than 4G
if (sIdx == 3 && size > 4) || sIdx > 3 {
if gbSize > 4 {
return true, nil
}
}
Expand Down

0 comments on commit 3b53114

Please sign in to comment.