qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
From: "Liu, Yi L" <yi.l.liu@linux.intel.com>
To: David Gibson <david@gibson.dropbear.id.au>
Cc: tianyu.lan@intel.com, kevin.tian@intel.com, yi.l.liu@intel.com,
	mst@redhat.com, jasowang@redhat.com, qemu-devel@nongnu.org,
	Peter Xu <peterx@redhat.com>, Auger Eric <eric.auger@redhat.com>,
	alex.williamson@redhat.com, pbonzini@redhat.com
Subject: Re: [Qemu-devel] [RESEND PATCH 2/6] memory: introduce AddressSpaceOps and IOMMUObject
Date: Fri, 12 Jan 2018 18:25:34 +0800	[thread overview]
Message-ID: <20180112102534.GA25168@sky-dev> (raw)
In-Reply-To: <20171220111816.GG5981@umbus.fritz.box>

On Wed, Dec 20, 2017 at 10:18:16PM +1100, David Gibson wrote:
> On Wed, Dec 20, 2017 at 02:47:30PM +0800, Liu, Yi L wrote:
> > On Mon, Dec 18, 2017 at 10:35:31PM +1100, David Gibson wrote:
> > > On Wed, Nov 15, 2017 at 03:16:32PM +0800, Peter Xu wrote:
> > > > On Tue, Nov 14, 2017 at 10:52:54PM +0100, Auger Eric wrote:
> > > > 

[...]

Sorry for the delayed reply, spent some time on reconsidering your comments.

> 
> I'm ok with calling it a "PASID context".
> 
> Thinking about this some more, here are some extra observations:
> 
>  * I think each device needs both a PASID context and an ordinary
>    address space.  The PASID context would be used for bus
>    transactions which include a process id, the address space for
>    those that don't.
> 
>  * Theoretically, the PASID context could be modelled as an array/map
>    of AddressSpace objects for each process ID.  However, creating all
>    those AddressSpace objects in advance might be too expensive.  I
>    can see a couple of options to avoid this:
> 
> 1) Have the PASID context class include a 'translate' method similar
> to the one in IOMMUMemoryRegionClass, but taking a process ID as well
> as an address.  This would avoid creating extra AddressSpace objects,
> but might require duplicating a bunch of the translation code that
> already exists for AddressSpace.
> 
> 2) "Lazily" create AddressSpace objects.  The generic part of the
> PASID aware DMA helper functions would use a cache of AddressSpace's
> for particular process IDs, using the AddressSpace (and MemoryRegion
> within) to translate accesses for a particular process ID.  However,
> these AddressSpace and MemoryRegion objects would only be created when
> the device first accesses that address space.  In the common case,
> where a single device is just being used by a single process or a
> small number, this should keep the number of AddressSpace objects
> relatively small.  Obviously the cache would need to be invalidated,
> cleaning up the AddressSpace objects, when the PASID table is altered.

Sorry, a double check here. Does "AddressSpace objects" mean the existing
AddressSpace definition in Qemu?

> 
>  * I realize that the expected case here is with KVM, where the guest
>    controls the first level translation, but the host controls the
>    second level translation.  However, we should also be able to model
>    the case where the guest controls both levels for the sake of full
>    system emulation.  I think understanding this case will lead to a
>    better design even for the simpler case.
> 
> Do you have a plan for what the virt-SVM aware DMA functions will look
> like?

The behaviour is device specific.
For a SVM capable physcial device, it would store the pasid value in a
register locates in the deivce. e.g. a GPU context can be set to use SVM,
after the pasid is set, any DMA from this context is DMAs target to a
process virtual address space.

So for a virt-SVM aware DMA device, the device model needs to figure out
the target address space. With the correct address space, then consume
the translate() callback provided by iommu emulator. And then emulate the
DMA operation for the emulated device.

I'll try to get a new version with your suggestions.

Thanks,
Yi L

  parent reply	other threads:[~2018-01-12 10:42 UTC|newest]

Thread overview: 39+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2017-11-03 12:01 [Qemu-devel] [RESEND PATCH 0/6] Introduce new iommu notifier framework Liu, Yi L
2017-11-03 12:01 ` [Qemu-devel] [RESEND PATCH 1/6] memory: rename existing iommu notifier to be iommu mr notifier Liu, Yi L
2017-11-03 12:01 ` [Qemu-devel] [RESEND PATCH 2/6] memory: introduce AddressSpaceOps and IOMMUObject Liu, Yi L
2017-11-13  5:56   ` David Gibson
2017-11-13  8:28     ` Peter Xu
2017-11-14  0:59       ` David Gibson
2017-11-14  3:31         ` Peter Xu
2017-12-18  5:41           ` David Gibson
2017-11-16  8:57         ` Liu, Yi L
2017-12-18  6:14           ` David Gibson
2017-12-18  9:17             ` Liu, Yi L
2017-12-18 11:22               ` David Gibson
2017-12-20  6:32                 ` Liu, Yi L
2017-12-20 11:01                   ` David Gibson
2017-12-22  6:47                     ` Liu, Yi L
2017-11-13  9:58     ` Liu, Yi L
2017-11-14  8:53       ` Auger Eric
2017-11-14 13:59         ` Liu, Yi L
2017-11-14 21:52           ` Auger Eric
2017-11-15  2:36             ` Liu, Yi L
2017-11-15  7:16             ` Peter Xu
2017-12-18 11:35               ` David Gibson
2017-12-20  6:47                 ` Liu, Yi L
2017-12-20 11:18                   ` David Gibson
2017-12-21  8:40                     ` Liu, Yi L
2018-01-03  0:28                       ` David Gibson
2018-01-04  9:40                         ` Liu, Yi L
2018-01-12 10:25                     ` Liu, Yi L [this message]
2018-01-16  6:04                       ` David Gibson
2017-12-18  6:30         ` David Gibson
2017-11-14 10:21   ` Auger Eric
2017-11-14 14:20     ` Liu, Yi L
2017-12-18 11:38     ` David Gibson
2017-11-03 12:01 ` [Qemu-devel] [RESEND PATCH 3/6] intel_iommu: provide AddressSpaceOps.iommu_get instance Liu, Yi L
2017-11-03 12:01 ` [Qemu-devel] [RESEND PATCH 4/6] vfio: rename GuestIOMMU to be GuestIOMMUMR Liu, Yi L
2017-11-03 12:01 ` [Qemu-devel] [RESEND PATCH 5/6] vfio/pci: add notify framework based on IOMMUObject Liu, Yi L
2017-11-14 10:23   ` Auger Eric
2017-11-14 14:24     ` Liu, Yi L
2017-11-03 12:01 ` [Qemu-devel] [RESEND PATCH 6/6] vfio/pci: register vfio_iommu_bind_pasidtbl_notify notifier Liu, Yi L

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=20180112102534.GA25168@sky-dev \
    --to=yi.l.liu@linux.intel.com \
    --cc=alex.williamson@redhat.com \
    --cc=david@gibson.dropbear.id.au \
    --cc=eric.auger@redhat.com \
    --cc=jasowang@redhat.com \
    --cc=kevin.tian@intel.com \
    --cc=mst@redhat.com \
    --cc=pbonzini@redhat.com \
    --cc=peterx@redhat.com \
    --cc=qemu-devel@nongnu.org \
    --cc=tianyu.lan@intel.com \
    --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 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).