All of lore.kernel.org
 help / color / mirror / Atom feed
From: Arnd Bergmann <arnd@arndb.de>
To: "Roedel, Joerg" <Joerg.Roedel@amd.com>
Cc: FUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp>,
	"stepanm@codeaurora.org" <stepanm@codeaurora.org>,
	"linux-arm-kernel@lists.infradead.org"
	<linux-arm-kernel@lists.infradead.org>,
	"linux-arm-msm@vger.kernel.org" <linux-arm-msm@vger.kernel.org>,
	"dwalker@codeaurora.org" <dwalker@codeaurora.org>,
	"linux-kernel@vger.kernel.org" <linux-kernel@vger.kernel.org>
Subject: Re: [PATCH 1/2] arm: msm: Add System MMU support.
Date: Thu, 29 Jul 2010 15:01:35 +0200	[thread overview]
Message-ID: <201007291501.35583.arnd@arndb.de> (raw)
In-Reply-To: <20100729121202.GR26098@amd.com>

On Thursday 29 July 2010, Roedel, Joerg wrote:
> On Thu, Jul 29, 2010 at 07:25:47AM -0400, Arnd Bergmann wrote:
> > On Thursday 29 July 2010, Roedel, Joerg wrote:
> > 
> > > > You designed it for what you need at the time. It should have been
> > > > named appropriately to avoid confusion. Later, when we actually
> > > > understand what other IOMMUs need, we can evolve the specific API for
> > > > generic purposes. Then we can rename the API to more generic.
> > > 
> > > At the time the iommu-api was written is was generic enough for what we
> > > had. So it was designed as an generic API. At this point in time nobody
> > > knew what the future requirements would we. So today it turns out that
> > > it is not generic enough anymore for latest hardware. The logical
> > > consequence is to fix this in the iommu-api.
> > 
> > Well, I think the real question is why we have two APIs that both claim
> > to work with IOMMUs in a generic way and how we could unify the two.
> 
> The DMA-API itself does not claim to be an iommu-frontend. The purpose
> of the DMA-API is to convert physical memory addresses into dma handles
> and do all the management of these handles. Backend implementations can
> use hardware iommus for this task. But depending on the hardware in the
> system the DMA-API can very well be implemented without any hardware
> support. This is an important difference to the IOMMU-API which needs
> hardware because it exposes hardware iommu features to software.

Well, you could call that a limitation in the IOMMU API ;-)

The idea behind the DMA mapping API is to allow a device driver
to work without knowing if the hardware can, cannot or must use
an IOMMU.

> > I really think we should not extend the (KVM) IOMMU API further but
> > just use the generic DMA mapping api for KVM and extend it as necessary.
> > It already has the concept of cache coherency and mapping/unmapping
> > that are in the IOMMU API and could be extended to support domains
> > as well, through the use of dma_attrs.
> 
> If we find a nice and clean way to expose lower-level iommu
> functionality through the DMA-API, thats fine. We could certainly
> discuss ideas in this direction.  I think this is going to be hard
> because the DMA-API today does not provide enough flexibility to let the
> user choose both sides of a io-virtual<->cpu-physical address mapping.
> Thats fine for most drivers because it makes sense for them to use the
> generic io-address-allocator the DMA-API provides but not for KVM which
> needs this flexibility.

One way to do this would be to add a new attribute, e.g.

enum dma_attr {
        DMA_ATTR_WRITE_BARRIER,
        DMA_ATTR_WEAK_ORDERING,
	DMA_ATTR_FIXED_MAPPING, /* this one is new */
        DMA_ATTR_MAX,
};

struct dma_attrs {
        unsigned long flags[__DMA_ATTRS_LONGS];
	dma_add_t dest;
};

Nothing except for KVM would need to use that attribute, and KVM would
obviously need a way to check if this is supported by the underlying
implementation.

	Arnd

WARNING: multiple messages have this Message-ID (diff)
From: arnd@arndb.de (Arnd Bergmann)
To: linux-arm-kernel@lists.infradead.org
Subject: [PATCH 1/2] arm: msm: Add System MMU support.
Date: Thu, 29 Jul 2010 15:01:35 +0200	[thread overview]
Message-ID: <201007291501.35583.arnd@arndb.de> (raw)
In-Reply-To: <20100729121202.GR26098@amd.com>

