diff options
| author | Russell King <rmk+kernel@arm.linux.org.uk> | 2014-11-03 05:12:13 -0500 |
|---|---|---|
| committer | Russell King <rmk+kernel@arm.linux.org.uk> | 2014-11-03 05:12:13 -0500 |
| commit | 06e944b8e5fc4bec83f102f98c1ee4f972f5f072 (patch) | |
| tree | d53b1c3ca270f49f1cae63bbe117cc8587e51510 /arch/arm/include | |
| parent | f114040e3ea6e07372334ade75d1ee0775c355e1 (diff) | |
| parent | 80d6b0c2eed2a504f6740cd1f5ea76dc50abfc4d (diff) | |
Merge tag 'ronx-next' of git://git.kernel.org/pub/scm/linux/kernel/git/kees/linux into devel-stable
generic fixmaps
ARM support for CONFIG_DEBUG_RODATA
Diffstat (limited to 'arch/arm/include')
| -rw-r--r-- | arch/arm/include/asm/cacheflush.h | 10 | ||||
| -rw-r--r-- | arch/arm/include/asm/fixmap.h | 31 |
2 files changed, 24 insertions, 17 deletions
diff --git a/arch/arm/include/asm/cacheflush.h b/arch/arm/include/asm/cacheflush.h index 10e78d00a0bb..2d46862e7bef 100644 --- a/arch/arm/include/asm/cacheflush.h +++ b/arch/arm/include/asm/cacheflush.h | |||
| @@ -487,6 +487,16 @@ int set_memory_rw(unsigned long addr, int numpages); | |||
| 487 | int set_memory_x(unsigned long addr, int numpages); | 487 | int set_memory_x(unsigned long addr, int numpages); |
| 488 | int set_memory_nx(unsigned long addr, int numpages); | 488 | int set_memory_nx(unsigned long addr, int numpages); |
| 489 | 489 | ||
| 490 | #ifdef CONFIG_DEBUG_RODATA | ||
| 491 | void mark_rodata_ro(void); | ||
| 492 | void set_kernel_text_rw(void); | ||
| 493 | void set_kernel_text_ro(void); | ||
| 494 | #else | ||
| 495 | static inline void set_kernel_text_rw(void) { } | ||
| 496 | static inline void set_kernel_text_ro(void) { } | ||
| 497 | #endif | ||
| 498 | |||
| 490 | void flush_uprobe_xol_access(struct page *page, unsigned long uaddr, | 499 | void flush_uprobe_xol_access(struct page *page, unsigned long uaddr, |
| 491 | void *kaddr, unsigned long len); | 500 | void *kaddr, unsigned long len); |
| 501 | |||
| 492 | #endif | 502 | #endif |
diff --git a/arch/arm/include/asm/fixmap.h b/arch/arm/include/asm/fixmap.h index 74124b0d0d79..0415eae1df27 100644 --- a/arch/arm/include/asm/fixmap.h +++ b/arch/arm/include/asm/fixmap.h | |||
| @@ -2,27 +2,24 @@ | |||
| 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 0xfff00000UL |
| 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 | /* Support writing RO kernel text via kprobes, jump labels, etc. */ |
| 15 | FIX_TEXT_POKE0, | ||
| 16 | FIX_TEXT_POKE1, | ||
| 14 | 17 | ||
| 15 | static inline unsigned long fix_to_virt(const unsigned int idx) | 18 | __end_of_fixed_addresses |
| 16 | { | 19 | }; |
| 17 | if (idx >= FIX_KMAP_NR_PTES) | ||
| 18 | __this_fixmap_does_not_exist(); | ||
| 19 | return __fix_to_virt(idx); | ||
| 20 | } | ||
| 21 | 20 | ||
| 22 | static inline unsigned int virt_to_fix(const unsigned long vaddr) | 21 | void __set_fixmap(enum fixed_addresses idx, phys_addr_t phys, pgprot_t prot); |
| 23 | { | 22 | |
| 24 | BUG_ON(vaddr >= FIXADDR_TOP || vaddr < FIXADDR_START); | 23 | #include <asm-generic/fixmap.h> |
| 25 | return __virt_to_fix(vaddr); | ||
| 26 | } | ||
| 27 | 24 | ||
| 28 | #endif | 25 | #endif |
