All of lore.kernel.org
 help / color / mirror / Atom feed
From: Will Deacon <will.deacon@arm.com>
To: "Michael S. Tsirkin" <mst@redhat.com>
Cc: Robin Murphy <robin.murphy@arm.com>,
	linux-arm-kernel@lists.infradead.org, luto@kernel.org,
	virtualization@lists.linux-foundation.org
Subject: Re: [PATCH v2 2/2] vring: Force use of DMA API for ARM-based systems
Date: Mon, 16 Jan 2017 14:34:08 +0000	[thread overview]
Message-ID: <20170116143408.GG1510@arm.com> (raw)
In-Reply-To: <20170116162225-mutt-send-email-mst@kernel.org>

On Mon, Jan 16, 2017 at 04:27:28PM +0200, Michael S. Tsirkin wrote:
> On Mon, Jan 16, 2017 at 02:21:03PM +0000, Will Deacon wrote:
> > On Mon, Jan 16, 2017 at 04:18:03PM +0200, Michael S. Tsirkin wrote:
> > > On Mon, Jan 16, 2017 at 10:40:28AM +0000, Will Deacon wrote:
> > > > On Fri, Jan 13, 2017 at 08:23:35PM +0200, Michael S. Tsirkin wrote:
> > > > > On Fri, Jan 13, 2017 at 05:21:54PM +0000, Will Deacon wrote:
> > > > > > On Fri, Jan 13, 2017 at 06:46:32PM +0200, Michael S. Tsirkin wrote:
> > > > > > > On Fri, Jan 13, 2017 at 09:25:22AM +0000, Will Deacon wrote:
> > > > > > > > On Fri, Jan 13, 2017 at 12:12:56AM +0200, Michael S. Tsirkin wrote:
> > > > > > > > > I'd rather people didn't use SMMU with legacy devices.
> > > > > > > > 
> > > > > > > > I'm afraid we've been doing that for two years and the model already
> > > > > > > > exists in a mature state, being actively used for development and
> > > > > > > > validation by ARM and our partners. One of the big things its used for
> > > > > > > > is to develop SMMU and GIC (our interrupt controller) code with PCI, so
> > > > > > > > dropping the SMMU from the picture isn't an option.
> > > > > > > 
> > > > > > > Oh so this fixes a regression?  This is something I didn't realize.
> > > > > > 
> > > > > > Yes, thanks. The regression came about because we implemented SMMU-backed
> > > > > > DMA ops and only then was it apparent that the virtio stuff was bypassing
> > > > > > even with translation enabled (because it wasn't using the DMA API).
> > > > > 
> > > > > Could you point out a commit ID?
> > > > 
> > > > There has been a fair amount of work in this area recently, but you're
> > > > probably after something like 876945dbf649 ("arm64: Hook up IOMMU dma_ops")
> > > > as the culprit, which is the point at which we started to swizzle DMA
> > > > ops for devices upstream of an SMMU automatically.
> > > > 
> > > > > > > A "Fixes:" tag can't hurt here.  I then wonder
> > > > > > > might DMA ops ever use a DMA address which isn't a physical address
> > > > > > > from QEMU point of view? If that happens, this hack breaks
> > > > > > > because in legacy mode QEMU still uses the GPA.
> > > > > > 
> > > > > > If QEMU doesn't advertise an SMMU, then it will work fine with the GPA,
> > > > > > because we won't swizzle the DMA ops for the master device. If QEMU does
> > > > > > advertise an SMMU, then we'll allocate DMA addresses to fit within the
> > > > > > the intersection of the SMMU aperture and device's DMA mask.
> > > > > 
> > > > > 
> > > > > Right but doesn't just poking from qemu into phys addresses work
> > > > > anymore? It used to ...
> > > > 
> > > > Provided that there's no SMMU, then it will continue to work. and my
> > > > understanding (from talking to Peter Maydell) is that qemu doesn't model
> > > > an SMMU for ARM-based machines.
> > > > 
> > > 
> > > So how come people report failures due to presence of SMMU?
> > > Using some other hypervisor?
> > 
> > The failures are reported on the ARM fastmodel (a complete system
> > emulation that runs on an x86 box), where an SMMU *is* present
> > downstream of the virtio-pci masters. There's no qemu involved there.
> > 
> I see. And this hypervisor actually coded up looking up
> translations in the SMMU unconditionally for legacy devices,
> and this worked as long as guest didn't touch the SMMU?

Well, the fastmodel isn't a hypervisor really. It's a full system emulation,
so it's better to think of it like a piece of hardware. For example, you
could run KVM on the fastmodel. But yes, when Linux didn't swizzle the
DMA ops to point at the SMMU, then everything defaults to bypass (because
that's the default behaviour of the SMMU driver -- this is configurable
on the command line) which is why things used to work.

Will

WARNING: multiple messages have this Message-ID (diff)
From: will.deacon@arm.com (Will Deacon)
To: linux-arm-kernel@lists.infradead.org
Subject: [PATCH v2 2/2] vring: Force use of DMA API for ARM-based systems
Date: Mon, 16 Jan 2017 14:34:08 +0000	[thread overview]
Message-ID: <20170116143408.GG1510@arm.com> (raw)
In-Reply-To: <20170116162225-mutt-send-email-mst@kernel.org>

On Mon, Jan 16, 2017 at 04:27:28PM +0200, Michael S. Tsirkin wrote:
> On Mon, Jan 16, 2017 at 02:21:03PM +0000, Will Deacon wrote:
> > On Mon, Jan 16, 2017 at 04:18:03PM +0200, Michael S. Tsirkin wrote:
> > > On Mon, Jan 16, 2017 at 10:40:28AM +0000, Will Deacon wrote:
> > > > On Fri, Jan 13, 2017 at 08:23:35PM +0200, Michael S. Tsirkin wrote:
> > > > > On Fri, Jan 13, 2017 at 05:21:54PM +0000, Will Deacon wrote:
> > > > > > On Fri, Jan 13, 2017 at 06:46:32PM +0200, Michael S. Tsirkin wrote:
> > > > > > > On Fri, Jan 13, 2017 at 09:25:22AM +0000, Will Deacon wrote:
> > > > > > > > On Fri, Jan 13, 2017 at 12:12:56AM +0200, Michael S. Tsirkin wrote:
> > > > > > > > > I'd rather people didn't use SMMU with legacy devices.
> > > > > > > > 
> > > > > > > > I'm afraid we've been doing that for two years and the model already
> > > > > > > > exists in a mature state, being actively used for development and
> > > > > > > > validation by ARM and our partners. One of the big things its used for
> > > > > > > > is to develop SMMU and GIC (our interrupt controller) code with PCI, so
> > > > > > > > dropping the SMMU from the picture isn't an option.
> > > > > > > 
> > > > > > > Oh so this fixes a regression?  This is something I didn't realize.
> > > > > > 
> > > > > > Yes, thanks. The regression came about because we implemented SMMU-backed
> > > > > > DMA ops and only then was it apparent that the virtio stuff was bypassing
> > > > > > even with translation enabled (because it wasn't using the DMA API).
> > > > > 
> > > > > Could you point out a commit ID?
> > > > 
> > > > There has been a fair amount of work in this area recently, but you're
> > > > probably after something like 876945dbf649 ("arm64: Hook up IOMMU dma_ops")
> > > > as the culprit, which is the point at which we started to swizzle DMA
> > > > ops for devices upstream of an SMMU automatically.
> > > > 
> > > > > > > A "Fixes:" tag can't hurt here.  I then wonder
> > > > > > > might DMA ops ever use a DMA address which isn't a physical address
> > > > > > > from QEMU point of view? If that happens, this hack breaks
> > > > > > > because in legacy mode QEMU still uses the GPA.
> > > > > > 
> > > > > > If QEMU doesn't advertise an SMMU, then it will work fine with the GPA,
> > > > > > because we won't swizzle the DMA ops for the master device. If QEMU does
> > > > > > advertise an SMMU, then we'll allocate DMA addresses to fit within the
> > > > > > the intersection of the SMMU aperture and device's DMA mask.
> > > > > 
> > > > > 
> > > > > Right but doesn't just poking from qemu into phys addresses work
> > > > > anymore? It used to ...
> > > > 
> > > > Provided that there's no SMMU, then it will continue to work. and my
> > > > understanding (from talking to Peter Maydell) is that qemu doesn't model
> > > > an SMMU for ARM-based machines.
> > > > 
> > > 
> > > So how come people report failures due to presence of SMMU?
> > > Using some other hypervisor?
> > 
> > The failures are reported on the ARM fastmodel (a complete system
> > emulation that runs on an x86 box), where an SMMU *is* present
> > downstream of the virtio-pci masters. There's no qemu involved there.
> > 
> I see. And this hypervisor actually coded up looking up
> translations in the SMMU unconditionally for legacy devices,
> and this worked as long as guest didn't touch the SMMU?

Well, the fastmodel isn't a hypervisor really. It's a full system emulation,
so it's better to think of it like a piece of hardware. For example, you
could run KVM on the fastmodel. But yes, when Linux didn't swizzle the
DMA ops to point at the SMMU, then everything defaults to bypass (because
that's the default behaviour of the SMMU driver -- this is configurable
on the command line) which is why things used to work.

Will

  reply	other threads:[~2017-01-16 14:34 UTC|newest]

Thread overview: 48+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2017-01-10 17:51 [PATCH v2 1/2] virtio_mmio: Set DMA masks appropriately Robin Murphy
2017-01-10 17:51 ` Robin Murphy
2017-01-10 17:51 ` [PATCH v2 2/2] vring: Force use of DMA API for ARM-based systems Robin Murphy
2017-01-10 17:51   ` Robin Murphy
2017-01-10 23:33   ` Michael S. Tsirkin
2017-01-10 23:33     ` Michael S. Tsirkin
2017-01-11 10:01     ` Will Deacon
2017-01-11 10:01       ` Will Deacon
2017-01-11 18:12       ` Andy Lutomirski
2017-01-11 18:12         ` Andy Lutomirski
2017-01-13  9:40         ` Will Deacon
2017-01-13  9:40           ` Will Deacon
2017-01-13 16:59         ` Michael S. Tsirkin
2017-01-13 16:59           ` Michael S. Tsirkin
2017-01-12 22:12       ` Michael S. Tsirkin
2017-01-12 22:12         ` Michael S. Tsirkin
2017-01-13  9:25         ` Will Deacon
2017-01-13  9:25           ` Will Deacon
2017-01-13 16:46           ` Michael S. Tsirkin
2017-01-13 16:46             ` Michael S. Tsirkin
2017-01-13 17:21             ` Will Deacon
2017-01-13 17:21               ` Will Deacon
2017-01-13 18:23               ` Michael S. Tsirkin
2017-01-13 18:23                 ` Michael S. Tsirkin
2017-01-16 10:40                 ` Will Deacon
2017-01-16 10:40                   ` Will Deacon
2017-01-16 14:18                   ` Michael S. Tsirkin
2017-01-16 14:18                     ` Michael S. Tsirkin
2017-01-16 14:21                     ` Will Deacon
2017-01-16 14:21                       ` Will Deacon
2017-01-16 14:27                       ` Michael S. Tsirkin
2017-01-16 14:27                         ` Michael S. Tsirkin
2017-01-16 14:34                         ` Will Deacon [this message]
2017-01-16 14:34                           ` Will Deacon
2017-01-19 21:51                           ` Michael S. Tsirkin
2017-01-19 21:51                             ` Michael S. Tsirkin
2017-01-20 10:33                             ` Will Deacon
2017-01-20 10:33                               ` Will Deacon
2017-01-24 16:04                               ` Marc Zyngier
2017-01-24 16:04                               ` Marc Zyngier
2017-01-24 16:06                                 ` Michael S. Tsirkin
2017-01-24 16:06                                   ` Michael S. Tsirkin
2017-01-24 16:10                                   ` Marc Zyngier
2017-01-24 16:10                                   ` Marc Zyngier
2017-01-10 23:30 ` [PATCH v2 1/2] virtio_mmio: Set DMA masks appropriately Michael S. Tsirkin
2017-01-10 23:30   ` Michael S. Tsirkin
2017-01-11 10:31 ` Jean-Philippe Brucker
2017-01-11 10:31   ` Jean-Philippe Brucker

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=20170116143408.GG1510@arm.com \
    --to=will.deacon@arm.com \
    --cc=linux-arm-kernel@lists.infradead.org \
    --cc=luto@kernel.org \
    --cc=mst@redhat.com \
    --cc=robin.murphy@arm.com \
    --cc=virtualization@lists.linux-foundation.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.