mirror of https://gitee.com/openkylin/linux.git
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 a05e54c103
("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>
This commit is contained in:
parent
bfe01a5ba2
commit
b615bbbff1
|
@ -2,27 +2,18 @@
|
||||||
#define _ASM_FIXMAP_H
|
#define _ASM_FIXMAP_H
|
||||||
|
|
||||||
#define FIXADDR_START 0xffc00000UL
|
#define FIXADDR_START 0xffc00000UL
|
||||||
#define FIXADDR_TOP 0xffe00000UL
|
#define FIXADDR_END 0xffe00000UL
|
||||||
#define FIXADDR_SIZE (FIXADDR_TOP - FIXADDR_START)
|
#define FIXADDR_TOP (FIXADDR_END - PAGE_SIZE)
|
||||||
|
|
||||||
#define FIX_KMAP_NR_PTES (FIXADDR_SIZE >> PAGE_SHIFT)
|
#include <asm/kmap_types.h>
|
||||||
|
|
||||||
#define __fix_to_virt(x) (FIXADDR_START + ((x) << PAGE_SHIFT))
|
enum fixed_addresses {
|
||||||
#define __virt_to_fix(x) (((x) - FIXADDR_START) >> PAGE_SHIFT)
|
FIX_KMAP_BEGIN,
|
||||||
|
FIX_KMAP_END = FIX_KMAP_BEGIN + (KM_TYPE_NR * NR_CPUS) - 1,
|
||||||
|
|
||||||
extern void __this_fixmap_does_not_exist(void);
|
__end_of_fixed_addresses
|
||||||
|
};
|
||||||
|
|
||||||
static inline unsigned long fix_to_virt(const unsigned int idx)
|
#include <asm-generic/fixmap.h>
|
||||||
{
|
|
||||||
if (idx >= FIX_KMAP_NR_PTES)
|
|
||||||
__this_fixmap_does_not_exist();
|
|
||||||
return __fix_to_virt(idx);
|
|
||||||
}
|
|
||||||
|
|
||||||
static inline unsigned int virt_to_fix(const unsigned long vaddr)
|
|
||||||
{
|
|
||||||
BUG_ON(vaddr >= FIXADDR_TOP || vaddr < FIXADDR_START);
|
|
||||||
return __virt_to_fix(vaddr);
|
|
||||||
}
|
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -570,7 +570,7 @@ void __init mem_init(void)
|
||||||
MLK(DTCM_OFFSET, (unsigned long) dtcm_end),
|
MLK(DTCM_OFFSET, (unsigned long) dtcm_end),
|
||||||
MLK(ITCM_OFFSET, (unsigned long) itcm_end),
|
MLK(ITCM_OFFSET, (unsigned long) itcm_end),
|
||||||
#endif
|
#endif
|
||||||
MLK(FIXADDR_START, FIXADDR_TOP),
|
MLK(FIXADDR_START, FIXADDR_END),
|
||||||
MLM(VMALLOC_START, VMALLOC_END),
|
MLM(VMALLOC_START, VMALLOC_END),
|
||||||
MLM(PAGE_OFFSET, (unsigned long)high_memory),
|
MLM(PAGE_OFFSET, (unsigned long)high_memory),
|
||||||
#ifdef CONFIG_HIGHMEM
|
#ifdef CONFIG_HIGHMEM
|
||||||
|
|
Loading…
Reference in New Issue