From: Peter Xu <peterx@redhat.com>
To: Jason Wang <jasowang@redhat.com>
Cc: qemu-devel@nongnu.org, Tian Kevin <kevin.tian@intel.com>,
"Michael S . Tsirkin" <mst@redhat.com>,
Alex Williamson <alex.williamson@redhat.com>,
Jintack Lim <jintack@cs.columbia.edu>
Subject: Re: [Qemu-devel] [PATCH v2 00/10] intel-iommu: nested vIOMMU, cleanups, bug fixes
Date: Thu, 17 May 2018 10:45:44 +0800 [thread overview]
Message-ID: <20180517024544.GK9089@xz-mi> (raw)
In-Reply-To: <ab9ca375-76e3-baa8-9e60-40a73e9a354a@redhat.com>
On Wed, May 16, 2018 at 09:57:40PM +0800, Jason Wang wrote:
>
>
> On 2018年05月16日 14:30, Peter Xu wrote:
> > On Fri, May 04, 2018 at 11:08:01AM +0800, Peter Xu wrote:
> > > v2:
> > > - fix patchew code style warnings
> > > - interval tree: postpone malloc when inserting; simplify node remove
> > > a bit where proper [Jason]
> > > - fix up comment and commit message for iommu lock patch [Kevin]
> > > - protect context cache too using the iommu lock [Kevin, Jason]
> > > - add vast comment in patch 8 to explain the modify-PTE problem
> > > [Jason, Kevin]
> > We can hold a bit on reviewing this series. Jintack reported a scp
> > DMAR issue that might happen even with L1 guest with this series, and
> > the scp can stall after copied tens or hundreds of MBs randomly. I'm
> > still investigating the problem. This problem should be related to
> > deferred flushing of VT-d kernel driver, since the problem will go
> > away if we use "intel_iommu=on,strict". However I'm still trying to
> > figure out what's the thing behind the scene even with that deferred
> > flushing feature.
>
> I vaguely remember recent upstream vfio support delayed flush, maybe it's
> related.
I'm a bit confused on why vfio is related to the deferred flushing.
Could you provide a pointer for this?
>
> >
> > Meanwhile, during the investigation I found another "possibly valid"
> > use case about the modify-PTE problem that Jason has mentioned when
> > with deferred flushing:
> >
> > vcpu1 vcpu2
> > map page A
> > explicitly send PSI for A
> > queue unmap page A [1]
> > map the same page A [2]
> > explcitly send PSI for A [3]
> > flush unmap page A [4]
> >
> > Due to deferred flushing, the UNMAP PSI might be postponed (or it can
> > be finally a DSI) from step [1] to step [4]. If we allocate the same
> > page somewhere else, we might trigger this modify-PTE at [2] since we
> > haven't yet received the deferred PSI to unmap A from vcpu1.
> >
> > Note that this will not happen with latest upstream Linux, since the
> > IOVA allocation algorithm in current Linux kernel made sure that the
> > IOVA range won't be freed until [4], so we can't really allocate the
> > same page address at [2].
>
> Yes, so the vfio + vIOMMU work will probably uncover more bugs in the IOMMU
> driver (especially CM mode). I suspect CM mode does not have sufficient test
> (since it probably wasn't used in any production environment before the vfio
> + vIOMMU work).
Yes maybe. I might possibly continue investigating some of this after
this "functional" series. So my plan is that firstly we make it work
functionally (even we can allow some trivial bugs, but scp error is
not in count), then we consider other things.
>
> > However this let me tend to agree with
> > Jason and Kevin's worry on future potential issues if that can be
> > triggered easily by common guest kernel bugs. So now I'm considering
> > to drop my mergable interval tree but just use a simpler tree to cache
> > everything including translated addresses. The metadata will possibly
> > take 2% of managed memory if with that.
> >
>
> Good to know this, we can start from the way we know correct for sure then
> optimizations on top.
Yes.
Btw, still it's not really "correct" here AFAIU - the correct thing
should be that we "modify" the PTE without any invalid DMA window.
Now even if I switch to the other method we still need to unmap and
remap, so we will still have an invalid window for that DMA range.
For example, if Linux kernel frees IOVA ranges after queueing the
unmap in current Linux VT-d drivers (again, this does not exist, but
I'm just assuming), then my current series will be affected while the
other way won't be affected. I'll still add some comment there to
clarify this as TODO.
Thanks,
--
Peter Xu
next prev parent reply other threads:[~2018-05-17 2:45 UTC|newest]
Thread overview: 40+ messages / expand[flat|nested] mbox.gz Atom feed top
2018-05-04 3:08 [Qemu-devel] [PATCH v2 00/10] intel-iommu: nested vIOMMU, cleanups, bug fixes Peter Xu
2018-05-04 3:08 ` [Qemu-devel] [PATCH v2 01/10] intel-iommu: send PSI always even if across PDEs Peter Xu
2018-05-17 14:42 ` Auger Eric
2018-05-18 3:41 ` Peter Xu
2018-05-18 7:39 ` Auger Eric
2018-05-04 3:08 ` [Qemu-devel] [PATCH v2 02/10] intel-iommu: remove IntelIOMMUNotifierNode Peter Xu
2018-05-17 9:46 ` Auger Eric
2018-05-17 10:02 ` Peter Xu
2018-05-17 10:10 ` Auger Eric
2018-05-17 10:14 ` Peter Xu
2018-05-04 3:08 ` [Qemu-devel] [PATCH v2 03/10] intel-iommu: add iommu lock Peter Xu
2018-05-17 14:32 ` Auger Eric
2018-05-18 5:32 ` Peter Xu
2018-05-04 3:08 ` [Qemu-devel] [PATCH v2 04/10] intel-iommu: only do page walk for MAP notifiers Peter Xu
2018-05-17 13:39 ` Auger Eric
2018-05-18 5:53 ` Peter Xu
2018-05-18 7:38 ` Auger Eric
2018-05-18 10:02 ` Peter Xu
2018-05-04 3:08 ` [Qemu-devel] [PATCH v2 05/10] intel-iommu: introduce vtd_page_walk_info Peter Xu
2018-05-17 14:32 ` Auger Eric
2018-05-18 5:59 ` Peter Xu
2018-05-18 7:24 ` Auger Eric
2018-05-04 3:08 ` [Qemu-devel] [PATCH v2 06/10] intel-iommu: pass in address space when page walk Peter Xu
2018-05-17 14:32 ` Auger Eric
2018-05-18 6:02 ` Peter Xu
2018-05-04 3:08 ` [Qemu-devel] [PATCH v2 07/10] util: implement simple interval tree logic Peter Xu
2018-05-04 3:08 ` [Qemu-devel] [PATCH v2 08/10] intel-iommu: maintain per-device iova ranges Peter Xu
2018-05-04 3:08 ` [Qemu-devel] [PATCH v2 09/10] intel-iommu: don't unmap all for shadow page table Peter Xu
2018-05-17 17:23 ` Auger Eric
2018-05-18 6:06 ` Peter Xu
2018-05-18 7:31 ` Auger Eric
2018-05-04 3:08 ` [Qemu-devel] [PATCH v2 10/10] intel-iommu: remove notify_unmap for page walk Peter Xu
2018-05-04 3:20 ` [Qemu-devel] [PATCH v2 00/10] intel-iommu: nested vIOMMU, cleanups, bug fixes no-reply
2018-05-04 3:40 ` Peter Xu
2018-05-08 7:29 ` [Qemu-devel] [PATCH v2 11/10] tests: add interval tree unit test Peter Xu
2018-05-16 6:30 ` [Qemu-devel] [PATCH v2 00/10] intel-iommu: nested vIOMMU, cleanups, bug fixes Peter Xu
2018-05-16 13:57 ` Jason Wang
2018-05-17 2:45 ` Peter Xu [this message]
2018-05-17 3:39 ` Alex Williamson
2018-05-17 4:16 ` Peter Xu
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=20180517024544.GK9089@xz-mi \
--to=peterx@redhat.com \
--cc=alex.williamson@redhat.com \
--cc=jasowang@redhat.com \
--cc=jintack@cs.columbia.edu \
--cc=kevin.tian@intel.com \
--cc=mst@redhat.com \
--cc=qemu-devel@nongnu.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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).