From: Avi Kivity <avi@redhat.com>
To: David Woodhouse <dwmw2@infradead.org>
Cc: Joerg Roedel <joerg.roedel@amd.com>,
iommu@lists.linux-foundation.org, linux-kernel@vger.kernel.org,
Ohad Ben-Cohen <ohad@wizery.com>,
David Brown <davidb@codeaurora.org>,
kvm@vger.kernel.org, Alex Williamson <alex.williamson@redhat.com>
Subject: Re: [PATCH 0/2] Introduce iommu_commit() function
Date: Wed, 16 Nov 2011 11:40:15 +0200 [thread overview]
Message-ID: <4EC384FF.4050003@redhat.com> (raw)
In-Reply-To: <1308843536.16742.48.camel@i7.infradead.org>
On 06/23/2011 06:38 PM, David Woodhouse wrote:
> On Thu, 2011-06-23 at 17:31 +0200, Joerg Roedel wrote:
> > David, I think especially VT-d can benefit from such a callback. I will
> > implement support for it in the AMD IOMMU driver and post a patch-set
> > soon.
> >
> > Any comments, thoughts?
>
> Ick. We *already* do the flushes as appropriate while we're filling the
> page tables. So every time we move on from one page table page to the
> next, we'll flush the old one. And when we've *done* filling the page
> tables for the range we've been asked to map, we flush the last writes
> too.
For the current kvm use case flushing just once on commit is most
efficient. If/when we get resumable io faults, per-page flushing
becomes worthwhile.
> The problem with KVM is that it calls us over and over again to map a
> single 4KiB page.
>
> It doesn't seem simple to make use of a 'commit' function, because we'd
> have to keep track of *which* page tables are dirty.
You could easily do that by using a free bit in the pte as a dirty bit.
You can then choose whether to use per-page flush or a full flush.
> I'd much rather KVM just gave us a list of the pages to map, in a single
> call.
The list can easily be several million pages long.
> Or even a 'translation' callback we could call to get the physical
> address for each page in the range.
This is doable, and is probably most flexible. If the translation also
returns ranges, then you don't have to figure out large mappings yourself.
Not that there's a huge difference between
iommu_begin(iommu_transaction, domain)
for (page in range)
iommu_map(iommu_transaction, page, translate(page))
iommu_commit(iommu_transaction)
and
iommu_map(domain, range, translate)
- one can be converted to the other.
--
error compiling committee.c: too many arguments to function
next prev parent reply other threads:[~2011-11-16 9:40 UTC|newest]
Thread overview: 12+ messages / expand[flat|nested] mbox.gz Atom feed top
2011-06-23 15:31 [PATCH 0/2] Introduce iommu_commit() function Joerg Roedel
2011-06-23 15:31 ` [PATCH 1/2] iommu-api: Introduce iommu_comit function Joerg Roedel
2011-06-23 15:31 ` [PATCH 2/2] KVM: IOMMU: Use iommu_commit() in device-passthrough code Joerg Roedel
2011-06-23 15:38 ` [PATCH 0/2] Introduce iommu_commit() function David Woodhouse
2011-06-23 16:21 ` Roedel, Joerg
2011-06-23 17:20 ` Chris Wright
2011-06-24 8:08 ` Roedel, Joerg
2011-11-16 9:40 ` Avi Kivity [this message]
2011-06-29 5:02 ` KyongHo Cho
2011-06-29 5:51 ` Joerg Roedel
2011-11-16 2:00 ` KyongHo Cho
2011-11-16 12:58 ` 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=4EC384FF.4050003@redhat.com \
--to=avi@redhat.com \
--cc=alex.williamson@redhat.com \
--cc=davidb@codeaurora.org \
--cc=dwmw2@infradead.org \
--cc=iommu@lists.linux-foundation.org \
--cc=joerg.roedel@amd.com \
--cc=kvm@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=ohad@wizery.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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox