From: Russell King - ARM Linux <linux@arm.linux.org.uk>
To: Rob Herring <robherring2@gmail.com>
Cc: "linux-arm-kernel@lists.infradead.org"
<linux-arm-kernel@lists.infradead.org>,
"linux-kernel@vger.kernel.org" <linux-kernel@vger.kernel.org>,
Arnd Bergmann <arnd@arndb.de>
Subject: Re: [PATCH RFC 46/51] ARM: DMA-API: better handing of DMA masks for coherent allocations
Date: Tue, 6 Aug 2013 00:44:02 +0100 [thread overview]
Message-ID: <20130805234402.GZ23006@n2100.arm.linux.org.uk> (raw)
In-Reply-To: <CAL_JsqJH-T3bBNZvQZF2aWS18n5wfSzCMEi20-5e1RmYEfF3Ow@mail.gmail.com>
On Mon, Aug 05, 2013 at 05:43:47PM -0500, Rob Herring wrote:
> On Thu, Aug 1, 2013 at 5:20 PM, Russell King
> <rmk+kernel@arm.linux.org.uk> wrote:
> > We need to start treating DMA masks as something which is specific to
> > the bus that the device resides on, otherwise we're going to hit all
> > sorts of nasty issues with LPAE and 32-bit DMA controllers in >32-bit
> > systems, where memory is offset from PFN 0.
> >
> > In order to start doing this, we convert the DMA mask to a PFN using
> > the device specific dma_to_pfn() macro. This is the reverse of the
> > pfn_to_dma() macro which is used to get the DMA address for the device.
> >
> > This gives us a PFN mask, which we can then check against the PFN
> > limit of the DMA zone.
> >
> > Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
> > ---
> > arch/arm/mm/dma-mapping.c | 49 ++++++++++++++++++++++++++++++++++++++++----
> > arch/arm/mm/init.c | 2 +
> > arch/arm/mm/mm.h | 2 +
> > 3 files changed, 48 insertions(+), 5 deletions(-)
>
> I believe you missed handling __dma_alloc. I have a different fix than
> what Andreas posted. I think DMA zone handling is broken in all cases
> here. Feel free to combine this in to your patch if you agree.
I was starting to wonder if whether anyone was going to look at those
patches...
> diff --git a/arch/arm/mm/dma-mapping.c b/arch/arm/mm/dma-mapping.c
> index 7f9b179..3d9bdfb 100644
> --- a/arch/arm/mm/dma-mapping.c
> +++ b/arch/arm/mm/dma-mapping.c
> @@ -651,7 +651,7 @@ static void *__dma_alloc(struct device *dev,
> size_t size, dma_addr_t *handle,
> if (!mask)
> return NULL;
>
> - if (mask < 0xffffffffULL)
> + if (mask <= (u64)arm_dma_limit)
> gfp |= GFP_DMA;
I'm not convinced on that - I think you've missed the entire point in
this patch series about what address space the 'mask' is in. 'mask' is
in the device's address space, which may not be the same as the physical
address space.
With LPAE, the two can become quite different address spaces with a
4GB offset between them. That's why we must stop the old-school
thinking that DMA addresses and physical addresses are the same thing.
We also need to stop doing stuff like passing dma_addr_t variables into
phys_to_virt(). (All those short-cuts are going to break!)
arm_dma_limit is the physical address space. So, comparing the two
makes no sense what so ever.
However, the use of arm_dma_limit at the top of get_coherent_dma_mask()
is a bug, I think that should just become something like a 24-bit
constant mask, so the NULL device gets GFP_DMA allocations like they
do on x86 for that case.
I also think that 'mask' should be converted to a pfn at the location
you point out before comparing with the amount of memory in the DMA
zone.
next prev parent reply other threads:[~2013-08-05 23:44 UTC|newest]
Thread overview: 59+ messages / expand[flat|nested] mbox.gz Atom feed top
2013-08-01 21:34 [PATCH RFC 00/51] Preview of DMA mask changes Russell King - ARM Linux
2013-08-01 21:35 ` [PATCH RFC 01/51] DMA-API: provide a helper to set both DMA and coherent DMA masks Russell King
2013-08-01 21:36 ` [PATCH RFC 02/51] DMA-API: net: brocade/bna/bnad.c: fix 32-bit DMA mask handling Russell King
2013-08-01 21:37 ` [PATCH RFC 03/51] DMA-API: net: intel/e1000e: " Russell King
2013-08-01 21:38 ` [PATCH RFC 04/51] DMA-API: net: intel/igb: " Russell King
2013-08-01 21:39 ` [PATCH RFC 05/51] DMA-API: net: intel/igbvf: " Russell King
2013-08-01 21:40 ` [PATCH RFC 06/51] DMA-API: net: intel/ixgb: " Russell King
2013-08-01 21:41 ` [PATCH RFC 07/51] DMA-API: net: intel/ixgbe: " Russell King
2013-08-01 21:42 ` [PATCH RFC 08/51] DMA-API: net: intel/ixgbevf: " Russell King
2013-08-01 21:43 ` [PATCH RFC 09/51] DMA-API: net: broadcom/b44: replace dma_set_mask()+dma_set_coherent_mask() with new helper Russell King
2013-08-01 21:44 ` [PATCH RFC 10/51] DMA-API: net: broadcom/bnx2x: " Russell King
2013-08-01 21:45 ` [PATCH RFC 11/51] DMA-API: net: emulex/benet: " Russell King
2013-08-01 21:46 ` [PATCH RFC 12/51] DMA-API: net: intel/e1000: " Russell King
2013-08-01 21:47 ` [PATCH RFC 13/51] DMA-API: net: sfc/efx.c: " Russell King
2013-08-01 21:48 ` [PATCH RFC 14/51] DMA-API: net: b43: " Russell King
2013-08-01 21:49 ` [PATCH RFC 15/51] DMA-API: net: b43legacy: " Russell King
2013-08-01 21:50 ` [PATCH RFC 16/51] DMA-API: ppc: vio.c: " Russell King
2013-08-01 21:51 ` [PATCH RFC 17/51] DMA-API: block: nvme-core: " Russell King
2013-08-01 21:52 ` [PATCH RFC 18/51] DMA-API: staging: et131x: " Russell King
2013-08-01 21:53 ` [PATCH RFC 19/51] DMA-API: media: dt3155v4l: " Russell King
2013-08-01 21:54 ` [PATCH RFC 20/51] DMA-API: usb: bcma: " Russell King
2013-08-01 21:55 ` [PATCH RFC 21/51] DMA-API: usb: ssb-hcd: " Russell King
2013-08-01 21:56 ` [PATCH RFC 22/51] DMA-API: amba: get rid of separate dma_mask Russell King
2013-08-01 21:57 ` [PATCH RFC 23/51] DMA-API: dma: pl08x: add dma_set_mask_and_coherent() call Russell King
2013-08-01 21:58 ` [PATCH RFC 24/51] DMA-API: dma: pl330: " Russell King
2013-08-01 21:59 ` [PATCH RFC 25/51] DMA-API: video: clcd: " Russell King
2013-08-01 22:00 ` [PATCH RFC 26/51] DMA-API: usb: ohci-sa1111: add a note about DMA masks Russell King
2013-08-01 22:01 ` [PATCH RFC 27/51] DMA-API: provide a helper to setup " Russell King
2013-08-01 22:02 ` [PATCH RFC 28/51] DMA-API: sound: fix dma mask handling in a lot of drivers Russell King
2013-08-01 22:03 ` [PATCH RFC 29/51] DMA-API: ata: pata_octeon_cf: convert to use dma_coerce_mask_and_coherent() Russell King
2013-08-01 22:04 ` [PATCH RFC 30/51] DMA-API: dma: dw_dmac.c: " Russell King
2013-08-01 22:05 ` [PATCH RFC 31/51] DMA-API: media: omap3isp: " Russell King
2013-08-01 22:06 ` [PATCH RFC 32/51] DMA-API: mmc: sdhci-acpi: " Russell King
2013-08-01 22:07 ` [PATCH RFC 33/51] DMA-API: net: nxp/lpc_eth: " Russell King
2013-08-01 22:08 ` [PATCH RFC 34/51] DMA-API: net: octeon: " Russell King
2013-08-01 22:09 ` [PATCH RFC 35/51] DMA-API: parport: parport_pc.c: " Russell King
2013-08-01 22:10 ` [PATCH RFC 36/51] DMA-API: usb: use dma_set_coherent_mask() Russell King
2013-08-01 22:11 ` [PATCH RFC 37/51] DMA-API: usb: use new dma_coerce_mask_and_coherent() Russell King
2013-08-01 22:12 ` [PATCH RFC 38/51] DMA-API: staging: use dma_set_coherent_mask() Russell King
2013-08-01 22:13 ` [PATCH RFC 39/51] DMA-API: others: " Russell King
2013-08-01 22:14 ` [PATCH RFC 40/51] DMA-API: crypto: fix ixp4xx crypto platform device support Russell King
2013-08-01 22:15 ` [PATCH RFC 41/51] DMA-API: crypto: remove last references to 'static struct device *dev' Russell King
2013-08-01 22:16 ` [PATCH RFC 42/51] DMA-API: usb: musb: use platform_device_register_full() to avoid directly messing with dma masks Russell King
2013-08-01 22:17 ` [PATCH RFC 43/51] DMA-API: dma: edma.c: no need to explicitly initialize DMA masks Russell King
2013-08-01 22:18 ` [PATCH RFC 44/51] DMA-API: dcdbas: update DMA mask handing Russell King
2013-08-01 22:19 ` [PATCH RFC 45/51] DMA-API: firmware/google/gsmi.c: avoid direct access to DMA masks Russell King
2013-08-01 22:20 ` [PATCH RFC 46/51] ARM: DMA-API: better handing of DMA masks for coherent allocations Russell King
2013-08-05 22:43 ` Rob Herring
2013-08-05 23:44 ` Russell King - ARM Linux [this message]
2013-08-09 11:35 ` Tushar Behera
2013-08-01 22:21 ` [PATCH RFC 47/51] ARM: 7794/1: block: Rename parameter dma_mask to max_addr for blk_queue_bounce_limit() Santosh Shilimkar
2013-08-01 22:37 ` Russell King - ARM Linux
2013-08-01 22:22 ` [PATCH RFC 48/51] ARM: 7795/1: mm: dma-mapping: Add dma_max_pfn(dev) helper function Santosh Shilimkar
2013-08-01 22:23 ` [PATCH RFC 49/51] ARM: 7796/1: scsi: Use dma_max_pfn(dev) helper for bounce_limit calculations Santosh Shilimkar
2013-08-01 22:24 ` [PATCH RFC 50/51] ARM: 7797/1: mmc: " Santosh Shilimkar
2013-08-01 22:25 ` [PATCH RFC 51/51] ARM: 7805/1: mm: change max*pfn to include the physical offset of memory Santosh Shilimkar
2013-08-06 3:15 ` Rob Herring
2013-08-06 8:51 ` Russell King - ARM Linux
2013-08-14 10:38 ` [PATCH RFC 00/51] Preview of DMA mask changes Russell King - ARM Linux
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=20130805234402.GZ23006@n2100.arm.linux.org.uk \
--to=linux@arm.linux.org.uk \
--cc=arnd@arndb.de \
--cc=linux-arm-kernel@lists.infradead.org \
--cc=linux-kernel@vger.kernel.org \
--cc=robherring2@gmail.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
all inboxes | Powered by JetHome®