On Thursday 29 July 2010, Roedel, Joerg wrote:
> On Thu, Jul 29, 2010 at 07:25:47AM -0400, Arnd Bergmann wrote:
> > On Thursday 29 July 2010, Roedel, Joerg wrote:
> > 
> > > > You designed it for what you need at the time. It should have been
> > > > named appropriately to avoid confusion. Later, when we actually
> > > > understand what other IOMMUs need, we can evolve the specific API for
> > > > generic purposes. Then we can rename the API to more generic.
> > > 
> > > At the time the iommu-api was written is was generic enough for what we
> > > had. So it was designed as an generic API. At this point in time nobody
> > > knew what the future requirements would we. So today it turns out that
> > > it is not generic enough anymore for latest hardware. The logical
> > > consequence is to fix this in the iommu-api.
> > 
> > Well, I think the real question is why we have two APIs that both claim
> > to work with IOMMUs in a generic way and how we could unify the two.
> 
> The DMA-API itself does not claim to be an iommu-frontend. The purpose
> of the DMA-API is to convert physical memory addresses into dma handles
> and do all the management of these handles. Backend implementations can
> use hardware iommus for this task. But depending on the hardware in the
> system the DMA-API can very well be implemented without any hardware
> support. This is an important difference to the IOMMU-API which needs
> hardware because it exposes hardware iommu features to software.

Well, you could call that a limitation in the IOMMU API ;-)

The idea behind the DMA mapping API is to allow a device driver
to work without knowing if the hardware can, cannot or must use
an IOMMU.

> > I really think we should not extend the (KVM) IOMMU API further but
> > just use the generic DMA mapping api for KVM and extend it as necessary.
> > It already has the concept of cache coherency and mapping/unmapping
> > that are in the IOMMU API and could be extended to support domains
> > as well, through the use of dma_attrs.
> 
> If we find a nice and clean way to expose lower-level iommu
> functionality through the DMA-API, thats fine. We could certainly
> discuss ideas in this direction.  I think this is going to be hard
> because the DMA-API today does not provide enough flexibility to let the
> user choose both sides of a io-virtual<->cpu-physical address mapping.
> Thats fine for most drivers because it makes sense for them to use the
> generic io-address-allocator the DMA-API provides but not for KVM which
> needs this flexibility.

One way to do this would be to add a new attribute, e.g.

enum dma_attr {
        DMA_ATTR_WRITE_BARRIER,
        DMA_ATTR_WEAK_ORDERING,
	DMA_ATTR_FIXED_MAPPING, /* this one is new */
        DMA_ATTR_MAX,
};

struct dma_attrs {
        unsigned long flags[__DMA_ATTRS_LONGS];
	dma_add_t dest;
};

Nothing except for KVM would need to use that attribute, and KVM would
obviously need a way to check if this is supported by the underlying
implementation.

	Arnd

  reply	other threads:[~2010-07-29 13:01 UTC|newest]

