diff options
author | Mark Salter <msalter@redhat.com> | 2014-08-13 12:04:49 -0400 |
---|---|---|
committer | Kees Cook <keescook@chromium.org> | 2014-10-16 17:38:52 -0400 |
commit | b615bbbff1c4d6fcd13007e75d75f6510aeb3808 (patch) | |
tree | 6b6ed6b813bd710d73aa77b5f68e6628e2a1a7fd /arch/arm/include | |
parent | bfe01a5ba2490f299e1d2d5508cbbbadd897bbe9 (diff) |
arm: use generic fixmap.h
ARM is different from other architectures in that fixmap pages are indexed
with a positive offset from FIXADDR_START. Other architectures index with
a negative offset from FIXADDR_TOP. In order to use the generic fixmap.h
definitions, this patch redefines FIXADDR_TOP to be inclusive of the
useable range. That is, FIXADDR_TOP is the virtual address of the topmost
fixed page. The newly defined FIXADDR_END is the first virtual address
past the fixed mappings.
Signed-off-by: Mark Salter <msalter@redhat.com>
Reviewed-by: Doug Anderson <dianders@chromium.org>
[kees: update for a05e54c103b0 ("ARM: 8031/2: change fixmap ...")]
Signed-off-by: Kees Cook <keescook@chromium.org>
Cc: Laura Abbott <lauraa@codeaurora.org>
Cc: Rob Herring <robh@kernel.org>
Acked-by: Nicolas Pitre <nico@linaro.org>
Diffstat (limited to 'arch/arm/include')
-rw-r--r-- | arch/arm/include/asm/fixmap.h | 27 |
1 files changed, 9 insertions, 18 deletions
diff --git a/arch/arm/include/asm/fixmap.h b/arch/arm/include/asm/fixmap.h index 74124b0d0d79..a7add6f9315d 100644 --- a/arch/arm/include/asm/fixmap.h +++ b/arch/arm/include/asm/fixmap.h | |||
@@ -2,27 +2,18 @@ | |||
2 | #define _ASM_FIXMAP_H | 2 | #define _ASM_FIXMAP_H |
3 | 3 | ||
4 | #define FIXADDR_START 0xffc00000UL | 4 | #define FIXADDR_START 0xffc00000UL |
5 | #define FIXADDR_TOP 0xffe00000UL | 5 | #define FIXADDR_END 0xffe00000UL |
6 | #define FIXADDR_SIZE (FIXADDR_TOP - FIXADDR_START) | 6 | #define FIXADDR_TOP (FIXADDR_END - PAGE_SIZE) |
7 | 7 | ||
8 | #define FIX_KMAP_NR_PTES (FIXADDR_SIZE >> PAGE_SHIFT) | 8 | #include <asm/kmap_types.h> |
9 | 9 | ||
10 | #define __fix_to_virt(x) (FIXADDR_START + ((x) << PAGE_SHIFT)) | 10 | enum fixed_addresses { |
11 | #define __virt_to_fix(x) (((x) - FIXADDR_START) >> PAGE_SHIFT) | 11 | FIX_KMAP_BEGIN, |
12 | FIX_KMAP_END = FIX_KMAP_BEGIN + (KM_TYPE_NR * NR_CPUS) - 1, | ||
12 | 13 | ||
13 | extern void __this_fixmap_does_not_exist(void); | 14 | __end_of_fixed_addresses |
15 | }; | ||
14 | 16 | ||
15 | static inline unsigned long fix_to_virt(const unsigned int idx) | 17 | #include <asm-generic/fixmap.h> |
16 | { | ||
17 | if (idx >= FIX_KMAP_NR_PTES) | ||
18 | __this_fixmap_does_not_exist(); | ||
19 | return __fix_to_virt(idx); | ||
20 | } | ||
21 | |||
22 | static inline unsigned int virt_to_fix(const unsigned long vaddr) | ||
23 | { | ||
24 | BUG_ON(vaddr >= FIXADDR_TOP || vaddr < FIXADDR_START); | ||
25 | return __virt_to_fix(vaddr); | ||
26 | } | ||
27 | 18 | ||
28 | #endif | 19 | #endif |