The following pull request was submitted through Github.
It can be accessed and reviewed at: https://github.com/lxc/lxd/pull/8176

This e-mail was sent by the LXC bot, direct replies will not reach the author
unless they happen to be subscribed to this list.

=== Description (from pull-request) ===
Hi, I was not able to test this on a system with IOMMU enabled so I would appreciate if you could test it on your servers. Thanks!
From c0ce8e9f9adb2361d10e44d1c2eab9f1259ff7b6 Mon Sep 17 00:00:00 2001
From: Nabil Zubair <nzubai...@utexas.edu>
Date: Sun, 22 Nov 2020 18:28:55 -0600
Subject: [PATCH 1/3] api: add resources_pci_iommu extension

Signed-off-by: Nabil Zubair <nzubai...@utexas.edu>
---
 doc/api-extensions.md | 3 +++
 shared/version/api.go | 1 +
 2 files changed, 4 insertions(+)

diff --git a/doc/api-extensions.md b/doc/api-extensions.md
index b5ae1aa193..5fdc480d10 100644
--- a/doc/api-extensions.md
+++ b/doc/api-extensions.md
@@ -1226,3 +1226,6 @@ send/receive on top of that.
 ## gpu\_mdev
 This adds support for virtual GPUs. It introduces the `mdev` config key for 
GPU devices which takes
 a supported mdev type, e.g. i915-GVTg_V5_4.
+
+## resources\_pci\_iommu
+This adds the IOMMUGroup field for PCI entries in the resources API.
\ No newline at end of file
diff --git a/shared/version/api.go b/shared/version/api.go
index 55cabb5d27..12ae55eb2d 100644
--- a/shared/version/api.go
+++ b/shared/version/api.go
@@ -236,6 +236,7 @@ var APIExtensions = []string{
        "tpm_device_type",
        "storage_zfs_clone_copy_rebase",
        "gpu_mdev",
+       "resources_pci_iommu",
 }
 
 // APIExtensionsCount returns the number of available API extensions.

From 31c3ecbc39c8a59b1afa413d5cf3cf9ecc06d3bb Mon Sep 17 00:00:00 2001
From: Nabil Zubair <nzubai...@utexas.edu>
Date: Sun, 22 Nov 2020 18:33:03 -0600
Subject: [PATCH 2/3] shared/api: Add IOMMUGroup field to ResourcesPCIDevice

Signed-off-by: Nabil Zubair <nzubai...@utexas.edu>
---
 doc/api-extensions.md  | 2 +-
 shared/api/resource.go | 3 +++
 2 files changed, 4 insertions(+), 1 deletion(-)

diff --git a/doc/api-extensions.md b/doc/api-extensions.md
index 5fdc480d10..fa855624cd 100644
--- a/doc/api-extensions.md
+++ b/doc/api-extensions.md
@@ -1228,4 +1228,4 @@ This adds support for virtual GPUs. It introduces the 
`mdev` config key for GPU
 a supported mdev type, e.g. i915-GVTg_V5_4.
 
 ## resources\_pci\_iommu
-This adds the IOMMUGroup field for PCI entries in the resources API.
\ No newline at end of file
+This adds the IOMMUGroup field for PCI entries in the resources API.
diff --git a/shared/api/resource.go b/shared/api/resource.go
index edb590b7aa..d9fd419542 100644
--- a/shared/api/resource.go
+++ b/shared/api/resource.go
@@ -371,6 +371,9 @@ type ResourcesPCIDevice struct {
        ProductID     string `json:"product_id" yaml:"product_id"`
        Vendor        string `json:"vendor" yaml:"vendor"`
        VendorID      string `json:"vendor_id" yaml:"vendor_id"`
+
+       // API extension: resources_pci_iommu
+       IOMMUGroup uint64 `json:"iommu_group" yaml:"iommu_group"`
 }
 
 // ResourcesSystem represents the system

From 7153df32ccd128510b2d74a373cfee70ec20e7cc Mon Sep 17 00:00:00 2001
From: Nabil Zubair <nzubai...@utexas.edu>
Date: Sun, 22 Nov 2020 18:37:08 -0600
Subject: [PATCH 3/3] Add IOMMU group value to PCI devices

Signed-off-by: Nabil Zubair <nzubai...@utexas.edu>
---
 lxd/resources/pci.go | 18 ++++++++++++++++++
 1 file changed, 18 insertions(+)

diff --git a/lxd/resources/pci.go b/lxd/resources/pci.go
index 69c95e0bed..8f062d9f4f 100644
--- a/lxd/resources/pci.go
+++ b/lxd/resources/pci.go
@@ -2,7 +2,9 @@ package resources
 
 import (
        "io/ioutil"
+       "os"
        "path/filepath"
+       "strconv"
        "strings"
 
        "github.com/jaypipes/pcidb"
@@ -116,6 +118,22 @@ func GetPCI() (*api.ResourcesPCI, error) {
                        }
                }
 
+               //Get IOMMU Group
+               iommuGroupSymPath := filepath.Join(sysBusPci, 
device.PCIAddress, "iommu_group")
+               if sysfsExists(iommuGroupSymPath) {
+                       iommuGroupPath, err := os.Readlink(iommuGroupSymPath)
+                       if err != nil {
+                               return nil, errors.Wrapf(err, "Failed to 
readlink %q", iommuGroupSymPath)
+                       }
+                       iommuGroup := filepath.Base(iommuGroupPath)
+                       device.IOMMUGroup, err = strconv.ParseUint(iommuGroup, 
10, 64)
+                       if err != nil {
+                               return nil, errors.Wrapf(err, "Failed to parse 
%q", iommuGroup)
+                       }
+               } else {
+                       device.IOMMUGroup = 0
+               }
+
                pci.Devices = append(pci.Devices, device)
                pci.Total++
        }
_______________________________________________
lxc-devel mailing list
lxc-devel@lists.linuxcontainers.org
http://lists.linuxcontainers.org/listinfo/lxc-devel

Reply via email to