Thread overview: 96+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2010-07-27 22:41 [PATCH 1/2] arm: msm: Add System MMU support Stepan Moskovchenko
2010-07-27 22:41 ` Stepan Moskovchenko
2010-07-27 22:43 ` Daniel Walker
2010-07-27 22:43   ` Daniel Walker
2010-07-28  8:39 ` Arnd Bergmann
2010-07-28  8:39   ` Arnd Bergmann
2010-07-28 17:39   ` stepanm
2010-07-28 17:39     ` stepanm at codeaurora.org
2010-07-28 17:50     ` Arnd Bergmann
2010-07-28 17:50       ` Arnd Bergmann
2010-07-28 21:21       ` Russell King - ARM Linux
2010-07-28 21:21         ` Russell King - ARM Linux
2010-07-29  4:15         ` FUJITA Tomonori
2010-07-29  4:15           ` FUJITA Tomonori
2010-07-29  8:12         ` Arnd Bergmann
2010-07-29  8:12           ` Arnd Bergmann
2010-07-29 11:47           ` Russell King - ARM Linux
2010-07-29 11:47             ` Russell King - ARM Linux
2010-07-30  6:14             ` FUJITA Tomonori
2010-07-30  6:14               ` FUJITA Tomonori
2010-07-29  0:58       ` stepanm
2010-07-29  0:58         ` stepanm at codeaurora.org
2010-07-29  3:35         ` FUJITA Tomonori
2010-07-29  3:35           ` FUJITA Tomonori
2010-07-29  8:26           ` Arnd Bergmann
2010-07-29  8:26             ` Arnd Bergmann
2010-07-29  8:35             ` FUJITA Tomonori
2010-07-29  8:35               ` FUJITA Tomonori
2010-07-29  8:40             ` Roedel, Joerg
2010-07-29  8:40               ` Roedel, Joerg
2010-07-29  8:46               ` FUJITA Tomonori
2010-07-29  8:46                 ` FUJITA Tomonori
2010-07-29  9:06                 ` Roedel, Joerg
2010-07-29  9:06                   ` Roedel, Joerg
2010-07-29  9:14                   ` FUJITA Tomonori
2010-07-29  9:14                     ` FUJITA Tomonori
2010-07-29  9:25                     ` Roedel, Joerg
2010-07-29  9:25                       ` Roedel, Joerg
2010-07-29  9:28                     ` Roedel, Joerg
2010-07-29  9:28                       ` Roedel, Joerg
2010-07-29  9:44                       ` FUJITA Tomonori
2010-07-29  9:44                         ` FUJITA Tomonori
2010-07-29 10:01                         ` Roedel, Joerg
2010-07-29 10:01                           ` Roedel, Joerg
2010-07-29 11:25                           ` Arnd Bergmann
2010-07-29 11:25                             ` Arnd Bergmann
2010-07-29 12:12                             ` Roedel, Joerg
2010-07-29 12:12                               ` Roedel, Joerg
2010-07-29 13:01                               ` Arnd Bergmann [this message]
2010-07-29 13:01                                 ` Arnd Bergmann
2010-07-30  5:19                   ` stepanm
2010-07-30  5:19                     ` stepanm at codeaurora.org
2010-07-30  8:01                     ` Arnd Bergmann
2010-07-30  8:01                       ` Arnd Bergmann
2010-07-30 16:25                       ` stepanm
2010-07-30 16:25                         ` stepanm at codeaurora.org
2010-07-30 21:59                         ` Arnd Bergmann
2010-07-30 21:59                           ` Arnd Bergmann
2010-07-30 22:58                           ` stepanm
2010-07-30 22:58                             ` stepanm at codeaurora.org
2010-07-31  9:37                             ` Arnd Bergmann
2010-07-31  9:37                               ` Arnd Bergmann
2010-08-02  7:58                     ` Roedel, Joerg
2010-08-02  7:58                       ` Roedel, Joerg
2010-08-02 20:29                       ` Zach Pfeffer
2010-08-02 20:29                         ` Zach Pfeffer
2010-08-03  9:23                         ` Roedel, Joerg
2010-08-03  9:23                           ` Roedel, Joerg
2010-08-03 18:43                           ` Stepan Moskovchenko
2010-08-03 18:43                             ` Stepan Moskovchenko
2010-08-04  9:52                             ` Roedel, Joerg
2010-08-04  9:52                               ` Roedel, Joerg
2010-07-31  3:15             ` Benjamin Herrenschmidt
2010-07-31  3:15               ` Benjamin Herrenschmidt
2010-08-02  7:48               ` Roedel, Joerg
2010-08-02  7:48                 ` Roedel, Joerg
2010-08-02  8:03                 ` Benjamin Herrenschmidt
2010-08-02  8:03                   ` Benjamin Herrenschmidt
2010-08-02  8:10                   ` Roedel, Joerg
2010-08-02  8:10                     ` Roedel, Joerg
2010-08-02  8:30                   ` FUJITA Tomonori
2010-08-02  8:30                     ` FUJITA Tomonori
2010-08-02  9:03                     ` Russell King - ARM Linux
2010-08-02  9:03                       ` Russell King - ARM Linux
2010-08-02  9:20                       ` FUJITA Tomonori
2010-08-02  9:20                         ` FUJITA Tomonori
2010-08-02 10:04                         ` Russell King - ARM Linux
2010-08-02 10:04                           ` Russell King - ARM Linux
2010-08-02 15:26                           ` FUJITA Tomonori
2010-08-02 15:26                             ` FUJITA Tomonori
2010-08-02  9:45                     ` Roedel, Joerg
2010-08-02  9:45                       ` Roedel, Joerg
2010-08-02  8:35                   ` Roedel, Joerg
2010-08-02  8:35                     ` Roedel, Joerg
2010-07-31  2:30           ` Benjamin Herrenschmidt
2010-07-31  2:30             ` Benjamin Herrenschmidt

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=201007291501.35583.arnd@arndb.de \
    --to=arnd@arndb.de \
    --cc=Joerg.Roedel@amd.com \
    --cc=dwalker@codeaurora.org \
    --cc=fujita.tomonori@lab.ntt.co.jp \
    --cc=linux-arm-kernel@lists.infradead.org \
    --cc=linux-arm-msm@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=stepanm@codeaurora.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.