Re: [PATCH] ARM: allow, but warn, when issuing ioremap() on RAM

Previous message: [thread] [date] [author]
Next message: [thread] [date] [author]
From: Russell King - ARM Linux
Date: Friday, October 8, 2010 - 5:10 pm

On Sat, Oct 09, 2010 at 12:44:48AM +0100, Russell King - ARM Linux wrote:

There is another solution to this which will be architecturally compliant
- as we can detect system ram ioremaps, we can force them to have the
same memory type, sharability and cache attributes as the existing
mappings rather than merely failing them.  But this is not what drivers
want.

The reason they play the ioremap-system-RAM game is to get around the
DMA coherence issues - rather than using the DMA API, because that
suffers from being incapable of dealing with large contiguous chunks
of memory.

Anyway, to fill other observers in, the issue here is:
- ARMv6 and above have weak memory ordering models.

- ARMv6 and above can speculatively prefetch from any region which has
  a 'normal memory' type.  As further hardware revisions are released,
  the speculative prefetch becomes progressively more aggressive.

- multiple mappings of the same physical address region with differing
  memory type (strongly ordered, device, normal memory) becomes
  unpredictable.  The memory type partly defines which reads/writes are
  allowed to bypass other reads/writes.  Unpredictable here means that
  there is no guarantee whether the access performed via the mapping
  you've created will be done as per the memory type specified in that
  mapping.

- multiple mappings of the same physical address region with differing
  sharability attributes have been observed to cause systems to crash/hang,
  but fall under the 'unpredictable' behaviour - which basically means
  you don't know if the coherence hardware will be involved in the
  access.

- multiple mappings of the same physical address region with differing
  cache attributes is also unpredictable - you can't guarantee whether
  the access will be performed using the cache attributes through the
  mapping you're performing the access through.

In the case of system memory, this is normally mapped as 'normal memory'
with write-back cache.  On uniprocessor systems, this is mapped as
non-shared memory.

ioremap() creates 'device' type mappings, which are marked as shared
(some devices, the shared-ness is used as another address bit!)

So, permitting ioremap of system RAM violates all three - which means
there is no guarantee of ordering, sharedness or cache behaviour via
mappings which alias with differing attributes.
--
Previous message: [thread] [date] [author]
Next message: [thread] [date] [author]

