Re: [RFC PATCH 1/3] asm-generic: io: Add exec versions of ioremap
From: Dave Gerlach
Date: Wed May 25 2016 - 11:46:54 EST
On 05/18/2016 03:57 PM, Russell King - ARM Linux wrote:
On Wed, May 18, 2016 at 10:25:03PM +0200, Arnd Bergmann wrote:
The ARM version of ioremap_exec() that gets added in this patch is cached
(like memremap()), but then the asm-generic version is not? This is
even more confusing, it should at least do roughly the same thing across
There should also be some documentation about what the expected behavior is, e.g.:
- is memremap_exec() by default cached or not? (I assume it would
be like memremap())
- If we have an interface that does explicit uncached executable mapping,
what about architectures on which this is not possible? Should they
fall back to cached or non-executable, or cause a link error?
Yes by default memremap_exec is cached, I do plan to add more explicit
Well, I dont think that memremap_exec will be called directly but rather
using a flag with memremap as arch_memremap_wb is now, to keep the
memremap API unified, so a link error will prevent this. Also, the
function may be present in code but not actually used in all cases, the
example that comes to mind is the drivers/misc/sram.c code where other
runtime options are perfectly valid for determining how to map memory
even on architectures that can't memremap_exec_nocache.
I think that a remap that can't deliver what you have asked for should
return NULL here because if you are requesting executable, noncached
memory you presumably will try to execute from it and fail, so the
mapping should fail as it isn't actually valid if it can't do what you want.
Another important point is whether atomic instructions / kernel locks
can be located within the mapped memory.
At this point I'd imagine most of the users of this would be copying
small chunks of relocatable code (likely written in assembly) that would
handle low-level tasks without the need for atomic instructions/locks,
but is this something we should explicitly forbid in documentation?