All of lore.kernel.org
 help / color / mirror / Atom feed
From: Scott Wood <scottwood@freescale.com>
To: Benjamin Herrenschmidt <benh@kernel.crashing.org>
Cc: Mingkai Hu <Mingkai.hu@freescale.com>,
	linuxppc-dev@lists.ozlabs.org,
	Shaohui Xie <Shaohui.Xie@freescale.com>,
	Chen Yuanquan <B41889@freescale.com>
Subject: Re: [PATCH] powerpc/mm: add ZONE_NORMAL zone for 64 bit kernel
Date: Mon, 23 Jul 2012 11:17:37 -0500	[thread overview]
Message-ID: <500D7921.6060804@freescale.com> (raw)
In-Reply-To: <1343023569.2957.19.camel@pasglop>

On 07/23/2012 01:06 AM, Benjamin Herrenschmidt wrote:
> On Fri, 2012-07-20 at 20:21 +0800, Shaohui Xie wrote:
>> PowerPC platform only supports ZONE_DMA zone for 64bit kernel, so all the
>> memory will be put into this zone. If the memory size is greater than
>> the device's DMA capability and device uses dma_alloc_coherent to allocate
>> memory, it will get an address which is over the device's DMA addressing,
>> the device will fail.
>>
>> So we split the memory to two zones by adding a zone ZONE_NORMAL, since
>> we already allocate PCICSRBAR/PEXCSRBAR right below the 4G boundary (if the
>> lowest PCI address is above 4G), so we constrain the DMA zone ZONE_DMA
>> to 2GB, also, we clear the flag __GFP_DMA and set it only if the device's
>> dma_mask < total memory size. By doing this, devices which cannot DMA all
>> the memory will be limited to ZONE_DMA, but devices which can DMA all the
>> memory will not be affected by this limitation.
> 
> This is wrong.

How so?

> Don't you have an iommu do deal with those devices anyway ?

Yes, but we don't yet have DMA API support for it, it would lower
performance because we'd have to use a lot of subwindows which are
poorly cached (and even then we wouldn't be able to map more than 256
pages at once on a given device), and the IOMMU may not be available at
all if we're being virtualized.

> What about swiotlb ?

That doesn't help with alloc_coherent().

> If you *really* need to honor 32 (or 31 even) bit DMAs,

31-bit is to accommodate PCI, which has PEXCSRBAR that must live under 4
GiB and can't be disabled.

> what you -may- want to do is create a ZONE_DMA32 like other architectures, do not
> hijack the historical ZONE_DMA.

Could you point me to somewhere that clearly defines what ZONE_DMA is to
be used for, such that this counts as hijacking (but using ZONE_DMA32 to
mean 31-bit wouldn't)?  The only arches I see using ZONE_DMA32 (x86 and
mips) also have a separate, more restrictive ZONE_DMA.  PowerPC doesn't.
 It uses ZONE_DMA to point to all of memory (except highmem on 32-bit)
-- how is that not hijacking, if this is?  We can't have ZONE_DMA be
less restrictive than ZONE_DMA32, because the fallback rules are
hardcoded the other way around in generic code.

The exact threshold for ZONE_DMA could be made platform-configurable.

> But even then, I'm dubious this is really needed.

We'd like our drivers to stop crashing with more than 4GiB of RAM on 64-bit.

-Scott

  reply	other threads:[~2012-07-23 16:18 UTC|newest]

Thread overview: 18+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2012-07-20 12:21 [PATCH] powerpc/mm: add ZONE_NORMAL zone for 64 bit kernel Shaohui Xie
2012-07-23  6:06 ` Benjamin Herrenschmidt
2012-07-23 16:17   ` Scott Wood [this message]
2012-07-23 22:20     ` Benjamin Herrenschmidt
2012-07-23 23:08       ` Tabi Timur-B04825
2012-07-23 23:12         ` Benjamin Herrenschmidt
2012-07-23 23:15           ` Timur Tabi
2012-07-23 23:29             ` Benjamin Herrenschmidt
2012-07-23 23:30               ` Benjamin Herrenschmidt
2012-07-24  1:37                 ` Scott Wood
2012-07-23 23:36               ` Timur Tabi
2012-07-24  3:08                 ` Benjamin Herrenschmidt
2012-07-24  3:52                   ` Tabi Timur-B04825
2012-07-24  3:59                   ` Zang Roy-R61911
2012-07-24  4:04                   ` Tabi Timur-B04825
2012-07-24  4:45                     ` Benjamin Herrenschmidt
2012-07-24  8:01                       ` Bhushan Bharat-R65777
2012-07-24  1:49       ` Scott Wood

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=500D7921.6060804@freescale.com \
    --to=scottwood@freescale.com \
    --cc=B41889@freescale.com \
    --cc=Mingkai.hu@freescale.com \
    --cc=Shaohui.Xie@freescale.com \
    --cc=benh@kernel.crashing.org \
    --cc=linuxppc-dev@lists.ozlabs.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.