From: catalin.marinas@arm.com (Catalin Marinas)
To: linux-arm-kernel@lists.infradead.org
Subject: [PATCH v5 11/13] xen: introduce xen_alloc/free_coherent_pages
Date: Fri, 6 Sep 2013 17:20:18 +0100 [thread overview]
Message-ID: <20130906162018.GJ1946@arm.com> (raw)
In-Reply-To: <alpine.DEB.2.02.1309061706480.6397@kaball.uk.xensource.com>
On Fri, Sep 06, 2013 at 05:09:52PM +0100, Stefano Stabellini wrote:
> On Fri, 6 Sep 2013, Catalin Marinas wrote:
> > On Fri, Sep 06, 2013 at 03:59:02PM +0100, Stefano Stabellini wrote:
> > > On Fri, 6 Sep 2013, Catalin Marinas wrote:
> > > > On Thu, Sep 05, 2013 at 05:43:33PM +0100, Stefano Stabellini wrote:
> > > > > On Thu, 5 Sep 2013, Catalin Marinas wrote:
> > > > > > On Thu, Aug 29, 2013 at 07:32:32PM +0100, Stefano Stabellini wrote:
> > > > > > > xen_swiotlb_alloc_coherent needs to allocate a coherent buffer for cpu
> > > > > > > and devices. On native x86 and ARMv8 is sufficient to call
> > > > > > > __get_free_pages in order to get a coherent buffer, while on ARM we need
> > > > > > > to call arm_dma_ops.alloc.
> > > > > >
> > > > > > Don't bet on this for ARMv8. It's not mandated for the architecture, so
> > > > > > at some point some SoC will require non-cacheable buffers for coherency.
> > > > >
> > > > > I see.
> > > > > Would it be better if I implemented xen_alloc_coherent_pages on armv8 by
> > > > > calling arm64_swiotlb_dma_ops.alloc?
> > > >
> > > > What does this buffer do exactly? Is it allocated by guests?
> > >
> > > It is allocated by Dom0 to do DMA to/from a device.
> > > It is the buffer that is going to be returned by dma_map_ops.alloc to
> > > the caller:
> > >
> > > On x86:
> > > dma_map_ops.alloc -> xen_swiotlb_alloc_coherent -> xen_alloc_coherent_pages -> __get_free_pages
> > >
> > > On ARM:
> > > dma_map_ops.alloc -> xen_swiotlb_alloc_coherent -> xen_alloc_coherent_pages -> arm_dma_ops.alloc
> > >
> > > On ARM64
> > > dma_map_ops.alloc -> xen_swiotlb_alloc_coherent -> xen_alloc_coherent_pages -> ????
> >
> > OK, I'm getting more confused. Do all the above calls happen in the
> > guest, Dom0, or a mix?
>
> I guess the confusion comes from a difference in terminology: dom0 is a
> guest like the others, just a bit more privileged. We usually call domU
> a normal unprivileged guest.
Thanks for the explanation.
> The above calls would happen in Dom0 (when an SMMU is not available).
So for Dom0, are there cases when it needs xen_swiotlb_alloc_coherent()
and other cases when it needs the arm_dma_ops.alloc? In Dom0 could we
not always use the default dma_alloc_coherent()?
> They could also happen in a DomU if we assign a physical device to it
> (and an SMMU is not available).
The problem is that you don't necessarily know one kind of coherency you
know for a physical device. As I said, we plan to do this DT-driven.
--
Catalin
WARNING: multiple messages have this Message-ID (diff)
From: Catalin Marinas <catalin.marinas@arm.com>
To: Stefano Stabellini <stefano.stabellini@eu.citrix.com>
Cc: "xen-devel@lists.xensource.com" <xen-devel@lists.xensource.com>,
"Ian.Campbell@citrix.com" <Ian.Campbell@citrix.com>,
"linux-kernel@vger.kernel.org" <linux-kernel@vger.kernel.org>,
"linux-arm-kernel@lists.infradead.org"
<linux-arm-kernel@lists.infradead.org>,
"konrad.wilk@oracle.com" <konrad.wilk@oracle.com>
Subject: Re: [PATCH v5 11/13] xen: introduce xen_alloc/free_coherent_pages
Date: Fri, 6 Sep 2013 17:20:18 +0100 [thread overview]
Message-ID: <20130906162018.GJ1946@arm.com> (raw)
In-Reply-To: <alpine.DEB.2.02.1309061706480.6397@kaball.uk.xensource.com>
On Fri, Sep 06, 2013 at 05:09:52PM +0100, Stefano Stabellini wrote:
> On Fri, 6 Sep 2013, Catalin Marinas wrote:
> > On Fri, Sep 06, 2013 at 03:59:02PM +0100, Stefano Stabellini wrote:
> > > On Fri, 6 Sep 2013, Catalin Marinas wrote:
> > > > On Thu, Sep 05, 2013 at 05:43:33PM +0100, Stefano Stabellini wrote:
> > > > > On Thu, 5 Sep 2013, Catalin Marinas wrote:
> > > > > > On Thu, Aug 29, 2013 at 07:32:32PM +0100, Stefano Stabellini wrote:
> > > > > > > xen_swiotlb_alloc_coherent needs to allocate a coherent buffer for cpu
> > > > > > > and devices. On native x86 and ARMv8 is sufficient to call
> > > > > > > __get_free_pages in order to get a coherent buffer, while on ARM we need
> > > > > > > to call arm_dma_ops.alloc.
> > > > > >
> > > > > > Don't bet on this for ARMv8. It's not mandated for the architecture, so
> > > > > > at some point some SoC will require non-cacheable buffers for coherency.
> > > > >
> > > > > I see.
> > > > > Would it be better if I implemented xen_alloc_coherent_pages on armv8 by
> > > > > calling arm64_swiotlb_dma_ops.alloc?
> > > >
> > > > What does this buffer do exactly? Is it allocated by guests?
> > >
> > > It is allocated by Dom0 to do DMA to/from a device.
> > > It is the buffer that is going to be returned by dma_map_ops.alloc to
> > > the caller:
> > >
> > > On x86:
> > > dma_map_ops.alloc -> xen_swiotlb_alloc_coherent -> xen_alloc_coherent_pages -> __get_free_pages
> > >
> > > On ARM:
> > > dma_map_ops.alloc -> xen_swiotlb_alloc_coherent -> xen_alloc_coherent_pages -> arm_dma_ops.alloc
> > >
> > > On ARM64
> > > dma_map_ops.alloc -> xen_swiotlb_alloc_coherent -> xen_alloc_coherent_pages -> ????
> >
> > OK, I'm getting more confused. Do all the above calls happen in the
> > guest, Dom0, or a mix?
>
> I guess the confusion comes from a difference in terminology: dom0 is a
> guest like the others, just a bit more privileged. We usually call domU
> a normal unprivileged guest.
Thanks for the explanation.
> The above calls would happen in Dom0 (when an SMMU is not available).
So for Dom0, are there cases when it needs xen_swiotlb_alloc_coherent()
and other cases when it needs the arm_dma_ops.alloc? In Dom0 could we
not always use the default dma_alloc_coherent()?
> They could also happen in a DomU if we assign a physical device to it
> (and an SMMU is not available).
The problem is that you don't necessarily know one kind of coherency you
know for a physical device. As I said, we plan to do this DT-driven.
--
Catalin
WARNING: multiple messages have this Message-ID (diff)
From: Catalin Marinas <catalin.marinas@arm.com>
To: Stefano Stabellini <stefano.stabellini@eu.citrix.com>
Cc: "konrad.wilk@oracle.com" <konrad.wilk@oracle.com>,
"xen-devel@lists.xensource.com" <xen-devel@lists.xensource.com>,
"Ian.Campbell@citrix.com" <Ian.Campbell@citrix.com>,
"linux-arm-kernel@lists.infradead.org"
<linux-arm-kernel@lists.infradead.org>,
"linux-kernel@vger.kernel.org" <linux-kernel@vger.kernel.org>
Subject: Re: [PATCH v5 11/13] xen: introduce xen_alloc/free_coherent_pages
Date: Fri, 6 Sep 2013 17:20:18 +0100 [thread overview]
Message-ID: <20130906162018.GJ1946@arm.com> (raw)
In-Reply-To: <alpine.DEB.2.02.1309061706480.6397@kaball.uk.xensource.com>
On Fri, Sep 06, 2013 at 05:09:52PM +0100, Stefano Stabellini wrote:
> On Fri, 6 Sep 2013, Catalin Marinas wrote:
> > On Fri, Sep 06, 2013 at 03:59:02PM +0100, Stefano Stabellini wrote:
> > > On Fri, 6 Sep 2013, Catalin Marinas wrote:
> > > > On Thu, Sep 05, 2013 at 05:43:33PM +0100, Stefano Stabellini wrote:
> > > > > On Thu, 5 Sep 2013, Catalin Marinas wrote:
> > > > > > On Thu, Aug 29, 2013 at 07:32:32PM +0100, Stefano Stabellini wrote:
> > > > > > > xen_swiotlb_alloc_coherent needs to allocate a coherent buffer for cpu
> > > > > > > and devices. On native x86 and ARMv8 is sufficient to call
> > > > > > > __get_free_pages in order to get a coherent buffer, while on ARM we need
> > > > > > > to call arm_dma_ops.alloc.
> > > > > >
> > > > > > Don't bet on this for ARMv8. It's not mandated for the architecture, so
> > > > > > at some point some SoC will require non-cacheable buffers for coherency.
> > > > >
> > > > > I see.
> > > > > Would it be better if I implemented xen_alloc_coherent_pages on armv8 by
> > > > > calling arm64_swiotlb_dma_ops.alloc?
> > > >
> > > > What does this buffer do exactly? Is it allocated by guests?
> > >
> > > It is allocated by Dom0 to do DMA to/from a device.
> > > It is the buffer that is going to be returned by dma_map_ops.alloc to
> > > the caller:
> > >
> > > On x86:
> > > dma_map_ops.alloc -> xen_swiotlb_alloc_coherent -> xen_alloc_coherent_pages -> __get_free_pages
> > >
> > > On ARM:
> > > dma_map_ops.alloc -> xen_swiotlb_alloc_coherent -> xen_alloc_coherent_pages -> arm_dma_ops.alloc
> > >
> > > On ARM64
> > > dma_map_ops.alloc -> xen_swiotlb_alloc_coherent -> xen_alloc_coherent_pages -> ????
> >
> > OK, I'm getting more confused. Do all the above calls happen in the
> > guest, Dom0, or a mix?
>
> I guess the confusion comes from a difference in terminology: dom0 is a
> guest like the others, just a bit more privileged. We usually call domU
> a normal unprivileged guest.
Thanks for the explanation.
> The above calls would happen in Dom0 (when an SMMU is not available).
So for Dom0, are there cases when it needs xen_swiotlb_alloc_coherent()
and other cases when it needs the arm_dma_ops.alloc? In Dom0 could we
not always use the default dma_alloc_coherent()?
> They could also happen in a DomU if we assign a physical device to it
> (and an SMMU is not available).
The problem is that you don't necessarily know one kind of coherency you
know for a physical device. As I said, we plan to do this DT-driven.
--
Catalin
next prev parent reply other threads:[~2013-09-06 16:20 UTC|newest]
Thread overview: 118+ messages / expand[flat|nested] mbox.gz Atom feed top
2013-08-29 18:31 [PATCH v5 0/13] enable swiotlb-xen on arm and arm64 Stefano Stabellini
2013-08-29 18:31 ` Stefano Stabellini
2013-08-29 18:31 ` Stefano Stabellini
2013-08-29 18:32 ` [PATCH v5 01/13] arm: make SWIOTLB available Stefano Stabellini
2013-08-29 18:32 ` Stefano Stabellini
2013-08-29 18:32 ` Stefano Stabellini
2013-08-29 18:32 ` [PATCH v5 02/13] arm: introduce a global dma_ops pointer Stefano Stabellini
2013-08-29 18:32 ` Stefano Stabellini
2013-08-29 18:32 ` Stefano Stabellini
2013-09-02 14:45 ` [Xen-devel] " Julien Grall
2013-09-02 14:45 ` Julien Grall
2013-09-02 14:45 ` Julien Grall
2013-09-05 16:39 ` Stefano Stabellini
2013-09-05 16:39 ` Stefano Stabellini
2013-09-05 16:39 ` Stefano Stabellini
2013-08-29 18:32 ` [PATCH v5 03/13] arm64: define DMA_ERROR_CODE Stefano Stabellini
2013-08-29 18:32 ` Stefano Stabellini
2013-08-29 18:32 ` Stefano Stabellini
2013-09-05 16:05 ` Catalin Marinas
2013-09-05 16:05 ` Catalin Marinas
2013-09-05 16:05 ` Catalin Marinas
2013-09-05 16:54 ` Stefano Stabellini
2013-09-05 16:54 ` Stefano Stabellini
2013-08-29 18:32 ` [PATCH v5 04/13] arm64: do not initialize arm64_swiotlb if dma_ops is already set Stefano Stabellini
2013-08-29 18:32 ` Stefano Stabellini
2013-08-29 18:32 ` Stefano Stabellini
2013-08-29 18:32 ` [PATCH v5 05/13] xen/arm,arm64: move Xen initialization earlier Stefano Stabellini
2013-08-29 18:32 ` [PATCH v5 05/13] xen/arm, arm64: " Stefano Stabellini
2013-08-29 18:32 ` [PATCH v5 05/13] xen/arm,arm64: " Stefano Stabellini
2013-09-05 16:20 ` Catalin Marinas
2013-09-05 16:20 ` Catalin Marinas
2013-09-05 16:20 ` Catalin Marinas
2013-09-05 16:59 ` Stefano Stabellini
2013-09-05 16:59 ` Stefano Stabellini
2013-09-06 8:58 ` Ian Campbell
2013-09-06 8:58 ` Ian Campbell
2013-09-06 14:09 ` Catalin Marinas
2013-09-06 14:09 ` Catalin Marinas
2013-09-06 14:09 ` Catalin Marinas
2013-09-06 14:23 ` Konrad Rzeszutek Wilk
2013-09-06 14:23 ` Konrad Rzeszutek Wilk
2013-09-06 14:23 ` Konrad Rzeszutek Wilk
2013-09-06 14:53 ` Stefano Stabellini
2013-09-06 14:53 ` Stefano Stabellini
2013-08-29 18:32 ` [PATCH v5 06/13] xen: introduce XENMEM_exchange_and_pin and XENMEM_unpin Stefano Stabellini
2013-08-29 18:32 ` Stefano Stabellini
2013-08-29 18:32 ` Stefano Stabellini
2013-08-29 18:32 ` [PATCH v5 07/13] xen: make xen_create_contiguous_region return the dma address Stefano Stabellini
2013-08-29 18:32 ` Stefano Stabellini
2013-08-29 18:32 ` Stefano Stabellini
2013-08-30 13:45 ` Konrad Rzeszutek Wilk
2013-08-30 13:45 ` Konrad Rzeszutek Wilk
2013-08-29 18:32 ` [PATCH v5 08/13] swiotlb-xen: support autotranslate guests Stefano Stabellini
2013-08-29 18:32 ` Stefano Stabellini
2013-08-29 18:32 ` Stefano Stabellini
2013-08-30 13:46 ` Konrad Rzeszutek Wilk
2013-08-30 13:46 ` Konrad Rzeszutek Wilk
2013-08-29 18:32 ` [PATCH v5 09/13] xen/arm,arm64: enable SWIOTLB_XEN Stefano Stabellini
2013-08-29 18:32 ` Stefano Stabellini
2013-08-29 18:32 ` Stefano Stabellini
2013-08-29 18:32 ` [PATCH v5 10/13] swiotlb-xen: introduce xen_swiotlb_set_dma_mask Stefano Stabellini
2013-08-29 18:32 ` Stefano Stabellini
2013-08-29 18:32 ` Stefano Stabellini
2013-08-29 18:32 ` [PATCH v5 11/13] xen: introduce xen_alloc/free_coherent_pages Stefano Stabellini
2013-08-29 18:32 ` Stefano Stabellini
2013-08-29 18:32 ` Stefano Stabellini
2013-09-05 16:09 ` Catalin Marinas
2013-09-05 16:09 ` Catalin Marinas
2013-09-05 16:09 ` Catalin Marinas
2013-09-05 16:43 ` Stefano Stabellini
2013-09-05 16:43 ` Stefano Stabellini
2013-09-06 14:14 ` Catalin Marinas
2013-09-06 14:14 ` Catalin Marinas
2013-09-06 14:14 ` Catalin Marinas
2013-09-06 14:59 ` Stefano Stabellini
2013-09-06 14:59 ` Stefano Stabellini
2013-09-06 15:59 ` Catalin Marinas
2013-09-06 15:59 ` Catalin Marinas
2013-09-06 15:59 ` Catalin Marinas
2013-09-06 16:09 ` Stefano Stabellini
2013-09-06 16:09 ` Stefano Stabellini
2013-09-06 16:20 ` Catalin Marinas [this message]
2013-09-06 16:20 ` Catalin Marinas
2013-09-06 16:20 ` Catalin Marinas
2013-09-06 16:52 ` Stefano Stabellini
2013-09-06 16:52 ` Stefano Stabellini
2013-09-09 15:51 ` Catalin Marinas
2013-09-09 15:51 ` Catalin Marinas
2013-09-09 16:46 ` Stefano Stabellini
2013-09-09 16:46 ` Stefano Stabellini
2013-09-11 9:36 ` Catalin Marinas
2013-09-11 9:36 ` Catalin Marinas
2013-09-11 9:36 ` Catalin Marinas
2013-09-11 17:34 ` Stefano Stabellini
2013-09-11 17:34 ` Stefano Stabellini
2013-09-12 13:53 ` Catalin Marinas
2013-09-12 13:53 ` Catalin Marinas
2013-09-12 13:53 ` Catalin Marinas
2013-09-12 14:44 ` Stefano Stabellini
2013-09-12 14:44 ` Stefano Stabellini
2013-09-12 15:04 ` Catalin Marinas
2013-09-12 15:04 ` Catalin Marinas
2013-08-29 18:32 ` [PATCH v5 12/13] swiotlb-xen: use xen_alloc/free_coherent_pages Stefano Stabellini
2013-08-29 18:32 ` Stefano Stabellini
2013-08-29 18:32 ` Stefano Stabellini
2013-08-30 13:53 ` Konrad Rzeszutek Wilk
2013-08-30 13:53 ` Konrad Rzeszutek Wilk
2013-09-05 16:50 ` Stefano Stabellini
2013-09-05 16:50 ` Stefano Stabellini
2013-09-05 16:50 ` Stefano Stabellini
2013-09-06 14:17 ` Konrad Rzeszutek Wilk
2013-09-06 14:17 ` Konrad Rzeszutek Wilk
2013-09-06 15:04 ` Stefano Stabellini
2013-09-06 15:04 ` Stefano Stabellini
2013-09-06 15:04 ` Stefano Stabellini
2013-08-29 18:32 ` [PATCH v5 13/13] swiotlb: don't assume that io_tlb_start-io_tlb_end is coherent Stefano Stabellini
2013-08-29 18:32 ` Stefano Stabellini
2013-08-29 18:32 ` Stefano Stabellini
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=20130906162018.GJ1946@arm.com \
--to=catalin.marinas@arm.com \
--cc=linux-arm-kernel@lists.infradead.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.