Messages in current thread:
[PATCH] ARM: allow, but warn, when issuing ioremap() on RAM, Felipe Contreras, (Thu Oct 7, 2:44 am)
Re: [PATCH v2] ARM: allow, but warn, when issuing ioremap( ..., Uwe Kleine-König, (Thu Oct 7, 11:00 am)
Re: [PATCH] ARM: allow, but warn, when issuing ioremap() o ..., Russell King - ARM Linux, (Thu Oct 7, 12:22 pm)
Re: [PATCH] ARM: allow, but warn, when issuing ioremap() o ..., Russell King - ARM Linux, (Fri Oct 8, 10:53 am)
Re: [PATCH] ARM: allow, but warn, when issuing ioremap() o ..., Russell King - ARM Linux, (Fri Oct 8, 4:04 pm)
Re: [PATCH] ARM: allow, but warn, when issuing ioremap() o ..., Russell King - ARM Linux, (Fri Oct 8, 4:44 pm)
Re: [PATCH] ARM: allow, but warn, when issuing ioremap() o ..., Russell King - ARM Linux, (Fri Oct 8, 5:10 pm)
Re: [PATCH] ARM: allow, but warn, when issuing ioremap() o ..., Russell King - ARM Linux, (Fri Oct 8, 5:25 pm)
Re: [PATCH] ARM: allow, but warn, when issuing ioremap() o ..., Russell King - ARM Linux, (Sat Oct 9, 1:56 am)
Re: [PATCH] ARM: allow, but warn, when issuing ioremap() o ..., Russell King - ARM Linux, (Sat Oct 9, 2:21 am)
Re: [PATCH] ARM: allow, but warn, when issuing ioremap() o ..., Russell King - ARM Linux, (Sat Oct 9, 5:05 am)
Re: [PATCH] ARM: allow, but warn, when issuing ioremap() o ..., Russell King - ARM Linux, (Sat Oct 9, 6:52 am)
Re: [PATCH] ARM: allow, but warn, when issuing ioremap() o ..., Russell King - ARM Linux, (Sat Oct 9, 7:37 am)
Re: [PATCH] ARM: allow, but warn, when issuing ioremap() o ..., Russell King - ARM Linux, (Sat Oct 9, 9:45 am)
Re: [PATCH] ARM: allow, but warn, when issuing ioremap() o ..., Guennadi Liakhovetski, (Sat Oct 9, 11:59 am)
RE: [PATCH] ARM: allow, but warn, when issuing ioremap() o ..., Pedanekar, Hemant, (Sun Oct 10, 7:23 am)
Re: [PATCH] ARM: allow, but warn, when issuing ioremap() o ..., Uwe Kleine-König, (Mon Oct 11, 1:35 am)
Re: [PATCH] ARM: allow, but warn, when issuing ioremap() o ..., Russell King - ARM Linux, (Mon Oct 11, 2:02 am)
Re: [PATCH] ARM: allow, but warn, when issuing ioremap() o ..., Uwe Kleine-König, (Mon Oct 11, 2:24 am)
Re: [PATCH] ARM: allow, but warn, when issuing ioremap() o ..., Russell King - ARM Linux, (Mon Oct 11, 3:15 am)
Re: [PATCH] ARM: allow, but warn, when issuing ioremap() o ..., Russell King - ARM Linux, (Mon Oct 11, 3:52 am)
Re: [PATCH] ARM: allow, but warn, when issuing ioremap() o ..., Russell King - ARM Linux, (Mon Oct 11, 8:25 am)
RE: [PATCH] ARM: allow, but warn, when issuing ioremap() o ..., Woodruff, Richard, (Wed Oct 13, 9:17 am)
RE: [PATCH] ARM: allow, but warn, when issuing ioremap() o ..., Woodruff, Richard, (Thu Oct 14, 8:29 am)
Re: [PATCH] ARM: allow, but warn, when issuing ioremap() o ..., Felipe Contreras, (Thu Oct 14, 10:44 am)
Re: [PATCH] ARM: allow, but warn, when issuing ioremap() o ..., Benjamin Herrenschmidt, (Fri Oct 15, 7:36 pm)
Re: [PATCH] ARM: allow, but warn, when issuing ioremap() o ..., Benjamin Herrenschmidt, (Fri Oct 15, 7:39 pm)
RE: [PATCH] ARM: allow, but warn, when issuing ioremap() o ..., Woodruff, Richard, (Sun Oct 17, 6:05 am)
RE: [PATCH] ARM: allow, but warn, when issuing ioremap() o ..., Benjamin Herrenschmidt, (Sun Oct 17, 4:17 pm)
Re: [PATCH] ARM: allow, but warn, when issuing ioremap() o ..., Russell King - ARM Linux, (Tue Oct 19, 11:12 am)
Re: [PATCH] ARM: allow, but warn, when issuing ioremap() o ..., Russell King - ARM Linux, (Tue Oct 19, 12:21 pm)
Re: About multi-line printk and the need (not) to repeat l ..., Uwe Kleine-König, (Tue Nov 23, 3:39 am)
Re: About multi-line printk and the need (not) to repeat l ..., Uwe Kleine-König, (Tue Nov 23, 3:58 am)
Re: About multi-line printk and the need (not) to repeat l ..., Russell King - ARM Linux, (Tue Nov 23, 3:33 pm)
Re: About multi-line printk and the need (not) to repeat l ..., Uwe Kleine-König, (Wed Nov 24, 1:17 am)
[PATCH 0/6] add some KERN_CONT markers to continuation lines, Uwe Kleine-König, (Wed Nov 24, 1:56 am)
[PATCH 1/6] ARM: add some KERN_CONT markers to continuatio ..., =?UTF-8?q?Uwe=20Klei ..., (Wed Nov 24, 1:57 am)
[PATCH 2/6] block: add some KERN_CONT markers to continuat ..., =?UTF-8?q?Uwe=20Klei ..., (Wed Nov 24, 1:57 am)
[PATCH 3/6] net: add some KERN_CONT markers to continuatio ..., =?UTF-8?q?Uwe=20Klei ..., (Wed Nov 24, 1:57 am)
[PATCH 4/6] init: add some KERN_CONT markers to continuati ..., =?UTF-8?q?Uwe=20Klei ..., (Wed Nov 24, 1:57 am)
[PATCH 5/6] mm: add some KERN_CONT markers to continuation ..., =?UTF-8?q?Uwe=20Klei ..., (Wed Nov 24, 1:57 am)
[PATCH 6/6] tty/vt: add some KERN_CONT markers to continua ..., =?UTF-8?q?Uwe=20Klei ..., (Wed Nov 24, 1:57 am)
Re: About multi-line printk and the need (not) to repeat l ..., Michał Mirosław, (Wed Nov 24, 2:09 am)