lists.openwall.net | lists / announce owl-users owl-dev john-users john-dev passwdqc-users yescrypt popa3d-users / oss-security kernel-hardening musl sabotage tlsify passwords / crypt-dev xvendor / Bugtraq Full-Disclosure linux-kernel linux-netdev linux-ext4 linux-hardening PHC | |
Open Source and information security mailing list archives
| ||
|
Date: Thu, 30 Aug 2018 12:09:16 +0800 From: Lu Baolu <baolu.lu@...ux.intel.com> To: Joerg Roedel <joro@...tes.org>, David Woodhouse <dwmw2@...radead.org>, Alex Williamson <alex.williamson@...hat.com>, Kirti Wankhede <kwankhede@...dia.com> Cc: ashok.raj@...el.com, sanjay.k.kumar@...el.com, jacob.jun.pan@...el.com, kevin.tian@...el.com, Jean-Philippe Brucker <jean-philippe.brucker@....com>, yi.l.liu@...el.com, yi.y.sun@...el.com, peterx@...hat.com, tiwei.bie@...el.com, iommu@...ts.linux-foundation.org, kvm@...r.kernel.org, linux-kernel@...r.kernel.org, Lu Baolu <baolu.lu@...ux.intel.com>, Jacob Pan <jacob.jun.pan@...ux.intel.com> Subject: [RFC PATCH v2 04/10] iommu/vt-d: Enable/disable multiple domains per device Add iommu ops for enabling and disabling multiple domains for a device. Cc: Ashok Raj <ashok.raj@...el.com> Cc: Jacob Pan <jacob.jun.pan@...ux.intel.com> Cc: Kevin Tian <kevin.tian@...el.com> Cc: Liu Yi L <yi.l.liu@...el.com> Signed-off-by: Lu Baolu <baolu.lu@...ux.intel.com> --- drivers/iommu/intel-iommu.c | 36 ++++++++++++++++++++++++++++++++++++ include/linux/intel-iommu.h | 1 + 2 files changed, 37 insertions(+) diff --git a/drivers/iommu/intel-iommu.c b/drivers/iommu/intel-iommu.c index 891ae70e7bf2..3606d25bc40c 100644 --- a/drivers/iommu/intel-iommu.c +++ b/drivers/iommu/intel-iommu.c @@ -2501,6 +2501,7 @@ static struct dmar_domain *dmar_insert_one_dev_info(struct intel_iommu *iommu, info->domain = domain; info->iommu = iommu; info->pasid_table = NULL; + info->auxd_enabled = 0; if (dev && dev_is_pci(dev)) { struct pci_dev *pdev = to_pci_dev(info->dev); @@ -5384,6 +5385,39 @@ struct intel_iommu *intel_svm_device_to_iommu(struct device *dev) } #endif /* CONFIG_INTEL_IOMMU_SVM */ +static int intel_iommu_enable_auxd(struct device *dev) +{ + struct device_domain_info *info; + struct dmar_domain *domain; + unsigned long flags; + + if (!scalable_mode_support()) + return -ENODEV; + + domain = get_valid_domain_for_dev(dev); + if (!domain) + return -ENODEV; + + spin_lock_irqsave(&device_domain_lock, flags); + info = dev->archdata.iommu; + info->auxd_enabled = 1; + spin_unlock_irqrestore(&device_domain_lock, flags); + + return 0; +} + +static void intel_iommu_disable_auxd(struct device *dev) +{ + struct device_domain_info *info; + unsigned long flags; + + spin_lock_irqsave(&device_domain_lock, flags); + info = dev->archdata.iommu; + if (!WARN_ON(!info)) + info->auxd_enabled = 0; + spin_unlock_irqrestore(&device_domain_lock, flags); +} + const struct iommu_ops intel_iommu_ops = { .capable = intel_iommu_capable, .domain_alloc = intel_iommu_domain_alloc, @@ -5398,6 +5432,8 @@ const struct iommu_ops intel_iommu_ops = { .get_resv_regions = intel_iommu_get_resv_regions, .put_resv_regions = intel_iommu_put_resv_regions, .device_group = pci_device_group, + .enable_auxd = intel_iommu_enable_auxd, + .disable_auxd = intel_iommu_disable_auxd, .pgsize_bitmap = INTEL_IOMMU_PGSIZES, }; diff --git a/include/linux/intel-iommu.h b/include/linux/intel-iommu.h index b34cf8b887a0..15981245796e 100644 --- a/include/linux/intel-iommu.h +++ b/include/linux/intel-iommu.h @@ -487,6 +487,7 @@ struct device_domain_info { u8 pri_enabled:1; u8 ats_supported:1; u8 ats_enabled:1; + u8 auxd_enabled:1; /* Multiple domains per device */ u8 ats_qdep; struct device *dev; /* it's NULL for PCIe-to-PCI bridge */ struct intel_iommu *iommu; /* IOMMU used by this device */ -- 2.17.1
Powered by blists - more mailing lists