Loading arch/microblaze/include/asm/uaccess.h +69 −18 Original line number Diff line number Diff line Loading @@ -182,6 +182,39 @@ extern long __user_bad(void); * Returns zero on success, or -EFAULT on error. * On error, the variable @x is set to zero. */ #define get_user(x, ptr) \ __get_user_check((x), (ptr), sizeof(*(ptr))) #define __get_user_check(x, ptr, size) \ ({ \ unsigned long __gu_val = 0; \ const typeof(*(ptr)) __user *__gu_addr = (ptr); \ int __gu_err = 0; \ \ if (access_ok(VERIFY_READ, __gu_addr, size)) { \ switch (size) { \ case 1: \ __get_user_asm("lbu", __gu_addr, __gu_val, \ __gu_err); \ break; \ case 2: \ __get_user_asm("lhu", __gu_addr, __gu_val, \ __gu_err); \ break; \ case 4: \ __get_user_asm("lw", __gu_addr, __gu_val, \ __gu_err); \ break; \ default: \ __gu_err = __user_bad(); \ break; \ } \ } else { \ __gu_err = -EFAULT; \ } \ x = (typeof(*(ptr)))__gu_val; \ __gu_err; \ }) #define __get_user(x, ptr) \ ({ \ Loading @@ -206,12 +239,6 @@ extern long __user_bad(void); }) #define get_user(x, ptr) \ ({ \ access_ok(VERIFY_READ, (ptr), sizeof(*(ptr))) \ ? __get_user((x), (ptr)) : -EFAULT; \ }) #define __put_user_asm(insn, __gu_ptr, __gu_val, __gu_err) \ ({ \ __asm__ __volatile__ ( \ Loading Loading @@ -266,6 +293,42 @@ extern long __user_bad(void); * * Returns zero on success, or -EFAULT on error. */ #define put_user(x, ptr) \ __put_user_check((x), (ptr), sizeof(*(ptr))) #define __put_user_check(x, ptr, size) \ ({ \ typeof(*(ptr)) __pu_val; \ typeof(*(ptr)) __user *__pu_addr = (ptr); \ int __pu_err = 0; \ \ __pu_val = (x); \ if (access_ok(VERIFY_WRITE, __pu_addr, size)) { \ switch (size) { \ case 1: \ __put_user_asm("sb", __pu_addr, __pu_val, \ __pu_err); \ break; \ case 2: \ __put_user_asm("sh", __pu_addr, __pu_val, \ __pu_err); \ break; \ case 4: \ __put_user_asm("sw", __pu_addr, __pu_val, \ __pu_err); \ break; \ case 8: \ __put_user_asm_8(__pu_addr, __pu_val, __pu_err);\ break; \ default: \ __pu_err = __user_bad(); \ break; \ } \ } else { \ __pu_err = -EFAULT; \ } \ __pu_err; \ }) #define __put_user(x, ptr) \ ({ \ Loading @@ -290,18 +353,6 @@ extern long __user_bad(void); __gu_err; \ }) #ifndef CONFIG_MMU #define put_user(x, ptr) __put_user((x), (ptr)) #else /* CONFIG_MMU */ #define put_user(x, ptr) \ ({ \ access_ok(VERIFY_WRITE, (ptr), sizeof(*(ptr))) \ ? __put_user((x), (ptr)) : -EFAULT; \ }) #endif /* CONFIG_MMU */ /* copy_to_from_user */ #define __copy_from_user(to, from, n) \ Loading arch/microblaze/kernel/cpu/cache.c +2 −1 Original line number Diff line number Diff line Loading @@ -137,8 +137,9 @@ do { \ do { \ int step = -line_length; \ int align = ~(line_length - 1); \ int count; \ end = ((end & align) == end) ? end - line_length : end & align; \ int count = end - start; \ count = end - start; \ WARN_ON(count < 0); \ \ __asm__ __volatile__ (" 1: " #op " %0, %1; \ Loading arch/microblaze/kernel/entry-nommu.S +2 −0 Original line number Diff line number Diff line Loading @@ -476,6 +476,8 @@ ENTRY(ret_from_fork) nop work_pending: enable_irq andi r11, r19, _TIF_NEED_RESCHED beqi r11, 1f bralid r15, schedule Loading arch/microblaze/kernel/microblaze_ksyms.c +11 −0 Original line number Diff line number Diff line Loading @@ -52,3 +52,14 @@ EXPORT_SYMBOL_GPL(_ebss); extern void _mcount(void); EXPORT_SYMBOL(_mcount); #endif /* * Assembly functions that may be used (directly or indirectly) by modules */ EXPORT_SYMBOL(__copy_tofrom_user); EXPORT_SYMBOL(__strncpy_user); #ifdef CONFIG_OPT_LIB_ASM EXPORT_SYMBOL(memcpy); EXPORT_SYMBOL(memmove); #endif arch/microblaze/kernel/module.c +2 −0 Original line number Diff line number Diff line Loading @@ -16,6 +16,7 @@ #include <linux/string.h> #include <asm/pgtable.h> #include <asm/cacheflush.h> void *module_alloc(unsigned long size) { Loading Loading @@ -151,6 +152,7 @@ int apply_relocate_add(Elf32_Shdr *sechdrs, const char *strtab, int module_finalize(const Elf32_Ehdr *hdr, const Elf_Shdr *sechdrs, struct module *module) { flush_dcache(); return 0; } Loading Loading
arch/microblaze/include/asm/uaccess.h +69 −18 Original line number Diff line number Diff line Loading @@ -182,6 +182,39 @@ extern long __user_bad(void); * Returns zero on success, or -EFAULT on error. * On error, the variable @x is set to zero. */ #define get_user(x, ptr) \ __get_user_check((x), (ptr), sizeof(*(ptr))) #define __get_user_check(x, ptr, size) \ ({ \ unsigned long __gu_val = 0; \ const typeof(*(ptr)) __user *__gu_addr = (ptr); \ int __gu_err = 0; \ \ if (access_ok(VERIFY_READ, __gu_addr, size)) { \ switch (size) { \ case 1: \ __get_user_asm("lbu", __gu_addr, __gu_val, \ __gu_err); \ break; \ case 2: \ __get_user_asm("lhu", __gu_addr, __gu_val, \ __gu_err); \ break; \ case 4: \ __get_user_asm("lw", __gu_addr, __gu_val, \ __gu_err); \ break; \ default: \ __gu_err = __user_bad(); \ break; \ } \ } else { \ __gu_err = -EFAULT; \ } \ x = (typeof(*(ptr)))__gu_val; \ __gu_err; \ }) #define __get_user(x, ptr) \ ({ \ Loading @@ -206,12 +239,6 @@ extern long __user_bad(void); }) #define get_user(x, ptr) \ ({ \ access_ok(VERIFY_READ, (ptr), sizeof(*(ptr))) \ ? __get_user((x), (ptr)) : -EFAULT; \ }) #define __put_user_asm(insn, __gu_ptr, __gu_val, __gu_err) \ ({ \ __asm__ __volatile__ ( \ Loading Loading @@ -266,6 +293,42 @@ extern long __user_bad(void); * * Returns zero on success, or -EFAULT on error. */ #define put_user(x, ptr) \ __put_user_check((x), (ptr), sizeof(*(ptr))) #define __put_user_check(x, ptr, size) \ ({ \ typeof(*(ptr)) __pu_val; \ typeof(*(ptr)) __user *__pu_addr = (ptr); \ int __pu_err = 0; \ \ __pu_val = (x); \ if (access_ok(VERIFY_WRITE, __pu_addr, size)) { \ switch (size) { \ case 1: \ __put_user_asm("sb", __pu_addr, __pu_val, \ __pu_err); \ break; \ case 2: \ __put_user_asm("sh", __pu_addr, __pu_val, \ __pu_err); \ break; \ case 4: \ __put_user_asm("sw", __pu_addr, __pu_val, \ __pu_err); \ break; \ case 8: \ __put_user_asm_8(__pu_addr, __pu_val, __pu_err);\ break; \ default: \ __pu_err = __user_bad(); \ break; \ } \ } else { \ __pu_err = -EFAULT; \ } \ __pu_err; \ }) #define __put_user(x, ptr) \ ({ \ Loading @@ -290,18 +353,6 @@ extern long __user_bad(void); __gu_err; \ }) #ifndef CONFIG_MMU #define put_user(x, ptr) __put_user((x), (ptr)) #else /* CONFIG_MMU */ #define put_user(x, ptr) \ ({ \ access_ok(VERIFY_WRITE, (ptr), sizeof(*(ptr))) \ ? __put_user((x), (ptr)) : -EFAULT; \ }) #endif /* CONFIG_MMU */ /* copy_to_from_user */ #define __copy_from_user(to, from, n) \ Loading
arch/microblaze/kernel/cpu/cache.c +2 −1 Original line number Diff line number Diff line Loading @@ -137,8 +137,9 @@ do { \ do { \ int step = -line_length; \ int align = ~(line_length - 1); \ int count; \ end = ((end & align) == end) ? end - line_length : end & align; \ int count = end - start; \ count = end - start; \ WARN_ON(count < 0); \ \ __asm__ __volatile__ (" 1: " #op " %0, %1; \ Loading
arch/microblaze/kernel/entry-nommu.S +2 −0 Original line number Diff line number Diff line Loading @@ -476,6 +476,8 @@ ENTRY(ret_from_fork) nop work_pending: enable_irq andi r11, r19, _TIF_NEED_RESCHED beqi r11, 1f bralid r15, schedule Loading
arch/microblaze/kernel/microblaze_ksyms.c +11 −0 Original line number Diff line number Diff line Loading @@ -52,3 +52,14 @@ EXPORT_SYMBOL_GPL(_ebss); extern void _mcount(void); EXPORT_SYMBOL(_mcount); #endif /* * Assembly functions that may be used (directly or indirectly) by modules */ EXPORT_SYMBOL(__copy_tofrom_user); EXPORT_SYMBOL(__strncpy_user); #ifdef CONFIG_OPT_LIB_ASM EXPORT_SYMBOL(memcpy); EXPORT_SYMBOL(memmove); #endif
arch/microblaze/kernel/module.c +2 −0 Original line number Diff line number Diff line Loading @@ -16,6 +16,7 @@ #include <linux/string.h> #include <asm/pgtable.h> #include <asm/cacheflush.h> void *module_alloc(unsigned long size) { Loading Loading @@ -151,6 +152,7 @@ int apply_relocate_add(Elf32_Shdr *sechdrs, const char *strtab, int module_finalize(const Elf32_Ehdr *hdr, const Elf_Shdr *sechdrs, struct module *module) { flush_dcache(); return 0; } Loading