From: Joerg Roedel <joro-zLv9SwRftAIdnm+yROfE0A@public.gmane.org>
To: Jacob Pan <jacob.jun.pan-VuQAYsv1563Yd54FQh9/CA@public.gmane.org>
Cc: Lan Tianyu <tianyu.lan-ral2JQCrhuEAvxtiuMwx3w@public.gmane.org>,
Liu-zLv9SwRftAIdnm+yROfE0A@public.gmane.org, "Tian,
Kevin" <kevin.tian-ral2JQCrhuEAvxtiuMwx3w@public.gmane.org>,
Yi L <yi.l.liu-VuQAYsv1563Yd54FQh9/CA@public.gmane.org>,
LKML <linux-kernel-u79uwXL29TY76Z2rM5mHXA@public.gmane.org>,
iommu-cunTk1MwBs9QetFLy7KEm3xJsTq8ys+cHZ5vskTnxNA@public.gmane.org,
Jean Delvare <khali-PUYAD+kWke1g9hUCZPvPmw@public.gmane.org>,
David Woodhouse <dwmw2-wEGCiKHe2LqWVfeAwA7xHQ@public.gmane.org>
Subject: Re: [PATCH 2/9] iommu/vt-d: add bind_pasid_table function
Date: Wed, 28 Jun 2017 12:02:03 +0200 [thread overview]
Message-ID: <20170628100202.GF14532@8bytes.org> (raw)
In-Reply-To: <1498592883-56224-3-git-send-email-jacob.jun.pan-VuQAYsv1563Yd54FQh9/CA@public.gmane.org>
On Tue, Jun 27, 2017 at 12:47:56PM -0700, Jacob Pan wrote:
> 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 | 117 ++++++++++++++++++++++++++++++++++++++++++
> include/linux/dma_remapping.h | 1 +
> 2 files changed, 118 insertions(+)
>
> diff --git a/drivers/iommu/intel-iommu.c b/drivers/iommu/intel-iommu.c
> index 8274ce3..ef05b59 100644
> --- a/drivers/iommu/intel-iommu.c
> +++ b/drivers/iommu/intel-iommu.c
> @@ -5430,6 +5430,119 @@ 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_info *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;
> + u16 did, *sid;
> + int ret = 0;
> + unsigned long flags;
> + u64 ctx_lo;
> +
> + if (pasidt_binfo == NULL || pasidt_binfo->model != IOMMU_MODEL_INTEL_VTD) {
> + pr_warn("%s: Invalid bind request!\n", __func__);
> + return -EINVAL;
> + }
> +
> + iommu = device_to_iommu(dev, &bus, &devfn);
> + if (!iommu)
> + return -ENODEV;
> +
> + sid = (u16 *)&pasidt_binfo->opaque;
> + /*
> + * check SID, if it is not correct, return success to allow looping
> + * through all devices within a group
> + */
> + if (PCI_DEVID(bus, devfn) != *sid)
> + return 0;
> +
> + if (!dev || !dev_is_pci(dev))
> + return -ENODEV;
> +
> + pdev = to_pci_dev(dev);
> + if (!pci_find_ext_capability(pdev, PCI_EXT_CAP_ID_PRI))
> + return -EINVAL;
> +
> + info = dev->archdata.iommu;
> + if (!info || !info->pasid_supported ||
> + !pci_enable_pasid(pdev, info->pasid_supported & ~1)) {
> + pr_err("PCI %04x:%02x:%02x.%d: has no PASID support\n",
> + pci_domain_nr(pdev->bus), bus, PCI_SLOT(devfn),
> + PCI_FUNC(devfn));
You can either use dev_name() here to decode the device name, or just
use dev_err() instead.
WARNING: multiple messages have this Message-ID (diff)
From: Joerg Roedel <joro@8bytes.org>
To: Jacob Pan <jacob.jun.pan@linux.intel.com>
Cc: iommu@lists.linux-foundation.org,
LKML <linux-kernel@vger.kernel.org>,
David Woodhouse <dwmw2@infradead.org>,
"Liu, Yi L" <yi.l.liu@intel.com>,
Lan Tianyu <tianyu.lan@intel.com>,
"Tian, Kevin" <kevin.tian@intel.com>,
Raj Ashok <ashok.raj@intel.com>,
Alex Williamson <alex.williamson@redhat.com>,
Jean Delvare <khali@linux-fr.org>,
Liu@8bytes.org, Yi L <yi.l.liu@linux.intel.com>
Subject: Re: [PATCH 2/9] iommu/vt-d: add bind_pasid_table function
Date: Wed, 28 Jun 2017 12:02:03 +0200 [thread overview]
Message-ID: <20170628100202.GF14532@8bytes.org> (raw)
In-Reply-To: <1498592883-56224-3-git-send-email-jacob.jun.pan@linux.intel.com>
On Tue, Jun 27, 2017 at 12:47:56PM -0700, Jacob Pan wrote:
> 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 | 117 ++++++++++++++++++++++++++++++++++++++++++
> include/linux/dma_remapping.h | 1 +
> 2 files changed, 118 insertions(+)
>
> diff --git a/drivers/iommu/intel-iommu.c b/drivers/iommu/intel-iommu.c
> index 8274ce3..ef05b59 100644
> --- a/drivers/iommu/intel-iommu.c
> +++ b/drivers/iommu/intel-iommu.c
> @@ -5430,6 +5430,119 @@ 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_info *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;
> + u16 did, *sid;
> + int ret = 0;
> + unsigned long flags;
> + u64 ctx_lo;
> +
> + if (pasidt_binfo == NULL || pasidt_binfo->model != IOMMU_MODEL_INTEL_VTD) {
> + pr_warn("%s: Invalid bind request!\n", __func__);
> + return -EINVAL;
> + }
> +
> + iommu = device_to_iommu(dev, &bus, &devfn);
> + if (!iommu)
> + return -ENODEV;
> +
> + sid = (u16 *)&pasidt_binfo->opaque;
> + /*
> + * check SID, if it is not correct, return success to allow looping
> + * through all devices within a group
> + */
> + if (PCI_DEVID(bus, devfn) != *sid)
> + return 0;
> +
> + if (!dev || !dev_is_pci(dev))
> + return -ENODEV;
> +
> + pdev = to_pci_dev(dev);
> + if (!pci_find_ext_capability(pdev, PCI_EXT_CAP_ID_PRI))
> + return -EINVAL;
> +
> + info = dev->archdata.iommu;
> + if (!info || !info->pasid_supported ||
> + !pci_enable_pasid(pdev, info->pasid_supported & ~1)) {
> + pr_err("PCI %04x:%02x:%02x.%d: has no PASID support\n",
> + pci_domain_nr(pdev->bus), bus, PCI_SLOT(devfn),
> + PCI_FUNC(devfn));
You can either use dev_name() here to decode the device name, or just
use dev_err() instead.
next prev parent reply other threads:[~2017-06-28 10:02 UTC|newest]
Thread overview: 38+ messages / expand[flat|nested] mbox.gz Atom feed top
2017-06-27 19:47 [RFC 0/9] IOMMU driver support for shared virtual memory virtualization Jacob Pan
2017-06-27 19:47 ` Jacob Pan
2017-06-27 19:47 ` [PATCH 1/9] iommu: Introduce bind_pasid_table API function Jacob Pan
[not found] ` <1498592883-56224-2-git-send-email-jacob.jun.pan-VuQAYsv1563Yd54FQh9/CA@public.gmane.org>
2017-06-28 9:57 ` Joerg Roedel
2017-06-28 9:57 ` Joerg Roedel
2017-06-27 19:47 ` [PATCH 3/9] iommu: Introduce iommu do invalidate " Jacob Pan
2017-06-28 10:08 ` Joerg Roedel
[not found] ` <20170628100823.GG14532-zLv9SwRftAIdnm+yROfE0A@public.gmane.org>
2017-06-28 16:09 ` Jacob Pan
2017-06-28 16:09 ` Jacob Pan
2017-06-28 17:07 ` Jean-Philippe Brucker
2017-06-28 17:07 ` Jean-Philippe Brucker
[not found] ` <00a5fe10-98bb-f018-06b6-29af22d014eb-5wv7dgnIgG8@public.gmane.org>
2017-07-05 7:57 ` Tian, Kevin
2017-07-05 7:57 ` Tian, Kevin
[not found] ` <AADFC41AFE54684AB9EE6CBC0274A5D190D25CCB-0J0gbvR4kThpB2pF5aRoyrfspsVTdybXVpNB7YpNyf8@public.gmane.org>
2017-07-05 12:42 ` Jean-Philippe Brucker
2017-07-05 12:42 ` Jean-Philippe Brucker
2017-07-26 9:02 ` Joerg Roedel
2017-07-26 9:02 ` Joerg Roedel
2017-06-27 19:47 ` [PATCH 4/9] iommu/vt-d: Add iommu do invalidate function Jacob Pan
2017-06-27 19:47 ` [PATCH 5/9] iommu: Introduce fault notifier API Jacob Pan
[not found] ` <1498592883-56224-6-git-send-email-jacob.jun.pan-VuQAYsv1563Yd54FQh9/CA@public.gmane.org>
2017-06-28 10:16 ` Joerg Roedel
2017-06-28 10:16 ` Joerg Roedel
[not found] ` <20170628101603.GH14532-zLv9SwRftAIdnm+yROfE0A@public.gmane.org>
2017-06-28 16:16 ` Jacob Pan
2017-06-28 16:16 ` Jacob Pan
2017-06-27 19:48 ` [PATCH 6/9] iommu/vt-d: track device with pasid table bond to a guest Jacob Pan
2017-06-27 19:48 ` [PATCH 7/9] iommu/dmar: notify unrecoverable faults Jacob Pan
2017-06-27 19:48 ` [PATCH 8/9] iommu/intel-svm: notify page request to guest Jacob Pan
2017-06-27 19:48 ` [PATCH 9/9] iommu/intel-svm: replace dev ops with generic fault notifier Jacob Pan
[not found] ` <1498592883-56224-1-git-send-email-jacob.jun.pan-VuQAYsv1563Yd54FQh9/CA@public.gmane.org>
2017-06-27 19:47 ` [PATCH 2/9] iommu/vt-d: add bind_pasid_table function Jacob Pan
2017-06-27 19:47 ` Jacob Pan
[not found] ` <1498592883-56224-3-git-send-email-jacob.jun.pan-VuQAYsv1563Yd54FQh9/CA@public.gmane.org>
2017-06-28 10:02 ` Joerg Roedel [this message]
2017-06-28 10:02 ` Joerg Roedel
2017-07-05 7:38 ` Tian, Kevin
2017-07-05 7:38 ` Tian, Kevin
2017-08-16 9:44 ` [RFC 0/9] IOMMU driver support for shared virtual memory virtualization Joerg Roedel
2017-08-16 9:44 ` Joerg Roedel
[not found] ` <20170816094430.GN30515-zLv9SwRftAIdnm+yROfE0A@public.gmane.org>
2017-08-16 15:14 ` Jacob Pan
2017-08-16 15:14 ` Jacob Pan
2017-08-16 16:23 ` Joerg Roedel
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=20170628100202.GF14532@8bytes.org \
--to=joro-zlv9swrftaidnm+yrofe0a@public.gmane.org \
--cc=Liu-zLv9SwRftAIdnm+yROfE0A@public.gmane.org \
--cc=dwmw2-wEGCiKHe2LqWVfeAwA7xHQ@public.gmane.org \
--cc=iommu-cunTk1MwBs9QetFLy7KEm3xJsTq8ys+cHZ5vskTnxNA@public.gmane.org \
--cc=jacob.jun.pan-VuQAYsv1563Yd54FQh9/CA@public.gmane.org \
--cc=kevin.tian-ral2JQCrhuEAvxtiuMwx3w@public.gmane.org \
--cc=khali-PUYAD+kWke1g9hUCZPvPmw@public.gmane.org \
--cc=linux-kernel-u79uwXL29TY76Z2rM5mHXA@public.gmane.org \
--cc=tianyu.lan-ral2JQCrhuEAvxtiuMwx3w@public.gmane.org \
--cc=yi.l.liu-VuQAYsv1563Yd54FQh9/CA@public.gmane.org \
/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: link
Be 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.