Merge git://git.kernel.org/pub/scm/linux/kernel/git/cmetcalf/linux-tile

Pull tile updates from Chris Metcalf:
 "This includes secure computing support as well as miscellaneous minor
  improvements"

* git://git.kernel.org/pub/scm/linux/kernel/git/cmetcalf/linux-tile:
  tile: correct some typos in opcode type names
  tile/vdso: emit a GNU hash as well
  tile: Remove finish_arch_switch
  tile: enable full SECCOMP support
  tile/time: Migrate to new 'set-state' interface
This commit is contained in:
Linus Torvalds
2015-09-04 08:59:53 -07:00
13 changed files with 67 additions and 13 deletions

View File

@@ -28,6 +28,7 @@ generic-y += poll.h
generic-y += posix_types.h
generic-y += preempt.h
generic-y += resource.h
generic-y += seccomp.h
generic-y += sembuf.h
generic-y += serial.h
generic-y += shmbuf.h

View File

@@ -22,6 +22,7 @@
#include <arch/chip.h>
#include <linux/ptrace.h>
#include <linux/elf-em.h>
#include <asm/byteorder.h>
#include <asm/page.h>
@@ -30,9 +31,6 @@ typedef unsigned long elf_greg_t;
#define ELF_NGREG (sizeof(struct pt_regs) / sizeof(elf_greg_t))
typedef elf_greg_t elf_gregset_t[ELF_NGREG];
#define EM_TILEPRO 188
#define EM_TILEGX 191
/* Provide a nominal data structure. */
#define ELF_NFPREG 0
typedef double elf_fpreg_t;

View File

@@ -20,6 +20,8 @@
#include <linux/sched.h>
#include <linux/err.h>
#include <linux/audit.h>
#include <linux/compat.h>
#include <arch/abi.h>
/* The array of function pointers for syscalls. */
@@ -61,7 +63,15 @@ static inline void syscall_set_return_value(struct task_struct *task,
struct pt_regs *regs,
int error, long val)
{
regs->regs[0] = (long) error ?: val;
if (error) {
/* R0 is the passed-in negative error, R1 is positive. */
regs->regs[0] = error;
regs->regs[1] = -error;
} else {
/* R1 set to zero to indicate no error. */
regs->regs[0] = val;
regs->regs[1] = 0;
}
}
static inline void syscall_get_arguments(struct task_struct *task,
@@ -82,4 +92,20 @@ static inline void syscall_set_arguments(struct task_struct *task,
memcpy(&regs[i], args, n * sizeof(args[0]));
}
/*
* We don't care about endianness (__AUDIT_ARCH_LE bit) here because
* tile has the same system calls both on little- and big- endian.
*/
static inline int syscall_get_arch(void)
{
if (is_compat_task())
return AUDIT_ARCH_TILEGX32;
#ifdef CONFIG_TILEGX
return AUDIT_ARCH_TILEGX;
#else
return AUDIT_ARCH_TILEPRO;
#endif
}
#endif /* _ASM_TILE_SYSCALL_H */