diff options
| author | Ingo Molnar <mingo@kernel.org> | 2012-12-08 09:25:06 -0500 |
|---|---|---|
| committer | Ingo Molnar <mingo@kernel.org> | 2012-12-08 09:25:06 -0500 |
| commit | f0b9abfb044649bc452fb2fb975ff2fd599cc6a3 (patch) | |
| tree | 7800081c5cb16a4dfee1e57a70f3be90f7b50d9a /arch/xtensa | |
| parent | adc1ef1e37358d3c17d1a74a58b2e104fc0bda15 (diff) | |
| parent | 1b3c393cd43f22ead8a6a2f839efc6df8ebd7465 (diff) | |
Merge branch 'linus' into perf/core
Conflicts:
tools/perf/Makefile
tools/perf/builtin-test.c
tools/perf/perf.h
tools/perf/tests/parse-events.c
tools/perf/util/evsel.h
Signed-off-by: Ingo Molnar <mingo@kernel.org>
Diffstat (limited to 'arch/xtensa')
| -rw-r--r-- | arch/xtensa/Kconfig | 2 | ||||
| -rw-r--r-- | arch/xtensa/include/asm/io.h | 4 | ||||
| -rw-r--r-- | arch/xtensa/include/asm/processor.h | 4 | ||||
| -rw-r--r-- | arch/xtensa/include/asm/syscall.h | 2 | ||||
| -rw-r--r-- | arch/xtensa/include/asm/unistd.h | 15 | ||||
| -rw-r--r-- | arch/xtensa/include/uapi/asm/unistd.h | 16 | ||||
| -rw-r--r-- | arch/xtensa/kernel/entry.S | 57 | ||||
| -rw-r--r-- | arch/xtensa/kernel/process.c | 128 | ||||
| -rw-r--r-- | arch/xtensa/kernel/syscall.c | 7 | ||||
| -rw-r--r-- | arch/xtensa/kernel/xtensa_ksyms.c | 1 |
10 files changed, 104 insertions, 132 deletions
diff --git a/arch/xtensa/Kconfig b/arch/xtensa/Kconfig index cdcb48adee4c..0d1f36a22c98 100644 --- a/arch/xtensa/Kconfig +++ b/arch/xtensa/Kconfig | |||
| @@ -13,6 +13,8 @@ config XTENSA | |||
| 13 | select GENERIC_CPU_DEVICES | 13 | select GENERIC_CPU_DEVICES |
| 14 | select MODULES_USE_ELF_RELA | 14 | select MODULES_USE_ELF_RELA |
| 15 | select GENERIC_PCI_IOMAP | 15 | select GENERIC_PCI_IOMAP |
| 16 | select GENERIC_KERNEL_THREAD | ||
| 17 | select GENERIC_KERNEL_EXECVE | ||
| 16 | select ARCH_WANT_OPTIONAL_GPIOLIB | 18 | select ARCH_WANT_OPTIONAL_GPIOLIB |
| 17 | help | 19 | help |
| 18 | Xtensa processors are 32-bit RISC machines designed by Tensilica | 20 | Xtensa processors are 32-bit RISC machines designed by Tensilica |
diff --git a/arch/xtensa/include/asm/io.h b/arch/xtensa/include/asm/io.h index e6be5b9091c2..700c2e6f2d25 100644 --- a/arch/xtensa/include/asm/io.h +++ b/arch/xtensa/include/asm/io.h | |||
| @@ -62,6 +62,10 @@ static inline void __iomem *ioremap(unsigned long offset, unsigned long size) | |||
| 62 | static inline void iounmap(volatile void __iomem *addr) | 62 | static inline void iounmap(volatile void __iomem *addr) |
| 63 | { | 63 | { |
| 64 | } | 64 | } |
| 65 | |||
| 66 | #define virt_to_bus virt_to_phys | ||
| 67 | #define bus_to_virt phys_to_virt | ||
| 68 | |||
| 65 | #endif /* CONFIG_MMU */ | 69 | #endif /* CONFIG_MMU */ |
| 66 | 70 | ||
| 67 | /* | 71 | /* |
diff --git a/arch/xtensa/include/asm/processor.h b/arch/xtensa/include/asm/processor.h index 5c371d8d4528..2d630e7399ca 100644 --- a/arch/xtensa/include/asm/processor.h +++ b/arch/xtensa/include/asm/processor.h | |||
| @@ -152,6 +152,7 @@ struct thread_struct { | |||
| 152 | 152 | ||
| 153 | /* Clearing a0 terminates the backtrace. */ | 153 | /* Clearing a0 terminates the backtrace. */ |
| 154 | #define start_thread(regs, new_pc, new_sp) \ | 154 | #define start_thread(regs, new_pc, new_sp) \ |
| 155 | memset(regs, 0, sizeof(*regs)); \ | ||
| 155 | regs->pc = new_pc; \ | 156 | regs->pc = new_pc; \ |
| 156 | regs->ps = USER_PS_VALUE; \ | 157 | regs->ps = USER_PS_VALUE; \ |
| 157 | regs->areg[1] = new_sp; \ | 158 | regs->areg[1] = new_sp; \ |
| @@ -168,9 +169,6 @@ struct mm_struct; | |||
| 168 | /* Free all resources held by a thread. */ | 169 | /* Free all resources held by a thread. */ |
| 169 | #define release_thread(thread) do { } while(0) | 170 | #define release_thread(thread) do { } while(0) |
| 170 | 171 | ||
| 171 | /* Create a kernel thread without removing it from tasklists */ | ||
| 172 | extern int kernel_thread(int (*fn)(void *), void * arg, unsigned long flags); | ||
| 173 | |||
| 174 | /* Copy and release all segment info associated with a VM */ | 172 | /* Copy and release all segment info associated with a VM */ |
| 175 | #define copy_segments(p, mm) do { } while(0) | 173 | #define copy_segments(p, mm) do { } while(0) |
| 176 | #define release_segments(mm) do { } while(0) | 174 | #define release_segments(mm) do { } while(0) |
diff --git a/arch/xtensa/include/asm/syscall.h b/arch/xtensa/include/asm/syscall.h index c1dacca312f3..124aeee0d381 100644 --- a/arch/xtensa/include/asm/syscall.h +++ b/arch/xtensa/include/asm/syscall.h | |||
| @@ -10,7 +10,7 @@ | |||
| 10 | 10 | ||
| 11 | struct pt_regs; | 11 | struct pt_regs; |
| 12 | struct sigaction; | 12 | struct sigaction; |
| 13 | asmlinkage long xtensa_execve(char*, char**, char**, struct pt_regs*); | 13 | asmlinkage long sys_execve(char*, char**, char**, struct pt_regs*); |
| 14 | asmlinkage long xtensa_clone(unsigned long, unsigned long, struct pt_regs*); | 14 | asmlinkage long xtensa_clone(unsigned long, unsigned long, struct pt_regs*); |
| 15 | asmlinkage long xtensa_ptrace(long, long, long, long); | 15 | asmlinkage long xtensa_ptrace(long, long, long, long); |
| 16 | asmlinkage long xtensa_sigreturn(struct pt_regs*); | 16 | asmlinkage long xtensa_sigreturn(struct pt_regs*); |
diff --git a/arch/xtensa/include/asm/unistd.h b/arch/xtensa/include/asm/unistd.h index 9ef1c31d2c83..f4e6eaa40d1c 100644 --- a/arch/xtensa/include/asm/unistd.h +++ b/arch/xtensa/include/asm/unistd.h | |||
| @@ -1,16 +1,9 @@ | |||
| 1 | /* | 1 | #ifndef _XTENSA_UNISTD_H |
| 2 | * include/asm-xtensa/unistd.h | 2 | #define _XTENSA_UNISTD_H |
| 3 | * | ||
| 4 | * This file is subject to the terms and conditions of the GNU General Public | ||
| 5 | * License. See the file "COPYING" in the main directory of this archive | ||
| 6 | * for more details. | ||
| 7 | * | ||
| 8 | * Copyright (C) 2001 - 2005 Tensilica Inc. | ||
| 9 | */ | ||
| 10 | 3 | ||
| 4 | #define __ARCH_WANT_SYS_EXECVE | ||
| 11 | #include <uapi/asm/unistd.h> | 5 | #include <uapi/asm/unistd.h> |
| 12 | 6 | ||
| 13 | |||
| 14 | /* | 7 | /* |
| 15 | * "Conditional" syscalls | 8 | * "Conditional" syscalls |
| 16 | * | 9 | * |
| @@ -37,3 +30,5 @@ | |||
| 37 | #define __IGNORE_mmap /* use mmap2 */ | 30 | #define __IGNORE_mmap /* use mmap2 */ |
| 38 | #define __IGNORE_vfork /* use clone */ | 31 | #define __IGNORE_vfork /* use clone */ |
| 39 | #define __IGNORE_fadvise64 /* use fadvise64_64 */ | 32 | #define __IGNORE_fadvise64 /* use fadvise64_64 */ |
| 33 | |||
| 34 | #endif /* _XTENSA_UNISTD_H */ | ||
diff --git a/arch/xtensa/include/uapi/asm/unistd.h b/arch/xtensa/include/uapi/asm/unistd.h index 479abaea5aae..9f36d0e3e0ac 100644 --- a/arch/xtensa/include/uapi/asm/unistd.h +++ b/arch/xtensa/include/uapi/asm/unistd.h | |||
| @@ -1,14 +1,4 @@ | |||
| 1 | /* | 1 | #if !defined(_UAPI_XTENSA_UNISTD_H) || defined(__SYSCALL) |
| 2 | * include/asm-xtensa/unistd.h | ||
| 3 | * | ||
| 4 | * This file is subject to the terms and conditions of the GNU General Public | ||
| 5 | * License. See the file "COPYING" in the main directory of this archive | ||
| 6 | * for more details. | ||
| 7 | * | ||
| 8 | * Copyright (C) 2001 - 2012 Tensilica Inc. | ||
| 9 | */ | ||
| 10 | |||
| 11 | #ifndef _UAPI_XTENSA_UNISTD_H | ||
| 12 | #define _UAPI_XTENSA_UNISTD_H | 2 | #define _UAPI_XTENSA_UNISTD_H |
| 13 | 3 | ||
| 14 | #ifndef __SYSCALL | 4 | #ifndef __SYSCALL |
| @@ -272,7 +262,7 @@ __SYSCALL(115, sys_sendmmsg, 4) | |||
| 272 | #define __NR_clone 116 | 262 | #define __NR_clone 116 |
| 273 | __SYSCALL(116, xtensa_clone, 5) | 263 | __SYSCALL(116, xtensa_clone, 5) |
| 274 | #define __NR_execve 117 | 264 | #define __NR_execve 117 |
| 275 | __SYSCALL(117, xtensa_execve, 3) | 265 | __SYSCALL(117, sys_execve, 3) |
| 276 | #define __NR_exit 118 | 266 | #define __NR_exit 118 |
| 277 | __SYSCALL(118, sys_exit, 1) | 267 | __SYSCALL(118, sys_exit, 1) |
| 278 | #define __NR_exit_group 119 | 268 | #define __NR_exit_group 119 |
| @@ -759,4 +749,6 @@ __SYSCALL(331, sys_kcmp, 5) | |||
| 759 | 749 | ||
| 760 | #define SYS_XTENSA_COUNT 5 /* count */ | 750 | #define SYS_XTENSA_COUNT 5 /* count */ |
| 761 | 751 | ||
| 752 | #undef __SYSCALL | ||
| 753 | |||
| 762 | #endif /* _UAPI_XTENSA_UNISTD_H */ | 754 | #endif /* _UAPI_XTENSA_UNISTD_H */ |
diff --git a/arch/xtensa/kernel/entry.S b/arch/xtensa/kernel/entry.S index 18453067c258..90bfc1dbc13d 100644 --- a/arch/xtensa/kernel/entry.S +++ b/arch/xtensa/kernel/entry.S | |||
| @@ -1833,50 +1833,6 @@ ENTRY(system_call) | |||
| 1833 | 1833 | ||
| 1834 | 1834 | ||
| 1835 | /* | 1835 | /* |
| 1836 | * Create a kernel thread | ||
| 1837 | * | ||
| 1838 | * int kernel_thread(int (*fn)(void *), void *arg, unsigned long flags) | ||
| 1839 | * a2 a2 a3 a4 | ||
| 1840 | */ | ||
| 1841 | |||
| 1842 | ENTRY(kernel_thread) | ||
| 1843 | entry a1, 16 | ||
| 1844 | |||
| 1845 | mov a5, a2 # preserve fn over syscall | ||
| 1846 | mov a7, a3 # preserve args over syscall | ||
| 1847 | |||
| 1848 | movi a3, _CLONE_VM | _CLONE_UNTRACED | ||
| 1849 | movi a2, __NR_clone | ||
| 1850 | or a6, a4, a3 # arg0: flags | ||
| 1851 | mov a3, a1 # arg1: sp | ||
| 1852 | syscall | ||
| 1853 | |||
| 1854 | beq a3, a1, 1f # branch if parent | ||
| 1855 | mov a6, a7 # args | ||
| 1856 | callx4 a5 # fn(args) | ||
| 1857 | |||
| 1858 | movi a2, __NR_exit | ||
| 1859 | syscall # return value of fn(args) still in a6 | ||
| 1860 | |||
| 1861 | 1: retw | ||
| 1862 | |||
| 1863 | /* | ||
| 1864 | * Do a system call from kernel instead of calling sys_execve, so we end up | ||
| 1865 | * with proper pt_regs. | ||
