Loading Documentation/arm/memory.txt +1 −1 Original line number Diff line number Diff line Loading @@ -41,7 +41,7 @@ fffe8000 fffeffff DTCM mapping area for platforms with fffe0000 fffe7fff ITCM mapping area for platforms with ITCM mounted inside the CPU. ffc00000 ffdfffff Fixmap mapping region. Addresses provided ffc00000 ffefffff Fixmap mapping region. Addresses provided by fix_to_virt() will be located here. fee00000 feffffff Mapping of PCI I/O space. This is a static Loading arch/arm/include/asm/cacheflush.h +10 −0 Original line number Diff line number Diff line Loading @@ -487,6 +487,16 @@ int set_memory_rw(unsigned long addr, int numpages); int set_memory_x(unsigned long addr, int numpages); int set_memory_nx(unsigned long addr, int numpages); #ifdef CONFIG_DEBUG_RODATA void mark_rodata_ro(void); void set_kernel_text_rw(void); void set_kernel_text_ro(void); #else static inline void set_kernel_text_rw(void) { } static inline void set_kernel_text_ro(void) { } #endif void flush_uprobe_xol_access(struct page *page, unsigned long uaddr, void *kaddr, unsigned long len); #endif arch/arm/include/asm/fixmap.h +14 −17 Original line number Diff line number Diff line Loading @@ -2,27 +2,24 @@ #define _ASM_FIXMAP_H #define FIXADDR_START 0xffc00000UL #define FIXADDR_TOP 0xffe00000UL #define FIXADDR_SIZE (FIXADDR_TOP - FIXADDR_START) #define FIXADDR_END 0xfff00000UL #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)) #define __virt_to_fix(x) (((x) - FIXADDR_START) >> PAGE_SHIFT) enum fixed_addresses { FIX_KMAP_BEGIN, FIX_KMAP_END = FIX_KMAP_BEGIN + (KM_TYPE_NR * NR_CPUS) - 1, extern void __this_fixmap_does_not_exist(void); /* Support writing RO kernel text via kprobes, jump labels, etc. */ FIX_TEXT_POKE0, FIX_TEXT_POKE1, static inline unsigned long fix_to_virt(const unsigned int idx) { if (idx >= FIX_KMAP_NR_PTES) __this_fixmap_does_not_exist(); return __fix_to_virt(idx); } __end_of_fixed_addresses }; static inline unsigned int virt_to_fix(const unsigned long vaddr) { BUG_ON(vaddr >= FIXADDR_TOP || vaddr < FIXADDR_START); return __virt_to_fix(vaddr); } void __set_fixmap(enum fixed_addresses idx, phys_addr_t phys, pgprot_t prot); #include <asm-generic/fixmap.h> #endif arch/arm/kernel/Makefile +1 −1 Original line number Diff line number Diff line Loading @@ -68,7 +68,7 @@ test-kprobes-objs += kprobes-test-arm.o endif obj-$(CONFIG_OABI_COMPAT) += sys_oabi-compat.o obj-$(CONFIG_ARM_THUMBEE) += thumbee.o obj-$(CONFIG_KGDB) += kgdb.o obj-$(CONFIG_KGDB) += kgdb.o patch.o obj-$(CONFIG_ARM_UNWIND) += unwind.o obj-$(CONFIG_HAVE_TCM) += tcm.o obj-$(CONFIG_OF) += devtree.o Loading arch/arm/kernel/ftrace.c +19 −0 Original line number Diff line number Diff line Loading @@ -15,6 +15,7 @@ #include <linux/ftrace.h> #include <linux/uaccess.h> #include <linux/module.h> #include <linux/stop_machine.h> #include <asm/cacheflush.h> #include <asm/opcodes.h> Loading @@ -35,6 +36,22 @@ #define OLD_NOP 0xe1a00000 /* mov r0, r0 */ static int __ftrace_modify_code(void *data) { int *command = data; set_kernel_text_rw(); ftrace_modify_all_code(*command); set_kernel_text_ro(); return 0; } void arch_ftrace_update_code(int command) { stop_machine(__ftrace_modify_code, &command, NULL); } static unsigned long ftrace_nop_replace(struct dyn_ftrace *rec) { return rec->arch.old_mcount ? OLD_NOP : NOP; Loading Loading @@ -73,6 +90,8 @@ int ftrace_arch_code_modify_prepare(void) int ftrace_arch_code_modify_post_process(void) { set_all_modules_text_ro(); /* Make sure any TLB misses during machine stop are cleared. */ flush_tlb_all(); return 0; } Loading Loading
Documentation/arm/memory.txt +1 −1 Original line number Diff line number Diff line Loading @@ -41,7 +41,7 @@ fffe8000 fffeffff DTCM mapping area for platforms with fffe0000 fffe7fff ITCM mapping area for platforms with ITCM mounted inside the CPU. ffc00000 ffdfffff Fixmap mapping region. Addresses provided ffc00000 ffefffff Fixmap mapping region. Addresses provided by fix_to_virt() will be located here. fee00000 feffffff Mapping of PCI I/O space. This is a static Loading
arch/arm/include/asm/cacheflush.h +10 −0 Original line number Diff line number Diff line Loading @@ -487,6 +487,16 @@ int set_memory_rw(unsigned long addr, int numpages); int set_memory_x(unsigned long addr, int numpages); int set_memory_nx(unsigned long addr, int numpages); #ifdef CONFIG_DEBUG_RODATA void mark_rodata_ro(void); void set_kernel_text_rw(void); void set_kernel_text_ro(void); #else static inline void set_kernel_text_rw(void) { } static inline void set_kernel_text_ro(void) { } #endif void flush_uprobe_xol_access(struct page *page, unsigned long uaddr, void *kaddr, unsigned long len); #endif
arch/arm/include/asm/fixmap.h +14 −17 Original line number Diff line number Diff line Loading @@ -2,27 +2,24 @@ #define _ASM_FIXMAP_H #define FIXADDR_START 0xffc00000UL #define FIXADDR_TOP 0xffe00000UL #define FIXADDR_SIZE (FIXADDR_TOP - FIXADDR_START) #define FIXADDR_END 0xfff00000UL #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)) #define __virt_to_fix(x) (((x) - FIXADDR_START) >> PAGE_SHIFT) enum fixed_addresses { FIX_KMAP_BEGIN, FIX_KMAP_END = FIX_KMAP_BEGIN + (KM_TYPE_NR * NR_CPUS) - 1, extern void __this_fixmap_does_not_exist(void); /* Support writing RO kernel text via kprobes, jump labels, etc. */ FIX_TEXT_POKE0, FIX_TEXT_POKE1, static inline unsigned long fix_to_virt(const unsigned int idx) { if (idx >= FIX_KMAP_NR_PTES) __this_fixmap_does_not_exist(); return __fix_to_virt(idx); } __end_of_fixed_addresses }; static inline unsigned int virt_to_fix(const unsigned long vaddr) { BUG_ON(vaddr >= FIXADDR_TOP || vaddr < FIXADDR_START); return __virt_to_fix(vaddr); } void __set_fixmap(enum fixed_addresses idx, phys_addr_t phys, pgprot_t prot); #include <asm-generic/fixmap.h> #endif
arch/arm/kernel/Makefile +1 −1 Original line number Diff line number Diff line Loading @@ -68,7 +68,7 @@ test-kprobes-objs += kprobes-test-arm.o endif obj-$(CONFIG_OABI_COMPAT) += sys_oabi-compat.o obj-$(CONFIG_ARM_THUMBEE) += thumbee.o obj-$(CONFIG_KGDB) += kgdb.o obj-$(CONFIG_KGDB) += kgdb.o patch.o obj-$(CONFIG_ARM_UNWIND) += unwind.o obj-$(CONFIG_HAVE_TCM) += tcm.o obj-$(CONFIG_OF) += devtree.o Loading
arch/arm/kernel/ftrace.c +19 −0 Original line number Diff line number Diff line Loading @@ -15,6 +15,7 @@ #include <linux/ftrace.h> #include <linux/uaccess.h> #include <linux/module.h> #include <linux/stop_machine.h> #include <asm/cacheflush.h> #include <asm/opcodes.h> Loading @@ -35,6 +36,22 @@ #define OLD_NOP 0xe1a00000 /* mov r0, r0 */ static int __ftrace_modify_code(void *data) { int *command = data; set_kernel_text_rw(); ftrace_modify_all_code(*command); set_kernel_text_ro(); return 0; } void arch_ftrace_update_code(int command) { stop_machine(__ftrace_modify_code, &command, NULL); } static unsigned long ftrace_nop_replace(struct dyn_ftrace *rec) { return rec->arch.old_mcount ? OLD_NOP : NOP; Loading Loading @@ -73,6 +90,8 @@ int ftrace_arch_code_modify_prepare(void) int ftrace_arch_code_modify_post_process(void) { set_all_modules_text_ro(); /* Make sure any TLB misses during machine stop are cleared. */ flush_tlb_all(); return 0; } Loading