From: Jacob Pan <jacob.jun.pan@linux.intel.com> To: iommu@lists.linux-foundation.org, LKML <linux-kernel@vger.kernel.org>, Joerg Roedel <joro@8bytes.org>, David Woodhouse <dwmw2@infradead.org>, Greg Kroah-Hartman <gregkh@linuxfoundation.org>, Alex Williamson <alex.williamson@redhat.com>, Jean-Philippe Brucker <jean-philippe.brucker@arm.com> Cc: Rafael Wysocki <rafael.j.wysocki@intel.com>, "Liu, Yi L" <yi.l.liu@intel.com>, "Tian, Kevin" <kevin.tian@intel.com>, Raj Ashok <ashok.raj@intel.com>, Jean Delvare <khali@linux-fr.org>, "Christoph Hellwig" <hch@infradead.org>, "Lu Baolu" <baolu.lu@linux.intel.com>, Jacob Pan <jacob.jun.pan@linux.intel.com>, Liu, Yi L <yi.l.liu@linux.intel.com> Subject: [PATCH v5 04/23] iommu/vt-d: add bind_pasid_table function Date: Fri, 11 May 2018 13:53:56 -0700 [thread overview] Message-ID: <1526072055-86990-5-git-send-email-jacob.jun.pan@linux.intel.com> (raw) In-Reply-To: <1526072055-86990-1-git-send-email-jacob.jun.pan@linux.intel.com> Add Intel VT-d ops to the generic iommu_bind_pasid_table API functions. The primary use case is for direct assignment of SVM capable device. Originated from emulated IOMMU in the guest, the request goes through many layers (e.g. VFIO). Upon calling host IOMMU driver, caller passes guest PASID table pointer (GPA) and size. Device context table entry is modified by Intel IOMMU specific bind_pasid_table function. This will turn on nesting mode and matching translation type. The unbind operation restores default context mapping. Signed-off-by: Jacob Pan <jacob.jun.pan@linux.intel.com> Signed-off-by: Liu, Yi L <yi.l.liu@linux.intel.com> Signed-off-by: Ashok Raj <ashok.raj@intel.com> --- drivers/iommu/intel-iommu.c | 122 ++++++++++++++++++++++++++++++++++++++++++ include/linux/dma_remapping.h | 1 + 2 files changed, 123 insertions(+) diff --git a/drivers/iommu/intel-iommu.c b/drivers/iommu/intel-iommu.c index a0f81a4..4623294 100644 --- a/drivers/iommu/intel-iommu.c +++ b/drivers/iommu/intel-iommu.c @@ -2409,6 +2409,7 @@ static struct dmar_domain *dmar_insert_one_dev_info(struct intel_iommu *iommu, info->ats_supported = info->pasid_supported = info->pri_supported = 0; info->ats_enabled = info->pasid_enabled = info->pri_enabled = 0; info->ats_qdep = 0; + info->pasid_table_bound = 0; info->dev = dev; info->domain = domain; info->iommu = iommu; @@ -5132,6 +5133,7 @@ static void intel_iommu_put_resv_regions(struct device *dev, #ifdef CONFIG_INTEL_IOMMU_SVM #define MAX_NR_PASID_BITS (20) +#define MIN_NR_PASID_BITS (5) static inline unsigned long intel_iommu_get_pts(struct intel_iommu *iommu) { /* @@ -5258,6 +5260,122 @@ struct intel_iommu *intel_svm_device_to_iommu(struct device *dev) return iommu; } + +static int intel_iommu_bind_pasid_table(struct iommu_domain *domain, + struct device *dev, struct pasid_table_config *pasidt_binfo) +{ + struct intel_iommu *iommu; + struct context_entry *context; + struct dmar_domain *dmar_domain = to_dmar_domain(domain); + struct device_domain_info *info; + struct pci_dev *pdev; + u8 bus, devfn, host_table_pasid_bits; + u16 did, sid; + int ret = 0; + unsigned long flags; + u64 ctx_lo; + + if ((pasidt_binfo->version != PASID_TABLE_CFG_VERSION_1) || + pasidt_binfo->bytes != sizeof(*pasidt_binfo)) + return -EINVAL; + iommu = device_to_iommu(dev, &bus, &devfn); + if (!iommu) + return -ENODEV; + /* VT-d spec section 9.4 says pasid table size is encoded as 2^(x+5) */ + host_table_pasid_bits = intel_iommu_get_pts(iommu) + MIN_NR_PASID_BITS; + if (!pasidt_binfo || pasidt_binfo->pasid_bits > host_table_pasid_bits || + pasidt_binfo->pasid_bits < MIN_NR_PASID_BITS) { + pr_err("Invalid gPASID bits %d, host range %d - %d\n", + pasidt_binfo->pasid_bits, + MIN_NR_PASID_BITS, host_table_pasid_bits); + return -ERANGE; + } + if (!ecap_nest(iommu->ecap)) { + dev_err(dev, "Cannot bind PASID table, no nested translation\n"); + ret = -ENODEV; + goto out; + } + pdev = to_pci_dev(dev); + sid = PCI_DEVID(bus, devfn); + info = dev->archdata.iommu; + + if (!info) { + dev_err(dev, "Invalid device domain info\n"); + ret = -EINVAL; + goto out; + } + if (info->pasid_table_bound) { + dev_err(dev, "Device PASID table already bound\n"); + ret = -EBUSY; + goto out; + } + if (!info->pasid_enabled) { + ret = pci_enable_pasid(pdev, info->pasid_supported & ~1); + if (ret) { + dev_err(dev, "Failed to enable PASID\n"); + goto out; + } + } + spin_lock_irqsave(&iommu->lock, flags); + context = iommu_context_addr(iommu, bus, devfn, 0); + if (!context_present(context)) { + dev_err(dev, "Context not present\n"); + ret = -EINVAL; + goto out_unlock; + } + + /* Anticipate guest to use SVM and owns the first level, so we turn + * nested mode on + */ + ctx_lo = context[0].lo; + ctx_lo |= CONTEXT_NESTE | CONTEXT_PRS | CONTEXT_PASIDE; + ctx_lo &= ~CONTEXT_TT_MASK; + ctx_lo |= CONTEXT_TT_DEV_IOTLB << 2; + context[0].lo = ctx_lo; + + /* Assign guest PASID table pointer and size order */ + ctx_lo = (pasidt_binfo->base_ptr & VTD_PAGE_MASK) | + (pasidt_binfo->pasid_bits - MIN_NR_PASID_BITS); + context[1].lo = ctx_lo; + /* make sure context entry is updated before flushing */ + wmb(); + did = dmar_domain->iommu_did[iommu->seq_id]; + iommu->flush.flush_context(iommu, did, + (((u16)bus) << 8) | devfn, + DMA_CCMD_MASK_NOBIT, + DMA_CCMD_DEVICE_INVL); + iommu->flush.flush_iotlb(iommu, did, 0, 0, DMA_TLB_DSI_FLUSH); + info->pasid_table_bound = 1; +out_unlock: + spin_unlock_irqrestore(&iommu->lock, flags); +out: + return ret; +} + +static void intel_iommu_unbind_pasid_table(struct iommu_domain *domain, + struct device *dev) +{ + struct intel_iommu *iommu; + struct dmar_domain *dmar_domain = to_dmar_domain(domain); + struct device_domain_info *info; + u8 bus, devfn; + + info = dev->archdata.iommu; + if (!info) { + dev_err(dev, "Invalid device domain info\n"); + return; + } + iommu = device_to_iommu(dev, &bus, &devfn); + if (!iommu) { + dev_err(dev, "No IOMMU for device to unbind PASID table\n"); + return; + } + + domain_context_clear(iommu, dev); + + domain_context_mapping_one(dmar_domain, iommu, bus, devfn); + info->pasid_table_bound = 0; +} #endif /* CONFIG_INTEL_IOMMU_SVM */ const struct iommu_ops intel_iommu_ops = { @@ -5266,6 +5384,10 @@ const struct iommu_ops intel_iommu_ops = { .domain_free = intel_iommu_domain_free, .attach_dev = intel_iommu_attach_device, .detach_dev = intel_iommu_detach_device, +#ifdef CONFIG_INTEL_IOMMU_SVM + .bind_pasid_table = intel_iommu_bind_pasid_table, + .unbind_pasid_table = intel_iommu_unbind_pasid_table, +#endif .map = intel_iommu_map, .unmap = intel_iommu_unmap, .map_sg = default_iommu_map_sg, diff --git a/include/linux/dma_remapping.h b/include/linux/dma_remapping.h index 21b3e7d..db290b2 100644 --- a/include/linux/dma_remapping.h +++ b/include/linux/dma_remapping.h @@ -28,6 +28,7 @@ #define CONTEXT_DINVE (1ULL << 8) #define CONTEXT_PRS (1ULL << 9) +#define CONTEXT_NESTE (1ULL << 10) #define CONTEXT_PASIDE (1ULL << 11) struct intel_iommu; -- 2.7.4
WARNING: multiple messages have this Message-ID (diff)
From: Jacob Pan <jacob.jun.pan-VuQAYsv1563Yd54FQh9/CA@public.gmane.org> To: iommu-cunTk1MwBs9QetFLy7KEm3xJsTq8ys+cHZ5vskTnxNA@public.gmane.org, LKML <linux-kernel-u79uwXL29TY76Z2rM5mHXA@public.gmane.org>, Joerg Roedel <joro-zLv9SwRftAIdnm+yROfE0A@public.gmane.org>, David Woodhouse <dwmw2-wEGCiKHe2LqWVfeAwA7xHQ@public.gmane.org>, Greg Kroah-Hartman <gregkh-hQyY1W1yCW8ekmWlsbkhG0B+6BGkLq7r@public.gmane.org>, Alex Williamson <alex.williamson-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>, Jean-Philippe Brucker <jean-philippe.brucker-5wv7dgnIgG8@public.gmane.org> Cc: Yi L <yi.l.liu-VuQAYsv1563Yd54FQh9/CA@public.gmane.org>, Raj Ashok <ashok.raj-ral2JQCrhuEAvxtiuMwx3w@public.gmane.org>, Rafael Wysocki <rafael.j.wysocki-ral2JQCrhuEAvxtiuMwx3w@public.gmane.org>, Liu-i9wRM+HIrmnmtl4Z8vJ8Kg761KYD1DLY@public.gmane.org, Jean Delvare <khali-PUYAD+kWke1g9hUCZPvPmw@public.gmane.org> Subject: [PATCH v5 04/23] iommu/vt-d: add bind_pasid_table function Date: Fri, 11 May 2018 13:53:56 -0700 [thread overview] Message-ID: <1526072055-86990-5-git-send-email-jacob.jun.pan@linux.intel.com> (raw) In-Reply-To: <1526072055-86990-1-git-send-email-jacob.jun.pan-VuQAYsv1563Yd54FQh9/CA@public.gmane.org> Add Intel VT-d ops to the generic iommu_bind_pasid_table API functions. The primary use case is for direct assignment of SVM capable device. Originated from emulated IOMMU in the guest, the request goes through many layers (e.g. VFIO). Upon calling host IOMMU driver, caller passes guest PASID table pointer (GPA) and size. Device context table entry is modified by Intel IOMMU specific bind_pasid_table function. This will turn on nesting mode and matching translation type. The unbind operation restores default context mapping. Signed-off-by: Jacob Pan <jacob.jun.pan-VuQAYsv1563Yd54FQh9/CA@public.gmane.org> Signed-off-by: Liu, Yi L <yi.l.liu-VuQAYsv1563Yd54FQh9/CA@public.gmane.org> Signed-off-by: Ashok Raj <ashok.raj-ral2JQCrhuEAvxtiuMwx3w@public.gmane.org> --- drivers/iommu/intel-iommu.c | 122 ++++++++++++++++++++++++++++++++++++++++++ include/linux/dma_remapping.h | 1 + 2 files changed, 123 insertions(+) diff --git a/drivers/iommu/intel-iommu.c b/drivers/iommu/intel-iommu.c index a0f81a4..4623294 100644 --- a/drivers/iommu/intel-iommu.c +++ b/drivers/iommu/intel-iommu.c @@ -2409,6 +2409,7 @@ static struct dmar_domain *dmar_insert_one_dev_info(struct intel_iommu *iommu, info->ats_supported = info->pasid_supported = info->pri_supported = 0; info->ats_enabled = info->pasid_enabled = info->pri_enabled = 0; info->ats_qdep = 0; + info->pasid_table_bound = 0; info->dev = dev; info->domain = domain; info->iommu = iommu; @@ -5132,6 +5133,7 @@ static void intel_iommu_put_resv_regions(struct device *dev, #ifdef CONFIG_INTEL_IOMMU_SVM #define MAX_NR_PASID_BITS (20) +#define MIN_NR_PASID_BITS (5) static inline unsigned long intel_iommu_get_pts(struct intel_iommu *iommu) { /* @@ -5258,6 +5260,122 @@ struct intel_iommu *intel_svm_device_to_iommu(struct device *dev) return iommu; } + +static int intel_iommu_bind_pasid_table(struct iommu_domain *domain, + struct device *dev, struct pasid_table_config *pasidt_binfo) +{ + struct intel_iommu *iommu; + struct context_entry *context; + struct dmar_domain *dmar_domain = to_dmar_domain(domain); + struct device_domain_info *info; + struct pci_dev *pdev; + u8 bus, devfn, host_table_pasid_bits; + u16 did, sid; + int ret = 0; + unsigned long flags; + u64 ctx_lo; + + if ((pasidt_binfo->version != PASID_TABLE_CFG_VERSION_1) || + pasidt_binfo->bytes != sizeof(*pasidt_binfo)) + return -EINVAL; + iommu = device_to_iommu(dev, &bus, &devfn); + if (!iommu) + return -ENODEV; + /* VT-d spec section 9.4 says pasid table size is encoded as 2^(x+5) */ + host_table_pasid_bits = intel_iommu_get_pts(iommu) + MIN_NR_PASID_BITS; + if (!pasidt_binfo || pasidt_binfo->pasid_bits > host_table_pasid_bits || + pasidt_binfo->pasid_bits < MIN_NR_PASID_BITS) { + pr_err("Invalid gPASID bits %d, host range %d - %d\n", + pasidt_binfo->pasid_bits, + MIN_NR_PASID_BITS, host_table_pasid_bits); + return -ERANGE; + } + if (!ecap_nest(iommu->ecap)) { + dev_err(dev, "Cannot bind PASID table, no nested translation\n"); + ret = -ENODEV; + goto out; + } + pdev = to_pci_dev(dev); + sid = PCI_DEVID(bus, devfn); + info = dev->archdata.iommu; + + if (!info) { + dev_err(dev, "Invalid device domain info\n"); + ret = -EINVAL; + goto out; + } + if (info->pasid_table_bound) { + dev_err(dev, "Device PASID table already bound\n"); + ret = -EBUSY; + goto out; + } + if (!info->pasid_enabled) { + ret = pci_enable_pasid(pdev, info->pasid_supported & ~1); + if (ret) { + dev_err(dev, "Failed to enable PASID\n"); + goto out; + } + } + spin_lock_irqsave(&iommu->lock, flags); + context = iommu_context_addr(iommu, bus, devfn, 0); + if (!context_present(context)) { + dev_err(dev, "Context not present\n"); + ret = -EINVAL; + goto out_unlock; + } + + /* Anticipate guest to use SVM and owns the first level, so we turn + * nested mode on + */ + ctx_lo = context[0].lo; + ctx_lo |= CONTEXT_NESTE | CONTEXT_PRS | CONTEXT_PASIDE; + ctx_lo &= ~CONTEXT_TT_MASK; + ctx_lo |= CONTEXT_TT_DEV_IOTLB << 2; + context[0].lo = ctx_lo; + + /* Assign guest PASID table pointer and size order */ + ctx_lo = (pasidt_binfo->base_ptr & VTD_PAGE_MASK) | + (pasidt_binfo->pasid_bits - MIN_NR_PASID_BITS); + context[1].lo = ctx_lo; + /* make sure context entry is updated before flushing */ + wmb(); + did = dmar_domain->iommu_did[iommu->seq_id]; + iommu->flush.flush_context(iommu, did, + (((u16)bus) << 8) | devfn, + DMA_CCMD_MASK_NOBIT, + DMA_CCMD_DEVICE_INVL); + iommu->flush.flush_iotlb(iommu, did, 0, 0, DMA_TLB_DSI_FLUSH); + info->pasid_table_bound = 1; +out_unlock: + spin_unlock_irqrestore(&iommu->lock, flags); +out: + return ret; +} + +static void intel_iommu_unbind_pasid_table(struct iommu_domain *domain, + struct device *dev) +{ + struct intel_iommu *iommu; + struct dmar_domain *dmar_domain = to_dmar_domain(domain); + struct device_domain_info *info; + u8 bus, devfn; + + info = dev->archdata.iommu; + if (!info) { + dev_err(dev, "Invalid device domain info\n"); + return; + } + iommu = device_to_iommu(dev, &bus, &devfn); + if (!iommu) { + dev_err(dev, "No IOMMU for device to unbind PASID table\n"); + return; + } + + domain_context_clear(iommu, dev); + + domain_context_mapping_one(dmar_domain, iommu, bus, devfn); + info->pasid_table_bound = 0; +} #endif /* CONFIG_INTEL_IOMMU_SVM */ const struct iommu_ops intel_iommu_ops = { @@ -5266,6 +5384,10 @@ const struct iommu_ops intel_iommu_ops = { .domain_free = intel_iommu_domain_free, .attach_dev = intel_iommu_attach_device, .detach_dev = intel_iommu_detach_device, +#ifdef CONFIG_INTEL_IOMMU_SVM + .bind_pasid_table = intel_iommu_bind_pasid_table, + .unbind_pasid_table = intel_iommu_unbind_pasid_table, +#endif .map = intel_iommu_map, .unmap = intel_iommu_unmap, .map_sg = default_iommu_map_sg, diff --git a/include/linux/dma_remapping.h b/include/linux/dma_remapping.h index 21b3e7d..db290b2 100644 --- a/include/linux/dma_remapping.h +++ b/include/linux/dma_remapping.h @@ -28,6 +28,7 @@ #define CONTEXT_DINVE (1ULL << 8) #define CONTEXT_PRS (1ULL << 9) +#define CONTEXT_NESTE (1ULL << 10) #define CONTEXT_PASIDE (1ULL << 11) struct intel_iommu; -- 2.7.4
next prev parent reply other threads:[~2018-05-11 20:53 UTC|newest] Thread overview: 128+ messages / expand[flat|nested] mbox.gz Atom feed top 2018-05-11 20:53 [PATCH v5 00/23] IOMMU and VT-d driver support for Shared Virtual Address (SVA) Jacob Pan 2018-05-11 20:53 ` Jacob Pan 2018-05-11 20:53 ` [PATCH v5 01/23] iommu: introduce bind_pasid_table API function Jacob Pan 2018-05-11 20:53 ` Jacob Pan 2018-08-23 16:34 ` Auger Eric 2018-08-24 12:47 ` Liu, Yi L 2018-08-24 12:47 ` Liu, Yi L 2018-08-24 13:20 ` Auger Eric 2018-08-28 17:04 ` Jacob Pan 2018-08-24 15:00 ` Auger Eric 2018-08-28 5:14 ` Jacob Pan 2018-08-28 8:34 ` Auger Eric 2018-08-28 8:34 ` Auger Eric 2018-08-28 16:36 ` Jacob Pan 2018-05-11 20:53 ` [PATCH v5 02/23] iommu/vt-d: move device_domain_info to header Jacob Pan 2018-05-11 20:53 ` Jacob Pan 2018-05-11 20:53 ` [PATCH v5 03/23] iommu/vt-d: add a flag for pasid table bound status Jacob Pan 2018-05-11 20:53 ` Jacob Pan 2018-05-13 7:33 ` Lu Baolu 2018-05-13 7:33 ` Lu Baolu 2018-05-14 18:51 ` Jacob Pan 2018-05-14 18:51 ` Jacob Pan 2018-05-13 8:01 ` Lu Baolu 2018-05-13 8:01 ` Lu Baolu 2018-05-14 18:52 ` Jacob Pan 2018-05-14 18:52 ` Jacob Pan 2018-05-11 20:53 ` Jacob Pan [this message] 2018-05-11 20:53 ` [PATCH v5 04/23] iommu/vt-d: add bind_pasid_table function Jacob Pan 2018-05-13 9:29 ` Lu Baolu 2018-05-13 9:29 ` Lu Baolu 2018-05-14 20:22 ` Jacob Pan 2018-05-14 20:22 ` Jacob Pan 2018-05-11 20:53 ` [PATCH v5 05/23] iommu: introduce iommu invalidate API function Jacob Pan 2018-05-11 20:53 ` Jacob Pan 2018-05-11 20:53 ` [PATCH v5 06/23] iommu/vt-d: add definitions for PFSID Jacob Pan 2018-05-11 20:53 ` Jacob Pan 2018-05-14 1:36 ` Lu Baolu 2018-05-14 1:36 ` Lu Baolu 2018-05-14 20:30 ` Jacob Pan 2018-05-14 20:30 ` Jacob Pan 2018-05-11 20:53 ` [PATCH v5 07/23] iommu/vt-d: fix dev iotlb pfsid use Jacob Pan 2018-05-14 1:52 ` Lu Baolu 2018-05-14 1:52 ` Lu Baolu 2018-05-14 20:38 ` Jacob Pan 2018-05-14 20:38 ` Jacob Pan 2018-05-11 20:54 ` [PATCH v5 08/23] iommu/vt-d: support flushing more translation cache types Jacob Pan 2018-05-11 20:54 ` Jacob Pan 2018-05-14 2:18 ` Lu Baolu 2018-05-14 2:18 ` Lu Baolu 2018-05-14 20:46 ` Jacob Pan 2018-05-14 20:46 ` Jacob Pan 2018-05-17 8:44 ` kbuild test robot 2018-05-17 8:44 ` kbuild test robot 2018-05-11 20:54 ` [PATCH v5 09/23] iommu/vt-d: add svm/sva invalidate function Jacob Pan 2018-05-11 20:54 ` Jacob Pan 2018-05-14 3:35 ` Lu Baolu 2018-05-14 3:35 ` Lu Baolu 2018-05-14 20:49 ` Jacob Pan 2018-05-11 20:54 ` [PATCH v5 10/23] iommu: introduce device fault data Jacob Pan 2018-05-11 20:54 ` Jacob Pan 2018-09-21 10:07 ` Auger Eric 2018-09-21 17:05 ` Jacob Pan 2018-09-26 10:20 ` Auger Eric 2018-05-11 20:54 ` [PATCH v5 11/23] driver core: add per device iommu param Jacob Pan 2018-05-11 20:54 ` Jacob Pan 2018-05-14 5:27 ` Lu Baolu 2018-05-14 5:27 ` Lu Baolu 2018-05-14 20:52 ` Jacob Pan 2018-05-14 20:52 ` Jacob Pan 2018-05-11 20:54 ` [PATCH v5 12/23] iommu: add a timeout parameter for prq response Jacob Pan 2018-05-11 20:54 ` Jacob Pan 2018-05-11 20:54 ` [PATCH v5 13/23] iommu: introduce device fault report API Jacob Pan 2018-05-14 6:01 ` Lu Baolu 2018-05-14 6:01 ` Lu Baolu 2018-05-14 20:55 ` Jacob Pan 2018-05-14 20:55 ` Jacob Pan 2018-05-15 6:52 ` Lu Baolu 2018-05-15 6:52 ` Lu Baolu 2018-05-17 11:41 ` Liu, Yi L 2018-05-17 11:41 ` Liu, Yi L 2018-05-17 15:59 ` Jacob Pan 2018-05-17 15:59 ` Jacob Pan 2018-05-17 23:22 ` Liu, Yi L 2018-05-21 23:03 ` Jacob Pan 2018-09-06 9:25 ` Auger Eric 2018-09-06 12:42 ` Jean-Philippe Brucker 2018-09-06 13:14 ` Auger Eric 2018-09-06 17:06 ` Jean-Philippe Brucker 2018-09-06 17:06 ` Jean-Philippe Brucker 2018-09-07 7:11 ` Auger Eric 2018-09-07 11:23 ` Jean-Philippe Brucker 2018-09-07 11:23 ` Jean-Philippe Brucker 2018-09-14 13:24 ` Auger Eric 2018-09-17 16:57 ` Jacob Pan 2018-09-25 14:58 ` Jean-Philippe Brucker 2018-09-25 14:58 ` Jean-Philippe Brucker 2018-09-25 22:17 ` Jacob Pan 2018-09-26 10:14 ` Jean-Philippe Brucker 2018-05-11 20:54 ` [PATCH v5 14/23] iommu: introduce page response function Jacob Pan 2018-05-14 6:39 ` Lu Baolu 2018-05-14 6:39 ` Lu Baolu 2018-05-29 16:13 ` Jacob Pan 2018-05-29 16:13 ` Jacob Pan 2018-09-10 14:52 ` Auger Eric 2018-09-10 17:50 ` Jacob Pan 2018-09-10 19:06 ` Auger Eric 2018-09-10 19:06 ` Auger Eric 2018-05-11 20:54 ` [PATCH v5 15/23] iommu: handle page response timeout Jacob Pan 2018-05-14 7:43 ` Lu Baolu 2018-05-14 7:43 ` Lu Baolu 2018-05-29 16:20 ` Jacob Pan 2018-05-30 7:46 ` Lu Baolu 2018-05-11 20:54 ` [PATCH v5 16/23] iommu/config: add build dependency for dmar Jacob Pan 2018-05-11 20:54 ` Jacob Pan 2018-05-11 20:54 ` [PATCH v5 17/23] iommu/vt-d: report non-recoverable faults to device Jacob Pan 2018-05-11 20:54 ` Jacob Pan 2018-05-14 8:17 ` Lu Baolu 2018-05-14 8:17 ` Lu Baolu 2018-05-29 17:33 ` Jacob Pan 2018-05-29 17:33 ` Jacob Pan 2018-05-11 20:54 ` [PATCH v5 18/23] iommu/intel-svm: report device page request Jacob Pan 2018-05-11 20:54 ` [PATCH v5 19/23] iommu/intel-svm: replace dev ops with fault report API Jacob Pan 2018-05-11 20:54 ` [PATCH v5 20/23] iommu/intel-svm: do not flush iotlb for viommu Jacob Pan 2018-05-11 20:54 ` [PATCH v5 21/23] iommu/vt-d: add intel iommu page response function Jacob Pan 2018-05-11 20:54 ` [PATCH v5 22/23] trace/iommu: add sva trace events Jacob Pan 2018-05-11 20:54 ` [PATCH v5 23/23] iommu: use sva invalidate and device fault trace event Jacob Pan 2018-05-29 15:54 ` [PATCH v5 00/23] IOMMU and VT-d driver support for Shared Virtual Address (SVA) Jacob Pan 2018-05-29 15:54 ` Jacob Pan
Reply instructions: You may reply publicly to this message via plain-text email using any one of the following methods: * Save the following mbox file, import it into your mail client, and reply-to-all from there: mbox Avoid top-posting and favor interleaved quoting: https://en.wikipedia.org/wiki/Posting_style#Interleaved_style * Reply using the --to, --cc, and --in-reply-to switches of git-send-email(1): git send-email \ --in-reply-to=1526072055-86990-5-git-send-email-jacob.jun.pan@linux.intel.com \ --to=jacob.jun.pan@linux.intel.com \ --cc=alex.williamson@redhat.com \ --cc=ashok.raj@intel.com \ --cc=baolu.lu@linux.intel.com \ --cc=dwmw2@infradead.org \ --cc=gregkh@linuxfoundation.org \ --cc=hch@infradead.org \ --cc=iommu@lists.linux-foundation.org \ --cc=jean-philippe.brucker@arm.com \ --cc=joro@8bytes.org \ --cc=kevin.tian@intel.com \ --cc=khali@linux-fr.org \ --cc=linux-kernel@vger.kernel.org \ --cc=rafael.j.wysocki@intel.com \ --cc=yi.l.liu@intel.com \ --cc=yi.l.liu@linux.intel.com \ /path/to/YOUR_REPLY https://kernel.org/pub/software/scm/git/docs/git-send-email.html * If your mail client supports setting the In-Reply-To header via mailto: links, try the mailto: linkBe sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes, see mirroring instructions on how to clone and mirror all data and code used by this external index.