diff options
56 files changed, 798 insertions, 679 deletions
diff --git a/arch/tile/configs/tile_defconfig b/arch/tile/configs/tile_defconfig index 74a5be39e8f..f34c70b46c6 100644 --- a/arch/tile/configs/tile_defconfig +++ b/arch/tile/configs/tile_defconfig @@ -1,7 +1,7 @@ # # Automatically generated make config: don't edit # Linux kernel version: 2.6.34 -# Fri May 28 17:51:43 2010 +# Thu Jun 3 13:20:05 2010 # CONFIG_MMU=y CONFIG_GENERIC_CSUM=y @@ -9,16 +9,13 @@ CONFIG_GENERIC_HARDIRQS=y CONFIG_GENERIC_HARDIRQS_NO__DO_IRQ=y CONFIG_GENERIC_IRQ_PROBE=y CONFIG_GENERIC_PENDING_IRQ=y -CONFIG_ZONE_DMA=y CONFIG_SEMAPHORE_SLEEPERS=y -CONFIG_CC_OPTIMIZE_FOR_SIZE=y CONFIG_HAVE_ARCH_ALLOC_REMAP=y CONFIG_HAVE_SETUP_PER_CPU_AREA=y CONFIG_NEED_PER_CPU_PAGE_FIRST_CHUNK=y CONFIG_SYS_SUPPORTS_HUGETLBFS=y CONFIG_GENERIC_TIME=y CONFIG_GENERIC_CLOCKEVENTS=y -CONFIG_CLOCKSOURCE_WATCHDOG=y CONFIG_RWSEM_GENERIC_SPINLOCK=y CONFIG_DEFAULT_MIGRATION_COST=10000000 CONFIG_ARCH_SUPPORTS_OPTIMIZED_INLINING=y @@ -32,7 +29,6 @@ CONFIG_STRICT_DEVMEM=y CONFIG_SMP=y CONFIG_WERROR=y # CONFIG_DEBUG_COPY_FROM_USER is not set -CONFIG_SERIAL_CONSOLE=y CONFIG_HVC_TILE=y CONFIG_TILE=y # CONFIG_TILEGX is not set @@ -86,6 +82,7 @@ CONFIG_INITRAMFS_COMPRESSION_NONE=y # CONFIG_INITRAMFS_COMPRESSION_BZIP2 is not set # CONFIG_INITRAMFS_COMPRESSION_LZMA is not set # CONFIG_INITRAMFS_COMPRESSION_LZO is not set +CONFIG_CC_OPTIMIZE_FOR_SIZE=y CONFIG_SYSCTL=y CONFIG_ANON_INODES=y CONFIG_EMBEDDED=y @@ -220,7 +217,7 @@ CONFIG_PAGEFLAGS_EXTENDED=y CONFIG_SPLIT_PTLOCK_CPUS=4 CONFIG_MIGRATION=y CONFIG_PHYS_ADDR_T_64BIT=y -CONFIG_ZONE_DMA_FLAG=1 +CONFIG_ZONE_DMA_FLAG=0 CONFIG_BOUNCE=y CONFIG_VIRT_TO_BUS=y # CONFIG_KSM is not set @@ -232,10 +229,11 @@ CONFIG_FEEDBACK_USE="" CONFIG_VMALLOC_RESERVE=0x1000000 CONFIG_HARDWALL=y CONFIG_MEMPROF=y -CONFIG_XGBE_MAIN=y +CONFIG_XGBE=y CONFIG_NET_TILE=y CONFIG_PSEUDO_NAPI=y CONFIG_TILEPCI_ENDP=y +CONFIG_TILEPCI_HOST_SUBSET=m CONFIG_TILE_IDE_GPIO=y CONFIG_TILE_SOFTUART=y @@ -244,6 +242,8 @@ CONFIG_TILE_SOFTUART=y # CONFIG_PCI=y CONFIG_PCI_DOMAINS=y +# CONFIG_NO_IOMEM is not set +# CONFIG_NO_IOPORT is not set # CONFIG_ARCH_SUPPORTS_MSI is not set CONFIG_PCI_DEBUG=y # CONFIG_PCI_STUB is not set @@ -742,6 +742,7 @@ CONFIG_HVC_DRIVER=y # # CONFIG_RAW_DRIVER is not set # CONFIG_TCG_TPM is not set +CONFIG_DEVPORT=y CONFIG_I2C=y CONFIG_I2C_BOARDINFO=y CONFIG_I2C_COMPAT=y diff --git a/arch/tile/include/arch/abi.h b/arch/tile/include/arch/abi.h index 7cdc47b3e02..da8df5b9d91 100644 --- a/arch/tile/include/arch/abi.h +++ b/arch/tile/include/arch/abi.h @@ -1,26 +1,29 @@ -// Copyright 2010 Tilera Corporation. All Rights Reserved. -// -// This program is free software; you can redistribute it and/or -// modify it under the terms of the GNU General Public License -// as published by the Free Software Foundation, version 2. -// -// This program is distributed in the hope that it will be useful, but -// WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE, GOOD TITLE or -// NON INFRINGEMENT. See the GNU General Public License for -// more details. - -//! @file -//! -//! ABI-related register definitions helpful when writing assembly code. -//! +/* + * Copyright 2010 Tilera Corporation. All Rights Reserved. + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation, version 2. + * + * This program is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE, GOOD TITLE or + * NON INFRINGEMENT. See the GNU General Public License for + * more details. + */ + +/** + * @file + * + * ABI-related register definitions helpful when writing assembly code. + */ #ifndef __ARCH_ABI_H__ #define __ARCH_ABI_H__ #include <arch/chip.h> -// Registers 0 - 55 are "normal", but some perform special roles. +/* Registers 0 - 55 are "normal", but some perform special roles. */ #define TREG_FP 52 /**< Frame pointer. */ #define TREG_TP 53 /**< Thread pointer. */ @@ -30,7 +33,7 @@ /** Index of last normal general-purpose register. */ #define TREG_LAST_GPR 55 -// Registers 56 - 62 are "special" network registers. +/* Registers 56 - 62 are "special" network registers. */ #define TREG_SN 56 /**< Static network access. */ #define TREG_IDN0 57 /**< IDN demux 0 access. */ @@ -40,7 +43,7 @@ #define TREG_UDN2 61 /**< UDN demux 2 access. */ #define TREG_UDN3 62 /**< UDN demux 3 access. */ -// Register 63 is the "special" zero register. +/* Register 63 is the "special" zero register. */ #define TREG_ZERO 63 /**< "Zero" register; always reads as "0". */ @@ -52,42 +55,44 @@ #define TREG_SYSCALL_NR_NAME r10 -//! The ABI requires callers to allocate a caller state save area of -//! this many bytes at the bottom of each stack frame. -//! +/** + * The ABI requires callers to allocate a caller state save area of + * this many bytes at the bottom of each stack frame. + */ #ifdef __tile__ #define C_ABI_SAVE_AREA_SIZE (2 * __SIZEOF_POINTER__) #endif -//! The operand to an 'info' opcode directing the backtracer to not -//! try to find the calling frame. -//! +/** + * The operand to an 'info' opcode directing the backtracer to not + * try to find the calling frame. + */ #define INFO_OP_CANNOT_BACKTRACE 2 #ifndef __ASSEMBLER__ #if CHIP_WORD_SIZE() > 32 -//! Unsigned type that can hold a register. +/** Unsigned type that can hold a register. */ typedef unsigned long long uint_reg_t; -//! Signed type that can hold a register. +/** Signed type that can hold a register. */ typedef long long int_reg_t; -//! String prefix to use for printf(). +/** String prefix to use for printf(). */ #define INT_REG_FMT "ll" #elif !defined(__LP64__) /* avoid confusion with LP64 cross-build tools */ -//! Unsigned type that can hold a register. +/** Unsigned type that can hold a register. */ typedef unsigned long uint_reg_t; -//! Signed type that can hold a register. +/** Signed type that can hold a register. */ typedef long int_reg_t; -//! String prefix to use for printf(). +/** String prefix to use for printf(). */ #define INT_REG_FMT "l" #endif #endif /* __ASSEMBLER__ */ -#endif // !__ARCH_ABI_H__ +#endif /* !__ARCH_ABI_H__ */ diff --git a/arch/tile/include/arch/interrupts_32.h b/arch/tile/include/arch/interrupts_32.h index feffada705f..9d0bfa7e59b 100644 --- a/arch/tile/include/arch/interrupts_32.h +++ b/arch/tile/include/arch/interrupts_32.h @@ -301,4 +301,4 @@ INT_MASK(INT_DOUBLE_FAULT) | \ INT_MASK(INT_AUX_PERF_COUNT) | \ 0) -#endif // !__ARCH_INTERRUPTS_H__ +#endif /* !__ARCH_INTERRUPTS_H__ */ diff --git a/arch/tile/include/asm/atomic_32.h b/arch/tile/include/asm/atomic_32.h index e4f8b4f0489..40a5a3a876d 100644 --- a/arch/tile/include/asm/atomic_32.h +++ b/arch/tile/include/asm/atomic_32.h @@ -348,6 +348,23 @@ void __init_atomic_per_cpu(void); /* Support releasing the atomic lock in do_page_fault_ics(). */ void __atomic_fault_unlock(int *lock_ptr); #endif + +/* Private helper routines in lib/atomic_asm_32.S */ +extern struct __get_user __atomic_cmpxchg(volatile int *p, + int *lock, int o, int n); +extern struct __get_user __atomic_xchg(volatile int *p, int *lock, int n); +extern struct __get_user __atomic_xchg_add(volatile int *p, int *lock, int n); +extern struct __get_user __atomic_xchg_add_unless(volatile int *p, + int *lock, int o, int n); +extern struct __get_user __atomic_or(volatile int *p, int *lock, int n); +extern struct __get_user __atomic_andn(volatile int *p, int *lock, int n); +extern struct __get_user __atomic_xor(volatile int *p, int *lock, int n); +extern u64 __atomic64_cmpxchg(volatile u64 *p, int *lock, u64 o, u64 n); +extern u64 __atomic64_xchg(volatile u64 *p, int *lock, u64 n); +extern u64 __atomic64_xchg_add(volatile u64 *p, int *lock, u64 n); +extern u64 __atomic64_xchg_add_unless(volatile u64 *p, + int *lock, u64 o, u64 n); + #endif /* !__ASSEMBLY__ */ #endif /* _ASM_TILE_ATOMIC_32_H */ diff --git a/arch/tile/include/asm/compat.h b/arch/tile/include/asm/compat.h index b09292bcc19..5a34da6cdd7 100644 --- a/arch/tile/include/asm/compat.h +++ b/arch/tile/include/asm/compat.h @@ -70,48 +70,7 @@ struct compat_timeval { s32 tv_usec; }; -struct compat_stat { - unsigned int st_dev; - unsigned int st_ino; - unsigned int st_mode; - unsigned int st_nlink; - unsigned int st_uid; - unsigned int st_gid; - unsigned int st_rdev; - unsigned int __pad1; - int st_size; - int st_blksize; - int __pad2; - int st_blocks; - int st_atime; - unsigned int st_atime_nsec; - int st_mtime; - unsigned int st_mtime_nsec; - int st_ctime; - unsigned int st_ctime_nsec; - unsigned int __unused[2]; -}; - -struct compat_stat64 { - unsigned long st_dev; - unsigned long st_ino; - unsigned int st_mode; - unsigned int st_nlink; - unsigned int st_uid; - unsigned int st_gid; - unsigned long st_rdev; - long st_size; - unsigned int st_blksize; - unsigned long st_blocks __attribute__((packed)); - unsigned int st_atime; - unsigned int st_atime_nsec; - unsigned int st_mtime; - unsigned int st_mtime_nsec; - unsigned int st_ctime; - unsigned int st_ctime_nsec; - unsigned int __unused8; -}; - +#define compat_stat stat #define compat_statfs statfs struct compat_sysctl { @@ -233,7 +192,7 @@ static inline compat_uptr_t ptr_to_compat(void __user *uptr) /* Sign-extend when storing a kernel pointer to a user's ptregs. */ static inline unsigned long ptr_to_compat_reg(void __user *uptr) { - return (long)(int)(long)uptr; + return (long)(int)(long __force)uptr; } static inline void __user *compat_alloc_user_space(long len) @@ -278,17 +237,8 @@ long compat_sys_sync_file_range2(int fd, unsigned int flags, long compat_sys_fallocate(int fd, int mode, u32 offset_lo, u32 offset_hi, u32 len_lo, u32 len_hi); -long compat_sys_stat64(char __user *filename, - struct compat_stat64 __user *statbuf); -long compat_sys_lstat64(char __user *filename, - struct compat_stat64 __user *statbuf); -long compat_sys_fstat64(unsigned int fd, struct compat_stat64 __user *statbuf); -long compat_sys_fstatat64(int dfd, char __user *filename, - struct compat_stat64 __user *statbuf, int flag); long compat_sys_sched_rr_get_interval(compat_pid_t pid, struct compat_timespec __user *interval); -ssize_t compat_sys_sendfile(int out_fd, int in_fd, compat_off_t __user *offset, - size_t count); /* Versions of compat functions that differ from generic Linux. */ struct compat_msgbuf; @@ -302,7 +252,6 @@ long tile_compat_sys_ptrace(compat_long_t request, compat_long_t pid, compat_long_t addr, compat_long_t data); /* Tilera Linux syscalls that don't have "compat" versions. */ -#define compat_sys_raise_fpe sys_raise_fpe #define compat_sys_flush_cache sys_flush_cache #endif /* _ASM_TILE_COMPAT_H */ diff --git a/arch/tile/include/asm/elf.h b/arch/tile/include/asm/elf.h index 1bca0debdb0..623a6bb741c 100644 --- a/arch/tile/include/asm/elf.h +++ b/arch/tile/include/asm/elf.h @@ -59,8 +59,7 @@ enum { ELF_ARCH = CHIP_ELF_TYPE() }; */ #define elf_check_arch(x) \ ((x)->e_ident[EI_CLASS] == ELF_CLASS && \ - ((x)->e_machine == CHIP_ELF_TYPE() || \ - (x)->e_machine == CHIP_COMPAT_ELF_TYPE())) + (x)->e_machine == CHIP_ELF_TYPE()) /* The module loader only handles a few relocation types. */ #ifndef __tilegx__ @@ -139,8 +138,7 @@ extern int arch_setup_additional_pages(struct linux_binprm *bprm, */ #define compat_elf_check_arch(x) \ ((x)->e_ident[EI_CLASS] == ELFCLASS32 && \ - ((x)->e_machine == CHIP_ELF_TYPE() || \ - (x)->e_machine == CHIP_COMPAT_ELF_TYPE())) + (x)->e_machine == CHIP_ELF_TYPE()) #define compat_start_thread(regs, ip, usp) do { \ regs->pc = ptr_to_compat_reg((void *)(ip)); \ diff --git a/arch/tile/include/asm/futex.h b/arch/tile/include/asm/futex.h index 9eaeb3c0878..fe0d10dcae5 100644 --- a/arch/tile/include/asm/futex.h +++ b/arch/tile/include/asm/futex.h @@ -29,14 +29,14 @@ #include <linux/uaccess.h> #include <linux/errno.h> -extern struct __get_user futex_set(int *v, int i); -extern struct __get_user futex_add(int *v, int n); -extern struct __get_user futex_or(int *v, int n); -extern struct __get_user futex_andn(int *v, int n); -extern struct __get_user futex_cmpxchg(int *v, int o, int n); +extern struct __get_user futex_set(int __user *v, int i); +extern struct __get_user futex_add(int __user *v, int n); +extern struct __get_user futex_or(int __user *v, int n); +extern struct __get_user futex_andn(int __user *v, int n); +extern struct __get_user futex_cmpxchg(int __user *v, int o, int n); #ifndef __tilegx__ -extern struct __get_user futex_xor(int *v, int n); +extern struct __get_user futex_xor(int __user *v, int n); #else static inline struct __get_user futex_xor(int __user *uaddr, int n) { @@ -131,6 +131,11 @@ static inline int futex_atomic_cmpxchg_inatomic(int __user *uaddr, int oldval, return asm_ret.err ? asm_ret.err : asm_ret.val; } +#ifndef __tilegx__ +/* Return failure from the atomic wrappers. */ +struct __get_user __atomic_bad_address(int __user *addr); +#endif + #endif /* !__ASSEMBLY__ */ #endif /* _ASM_TILE_FUTEX_H */ diff --git a/arch/tile/include/asm/page.h b/arch/tile/include/asm/page.h index c8301c43d6d..f894a9016da 100644 --- a/arch/tile/include/asm/page.h +++ b/arch/tile/include/asm/page.h @@ -16,8 +16,6 @@ #define _ASM_TILE_PAGE_H #include <linux/const.h> -#include <hv/hypervisor.h> -#include <arch/chip.h> /* PAGE_SHIFT and HPAGE_SHIFT determine the page sizes. */ #define PAGE_SHIFT 16 @@ -29,6 +27,11 @@ #define PAGE_MASK (~(PAGE_SIZE - 1)) #define HPAGE_MASK (~(HPAGE_SIZE - 1)) +#ifdef __KERNEL__ + +#include <hv/hypervisor.h> +#include <arch/chip.h> + /* * The {,H}PAGE_SHIFT values must match the HV_LOG2_PAGE_SIZE_xxx * definitions in <hv/hypervisor.h>. We validate this at build time @@ -331,4 +334,6 @@ extern pte_t *virt_to_pte(struct mm_struct *mm, unsigned long addr); #include <asm-generic/memory_model.h> #include <asm-generic/getorder.h> +#endif /* __KERNEL__ */ + #endif /* _ASM_TILE_PAGE_H */ diff --git a/arch/tile/include/asm/pgtable.h b/arch/tile/include/asm/pgtable.h index beb1504e9c1..b3367379d53 100644 --- a/arch/tile/include/asm/pgtable.h +++ b/arch/tile/include/asm/pgtable.h @@ -229,9 +229,9 @@ static inline void __pte_clear(pte_t *ptep) #define pte_donemigrate(x) hv_pte_set_present(hv_pte_clear_migrating(x)) #define pte_ERROR(e) \ - printk("%s:%d: bad pte 0x%016llx.\n", __FILE__, __LINE__, pte_val(e)) + pr_err("%s:%d: bad pte 0x%016llx.\n", __FILE__, __LINE__, pte_val(e)) #define pgd_ERROR(e) \ - printk("%s:%d: bad pgd 0x%016llx.\n", __FILE__, __LINE__, pgd_val(e)) + pr_err("%s:%d: bad pgd 0x%016llx.\n", __FILE__, __LINE__, pgd_val(e)) /* * set_pte_order() sets the given PTE and also sanity-checks the @@ -470,6 +470,11 @@ static inline int pmd_huge_page(pmd_t pmd) #include <asm-generic/pgtable.h> +/* Support /proc/NN/pgtable API. */ +struct seq_file; +int arch_proc_pgtable_show(struct seq_file *m, struct mm_struct *mm, + unsigned long vaddr, pte_t *ptep, void **datap); + #endif /* !__ASSEMBLY__ */ #endif /* _ASM_TILE_PGTABLE_H */ diff --git a/arch/tile/include/asm/pgtable_32.h b/arch/tile/include/asm/pgtable_32.h index b935fb2ad4f..53ec3488474 100644 --- a/arch/tile/include/asm/pgtable_32.h +++ b/arch/tile/include/asm/pgtable_32.h @@ -89,15 +89,27 @@ static inline int pgd_addr_invalid(unsigned long addr) /* * Provide versions of these routines that can be used safely when * the hypervisor may be asynchronously modifying dirty/accessed bits. + * ptep_get_and_clear() matches the generic one but we provide it to + * be parallel with the 64-bit code. */ #define __HAVE_ARCH_PTEP_TEST_AND_CLEAR_YOUNG #define __HAVE_ARCH_PTEP_SET_WRPROTECT +#define __HAVE_ARCH_PTEP_GET_AND_CLEAR extern int ptep_test_and_clear_young(struct vm_area_struct *, unsigned long addr, pte_t *); extern void ptep_set_wrprotect(struct mm_struct *, unsigned long addr, pte_t *); +#define __HAVE_ARCH_PTEP_GET_AND_CLEAR +static inline pte_t ptep_get_and_clear(struct mm_struct *mm, + unsigned long addr, pte_t *ptep) +{ + pte_t pte = *ptep; + pte_clear(_mm, addr, ptep); + return pte; +} + /* Create a pmd from a PTFN. */ static inline pmd_t ptfn_pmd(unsigned long ptfn, pgprot_t prot) { diff --git a/arch/tile/include/asm/ptrace.h b/arch/tile/include/asm/ptrace.h index 4d1d9953016..acdae814e01 100644 --- a/arch/tile/include/asm/ptrace.h +++ b/arch/tile/include/asm/ptrace.h @@ -112,6 +112,9 @@ struct pt_regs { /* Fill in a struct pt_regs with the current kernel registers. */ struct pt_regs *get_pt_regs(struct pt_regs *); +/* Trace the current syscall. */ +extern void do_syscall_trace(void); + extern void show_regs(struct pt_regs *); #define arch_has_single_step() (1) @@ -123,7 +126,7 @@ extern void show_regs(struct pt_regs *); */ struct single_step_state { /* the page to which we will write hacked-up bundles */ - void *buffer; + void __user *buffer; union { int flags; diff --git a/arch/tile/include/asm/sections.h b/arch/tile/include/asm/sections.h index 6c111491f0e..d062d463fca 100644 --- a/arch/tile/include/asm/sections.h +++ b/arch/tile/include/asm/sections.h @@ -25,7 +25,14 @@ extern char _sinitdata[], _einitdata[]; /* Write-once data is writable only till the end of initialization. */ extern char __w1data_begin[], __w1data_end[]; -extern char __feedback_section_start[], __feedback_section_end[]; + +/* Not exactly sections, but PC comparison points in the code. */ +extern char __rt_sigreturn[], __rt_sigreturn_end[]; +#ifndef __tilegx__ +extern char sys_cmpxchg[], __sys_cmpxchg_end[]; +extern char __sys_cmpxchg_grab_lock[]; +extern char __start_atomic_asm_code[], __end_atomic_asm_code[]; +#endif /* Handle the discontiguity between _sdata and _stext. */ static inline int arch_is_kernel_data(unsigned long addr) diff --git a/arch/tile/include/asm/signal.h b/arch/tile/include/asm/signal.h index d20d326d201..eb0253f3220 100644 --- a/arch/tile/include/asm/signal.h +++ b/arch/tile/include/asm/signal.h @@ -26,6 +26,7 @@ #if defined(__KERNEL__) && !defined(__ASSEMBLY__) int restore_sigcontext(struct pt_regs *, struct sigcontext __user *, long *); int setup_sigcontext(struct sigcontext __user *, struct pt_regs *); +void do_signal(struct pt_regs *regs); #endif #endif /* _ASM_TILE_SIGNAL_H */ diff --git a/arch/tile/include/asm/spinlock_32.h b/arch/tile/include/asm/spinlock_32.h index f3a8473c68d..88efdde8dd2 100644 --- a/arch/tile/include/asm/spinlock_32.h +++ b/arch/tile/include/asm/spinlock_32.h @@ -134,9 +134,8 @@ static inline int arch_read_trylock(arch_rwlock_t *rwlock) { int locked; u32 val = __insn_tns((int *)&rwlock->lock); - if (unlikely(val & 1)) { + if (unlikely(val & 1)) return arch_read_trylock_slow(rwlock); - } locked = (val << _RD_COUNT_WIDTH) == 0; rwlock->lock = val + (locked << _RD_COUNT_SHIFT); return locked; diff --git a/arch/tile/include/asm/stack.h b/arch/tile/include/asm/stack.h index 864913bcfbc..f908473c322 100644 --- a/arch/tile/include/asm/stack.h +++ b/arch/tile/include/asm/stack.h @@ -48,6 +48,10 @@ extern void KBacktraceIterator_init(struct KBacktraceIterator *kbt, /* Initialize iterator based on current stack. */ extern void KBacktraceIterator_init_current(struct KBacktraceIterator *kbt); +/* Helper method for above. */ +extern void _KBacktraceIterator_init_current(struct KBacktraceIterator *kbt, + ulong pc, ulong lr, ulong sp, ulong r52); + /* No more frames? */ extern int KBacktraceIterator_end(struct KBacktraceIterator *kbt); @@ -64,5 +68,7 @@ extern void tile_show_stack(struct KBacktraceIterator *, int headers); /* Dump stack of current process, with registers to seed the backtrace. */ extern void dump_stack_regs(struct pt_regs *); +/* Helper method for assembly dump_stack(). */ +extern void _dump_stack(int dummy, ulong pc, ulong lr, ulong sp, ulong r52); #endif /* _ASM_TILE_STACK_H */ diff --git a/arch/tile/include/asm/syscalls.h b/arch/tile/include/asm/syscalls.h index 9f2b8e2f69d..af165a74537 100644 --- a/arch/tile/include/asm/syscalls.h +++ b/arch/tile/include/asm/syscalls.h @@ -22,7 +22,19 @@ #include <linux/linkage.h> #include <linux/signal.h> #include <linux/types.h> -#include <asm-generic/syscalls.h> +#include <linux/compat.h> + +/* The array of function pointers for syscalls. */ +extern void *sys_call_table[]; +#ifdef CONFIG_COMPAT +extern void *compat_sys_call_table[]; +#endif + +/* + * Note that by convention, any syscall which requires the current + * register set takes an additional "struct pt |