From: "Michael S. Tsirkin" <mst@redhat.com>
To: Peter Xu <peterx@redhat.com>
Cc: qemu-devel@nongnu.org, Paolo Bonzini <pbonzini@redhat.com>,
yi.l.liu@intel.com, Marcel Apfelbaum <marcel@redhat.com>,
Jintack Lim <jintack@cs.columbia.edu>,
Jason Wang <jasowang@redhat.com>,
Alex Williamson <alex.williamson@redhat.com>
Subject: Re: [Qemu-devel] [PATCH v3] intel_iommu: check misordered init when realize
Date: Thu, 2 Mar 2017 07:13:08 +0200 [thread overview]
Message-ID: <20170302071100-mutt-send-email-mst@kernel.org> (raw)
In-Reply-To: <1488425538-13785-1-git-send-email-peterx@redhat.com>
On Thu, Mar 02, 2017 at 11:32:18AM +0800, Peter Xu wrote:
> Intel vIOMMU devices are created with "-device" parameter, while here
> actually we need to make sure the dmar device be created before other
> PCI devices (like vfio-pci, virtio-pci ones) so that we know iommu_fn
> will be setup correctly before realizations of those PCI devices (it is
> legal that PCI device fetch these info during its realization). Now this
> ordering yet cannot be achieved elsewhere, and devices will be created
> in the order that user specified. We need to avoid that.
>
> This patch tries to detect this kind of misordering issue during init of
> VT-d device, then report to guest if misordering happened. In the
> future, we can provide something better to solve it, e.g., to support
> device init ordering, then we can live without this patch.
>
> Signed-off-by: Peter Xu <peterx@redhat.com>
Unfortunately with virtio it's a regression, as it used to
work with iommu. So I'm afraid we need to look into supporting
arbitrary order right now :(
> ---
> v3: added virtio-pci device detection since we have that requirement as
> well now.
>
> PS. this patch should be needed along with Jason's:
> "virtio: unbreak virtio-pci with IOMMU after caching ring translations"
> to make sure virtio devices with vt-d are safe for 2.9.
> ---
> hw/i386/intel_iommu.c | 22 ++++++++++++++++++++++
> 1 file changed, 22 insertions(+)
>
> diff --git a/hw/i386/intel_iommu.c b/hw/i386/intel_iommu.c
> index 22d8226..1077f90 100644
> --- a/hw/i386/intel_iommu.c
> +++ b/hw/i386/intel_iommu.c
> @@ -2560,6 +2560,24 @@ static bool vtd_decide_config(IntelIOMMUState *s, Error **errp)
> return true;
> }
>
> +/*
> + * TODO: we should have a better way to achieve the ordering rather
> + * than this misorder check explicitly against vfio-pci and virtio-pci
> + * devices. Here, there's no easy way to detect init of virtio-pci
> + * devices, instead we detect the virtio bus.
> + */
> +static bool vtd_detected_misorder_init(Error **errp)
> +{
> + if (object_resolve_path_type("", "vfio-pci", NULL) ||
> + object_resolve_path_type("", "virtio-pci-bus", NULL)) {
> + error_setg(errp, "Please specify \"intel-iommu\" before "
> + "all the rest of the devices.");
> + return true;
> + }
> +
> + return false;
> +}
> +
> static void vtd_realize(DeviceState *dev, Error **errp)
> {
> PCMachineState *pcms = PC_MACHINE(qdev_get_machine());
We'd put this somewhere central - this hack is not vtd specific.
> @@ -2567,6 +2585,10 @@ static void vtd_realize(DeviceState *dev, Error **errp)
> IntelIOMMUState *s = INTEL_IOMMU_DEVICE(dev);
> X86IOMMUState *x86_iommu = X86_IOMMU_DEVICE(dev);
>
> + if (vtd_detected_misorder_init(errp)) {
> + return;
> + }
> +
> VTD_DPRINTF(GENERAL, "");
> x86_iommu->type = TYPE_INTEL;
>
> --
> 2.7.4
next prev parent reply other threads:[~2017-03-02 5:13 UTC|newest]
Thread overview: 11+ messages / expand[flat|nested] mbox.gz Atom feed top
2017-03-02 3:32 [Qemu-devel] [PATCH v3] intel_iommu: check misordered init when realize Peter Xu
2017-03-02 5:13 ` Michael S. Tsirkin [this message]
2017-03-02 5:20 ` Peter Xu
2017-03-02 5:28 ` Michael S. Tsirkin
2017-03-02 6:24 ` Marcel Apfelbaum
2017-03-08 8:35 ` Paolo Bonzini
2017-03-08 8:59 ` Peter Xu
2017-03-08 9:25 ` Gerd Hoffmann
2017-03-10 7:04 ` Peter Xu
2017-03-08 10:08 ` Jason Wang
2017-03-08 13:20 ` Marcel Apfelbaum
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=20170302071100-mutt-send-email-mst@kernel.org \
--to=mst@redhat.com \
--cc=alex.williamson@redhat.com \
--cc=jasowang@redhat.com \
--cc=jintack@cs.columbia.edu \
--cc=marcel@redhat.com \
--cc=pbonzini@redhat.com \
--cc=peterx@redhat.com \
--cc=qemu-devel@nongnu.org \
--cc=yi.l.liu@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: 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.