Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/egtvedt/linux-avr32

Pull AVR32 updates from Hans-Christian Egtvedt.

* 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/egtvedt/linux-avr32:
  avr32: uapi: be sure of "_UAPI" prefix for all guard macros
  avr32: add kprobe_ctlblk memory struct
  avr32: fix out-of-range jump in large kernels
  avr32: setup crt for early panic()
This commit is contained in:
Linus Torvalds 2013-11-20 15:02:22 -08:00
commit 8a60ba0a05
35 changed files with 101 additions and 129 deletions

View File

@ -8,6 +8,8 @@
* published by the Free Software Foundation.
*/
#include <asm/setup.h>
#include <asm/thread_info.h>
#include <asm/sysreg.h>
/*
* The kernel is loaded where we want it to be and all caches
@ -20,11 +22,6 @@
.section .init.text,"ax"
.global _start
_start:
/* Check if the boot loader actually provided a tag table */
lddpc r0, magic_number
cp.w r12, r0
brne no_tag_table
/* Initialize .bss */
lddpc r2, bss_start_addr
lddpc r3, end_addr
@ -34,6 +31,25 @@ _start:
cp r2, r3
brlo 1b
/* Initialize status register */
lddpc r0, init_sr
mtsr SYSREG_SR, r0
/* Set initial stack pointer */
lddpc sp, stack_addr
sub sp, -THREAD_SIZE
#ifdef CONFIG_FRAME_POINTER
/* Mark last stack frame */
mov lr, 0
mov r7, 0
#endif
/* Check if the boot loader actually provided a tag table */
lddpc r0, magic_number
cp.w r12, r0
brne no_tag_table
/*
* Save the tag table address for later use. This must be done
* _after_ .bss has been initialized...
@ -53,8 +69,15 @@ bss_start_addr:
.long __bss_start
end_addr:
.long _end
init_sr:
.long 0x007f0000 /* Supervisor mode, everything masked */
stack_addr:
.long init_thread_union
panic_addr:
.long panic
no_tag_table:
sub r12, pc, (. - 2f)
bral panic
/* branch to panic() which can be far away with that construct */
lddpc pc, panic_addr
2: .asciz "Boot loader didn't provide correct magic number\n"

View File

@ -16,6 +16,7 @@
typedef u16 kprobe_opcode_t;
#define BREAKPOINT_INSTRUCTION 0xd673 /* breakpoint */
#define MAX_INSN_SIZE 2
#define MAX_STACK_SIZE 64 /* 32 would probably be OK */
#define kretprobe_blacklist_size 0
@ -26,6 +27,19 @@ struct arch_specific_insn {
kprobe_opcode_t insn[MAX_INSN_SIZE];
};
struct prev_kprobe {
struct kprobe *kp;
unsigned int status;
};
/* per-cpu kprobe control block */
struct kprobe_ctlblk {
unsigned int kprobe_status;
struct prev_kprobe prev_kprobe;
struct pt_regs jprobe_saved_regs;
char jprobes_stack[MAX_STACK_SIZE];
};
extern int kprobe_fault_handler(struct pt_regs *regs, int trapnr);
extern int kprobe_exceptions_notify(struct notifier_block *self,
unsigned long val, void *data);

View File

@ -2,35 +2,35 @@
include include/uapi/asm-generic/Kbuild.asm
header-y += auxvec.h
header-y += bitsperlong.h
header-y += byteorder.h
header-y += cachectl.h
header-y += errno.h
header-y += fcntl.h
header-y += ioctl.h
header-y += ioctls.h
header-y += ipcbuf.h
header-y += kvm_para.h
header-y += mman.h
header-y += msgbuf.h
header-y += param.h
header-y += poll.h
header-y += posix_types.h
header-y += ptrace.h
header-y += resource.h
header-y += sembuf.h
header-y += setup.h
header-y += shmbuf.h
header-y += sigcontext.h
header-y += siginfo.h
header-y += signal.h
header-y += socket.h
header-y += sockios.h
header-y += stat.h
header-y += statfs.h
header-y += swab.h
header-y += termbits.h
header-y += termios.h
header-y += types.h
header-y += unistd.h
generic-y += bitsperlong.h
generic-y += errno.h
generic-y += fcntl.h
generic-y += ioctl.h
generic-y += ioctls.h
generic-y += ipcbuf.h
generic-y += kvm_para.h
generic-y += mman.h
generic-y += param.h
generic-y += poll.h
generic-y += resource.h
generic-y += siginfo.h
generic-y += statfs.h

View File

@ -1,4 +1,4 @@
#ifndef __ASM_AVR32_AUXVEC_H
#define __ASM_AVR32_AUXVEC_H
#ifndef _UAPI__ASM_AVR32_AUXVEC_H
#define _UAPI__ASM_AVR32_AUXVEC_H
#endif /* __ASM_AVR32_AUXVEC_H */
#endif /* _UAPI__ASM_AVR32_AUXVEC_H */

View File

@ -1 +0,0 @@
#include <asm-generic/bitsperlong.h>

View File

@ -1,9 +1,9 @@
/*
* AVR32 endian-conversion functions.
*/
#ifndef __ASM_AVR32_BYTEORDER_H
#define __ASM_AVR32_BYTEORDER_H
#ifndef _UAPI__ASM_AVR32_BYTEORDER_H
#define _UAPI__ASM_AVR32_BYTEORDER_H
#include <linux/byteorder/big_endian.h>
#endif /* __ASM_AVR32_BYTEORDER_H */
#endif /* _UAPI__ASM_AVR32_BYTEORDER_H */

View File

@ -1,5 +1,5 @@
#ifndef __ASM_AVR32_CACHECTL_H
#define __ASM_AVR32_CACHECTL_H
#ifndef _UAPI__ASM_AVR32_CACHECTL_H
#define _UAPI__ASM_AVR32_CACHECTL_H
/*
* Operations that can be performed through the cacheflush system call
@ -8,4 +8,4 @@
/* Clean the data cache, then invalidate the icache */
#define CACHE_IFLUSH 0
#endif /* __ASM_AVR32_CACHECTL_H */
#endif /* _UAPI__ASM_AVR32_CACHECTL_H */

View File

@ -1,6 +0,0 @@
#ifndef __ASM_AVR32_ERRNO_H
#define __ASM_AVR32_ERRNO_H
#include <asm-generic/errno.h>
#endif /* __ASM_AVR32_ERRNO_H */

View File

@ -1,6 +0,0 @@
#ifndef __ASM_AVR32_FCNTL_H
#define __ASM_AVR32_FCNTL_H
#include <asm-generic/fcntl.h>
#endif /* __ASM_AVR32_FCNTL_H */

View File

@ -1,6 +0,0 @@
#ifndef __ASM_AVR32_IOCTL_H
#define __ASM_AVR32_IOCTL_H
#include <asm-generic/ioctl.h>
#endif /* __ASM_AVR32_IOCTL_H */

View File

@ -1,6 +0,0 @@
#ifndef __ASM_AVR32_IOCTLS_H
#define __ASM_AVR32_IOCTLS_H
#include <asm-generic/ioctls.h>
#endif /* __ASM_AVR32_IOCTLS_H */

View File

@ -1 +0,0 @@
#include <asm-generic/ipcbuf.h>

View File

@ -1 +0,0 @@
#include <asm-generic/kvm_para.h>

View File

@ -1 +0,0 @@
#include <asm-generic/mman.h>

View File

@ -1,5 +1,5 @@
#ifndef __ASM_AVR32_MSGBUF_H
#define __ASM_AVR32_MSGBUF_H
#ifndef _UAPI__ASM_AVR32_MSGBUF_H
#define _UAPI__ASM_AVR32_MSGBUF_H
/*
* The msqid64_ds structure for i386 architecture.
@ -28,4 +28,4 @@ struct msqid64_ds {
unsigned long __unused5;
};
#endif /* __ASM_AVR32_MSGBUF_H */
#endif /* _UAPI__ASM_AVR32_MSGBUF_H */

View File

@ -1 +0,0 @@
#include <asm-generic/poll.h>

View File

@ -5,8 +5,8 @@
* it under the terms of the GNU General Public License version 2 as
* published by the Free Software Foundation.
*/
#ifndef __ASM_AVR32_POSIX_TYPES_H
#define __ASM_AVR32_POSIX_TYPES_H
#ifndef _UAPI__ASM_AVR32_POSIX_TYPES_H
#define _UAPI__ASM_AVR32_POSIX_TYPES_H
/*
* This file is generally used by user-level software, so you need to
@ -34,4 +34,4 @@ typedef unsigned short __kernel_old_dev_t;
#include <asm-generic/posix_types.h>
#endif /* __ASM_AVR32_POSIX_TYPES_H */
#endif /* _UAPI__ASM_AVR32_POSIX_TYPES_H */

View File

@ -1,6 +0,0 @@
#ifndef __ASM_AVR32_RESOURCE_H
#define __ASM_AVR32_RESOURCE_H
#include <asm-generic/resource.h>
#endif /* __ASM_AVR32_RESOURCE_H */

View File

@ -1,5 +1,5 @@
#ifndef __ASM_AVR32_SEMBUF_H
#define __ASM_AVR32_SEMBUF_H
#ifndef _UAPI__ASM_AVR32_SEMBUF_H
#define _UAPI__ASM_AVR32_SEMBUF_H
/*
* The semid64_ds structure for AVR32 architecture.
@ -22,4 +22,4 @@ struct semid64_ds {
unsigned long __unused4;
};
#endif /* __ASM_AVR32_SEMBUF_H */
#endif /* _UAPI__ASM_AVR32_SEMBUF_H */

View File

@ -13,5 +13,4 @@
#define COMMAND_LINE_SIZE 256
#endif /* _UAPI__ASM_AVR32_SETUP_H__ */

View File

@ -1,5 +1,5 @@
#ifndef __ASM_AVR32_SHMBUF_H
#define __ASM_AVR32_SHMBUF_H
#ifndef _UAPI__ASM_AVR32_SHMBUF_H
#define _UAPI__ASM_AVR32_SHMBUF_H
/*
* The shmid64_ds structure for i386 architecture.
@ -39,4 +39,4 @@ struct shminfo64 {
unsigned long __unused4;
};
#endif /* __ASM_AVR32_SHMBUF_H */
#endif /* _UAPI__ASM_AVR32_SHMBUF_H */

View File

@ -5,8 +5,8 @@
* it under the terms of the GNU General Public License version 2 as
* published by the Free Software Foundation.
*/
#ifndef __ASM_AVR32_SIGCONTEXT_H
#define __ASM_AVR32_SIGCONTEXT_H
#ifndef _UAPI__ASM_AVR32_SIGCONTEXT_H
#define _UAPI__ASM_AVR32_SIGCONTEXT_H
struct sigcontext {
unsigned long oldmask;
@ -31,4 +31,4 @@ struct sigcontext {
unsigned long r0;
};
#endif /* __ASM_AVR32_SIGCONTEXT_H */
#endif /* _UAPI__ASM_AVR32_SIGCONTEXT_H */

View File

@ -1,6 +0,0 @@
#ifndef _AVR32_SIGINFO_H
#define _AVR32_SIGINFO_H
#include <asm-generic/siginfo.h>
#endif

View File

@ -118,5 +118,4 @@ typedef struct sigaltstack {
size_t ss_size;
} stack_t;
#endif /* _UAPI__ASM_AVR32_SIGNAL_H */

View File

@ -1,5 +1,5 @@
#ifndef __ASM_AVR32_SOCKET_H
#define __ASM_AVR32_SOCKET_H
#ifndef _UAPI__ASM_AVR32_SOCKET_H
#define _UAPI__ASM_AVR32_SOCKET_H
#include <asm/sockios.h>
@ -78,4 +78,4 @@
#define SO_MAX_PACING_RATE 47
#endif /* __ASM_AVR32_SOCKET_H */
#endif /* _UAPI__ASM_AVR32_SOCKET_H */

View File

@ -1,5 +1,5 @@
#ifndef __ASM_AVR32_SOCKIOS_H
#define __ASM_AVR32_SOCKIOS_H
#ifndef _UAPI__ASM_AVR32_SOCKIOS_H
#define _UAPI__ASM_AVR32_SOCKIOS_H
/* Socket-level I/O control calls. */
#define FIOSETOWN 0x8901
@ -10,4 +10,4 @@
#define SIOCGSTAMP 0x8906 /* Get stamp (timeval) */
#define SIOCGSTAMPNS 0x8907 /* Get stamp (timespec) */
#endif /* __ASM_AVR32_SOCKIOS_H */
#endif /* _UAPI__ASM_AVR32_SOCKIOS_H */

View File

@ -5,8 +5,8 @@
* it under the terms of the GNU General Public License version 2 as
* published by the Free Software Foundation.
*/
#ifndef __ASM_AVR32_STAT_H
#define __ASM_AVR32_STAT_H
#ifndef _UAPI__ASM_AVR32_STAT_H
#define _UAPI__ASM_AVR32_STAT_H
struct __old_kernel_stat {
unsigned short st_dev;
@ -76,4 +76,4 @@ struct stat64 {
unsigned long __unused2;
};
#endif /* __ASM_AVR32_STAT_H */
#endif /* _UAPI__ASM_AVR32_STAT_H */

View File

@ -1,6 +0,0 @@
#ifndef __ASM_AVR32_STATFS_H
#define __ASM_AVR32_STATFS_H
#include <asm-generic/statfs.h>
#endif /* __ASM_AVR32_STATFS_H */

View File

@ -1,8 +1,8 @@
/*
* AVR32 byteswapping functions.
*/
#ifndef __ASM_AVR32_SWAB_H
#define __ASM_AVR32_SWAB_H
#ifndef _UAPI__ASM_AVR32_SWAB_H
#define _UAPI__ASM_AVR32_SWAB_H
#include <linux/types.h>
#include <linux/compiler.h>
@ -32,4 +32,4 @@ static inline __attribute_const__ __u32 __arch_swab32(__u32 val)
#define __arch_swab32 __arch_swab32
#endif
#endif /* __ASM_AVR32_SWAB_H */
#endif /* _UAPI__ASM_AVR32_SWAB_H */

View File

@ -1,5 +1,5 @@
#ifndef __ASM_AVR32_TERMBITS_H
#define __ASM_AVR32_TERMBITS_H
#ifndef _UAPI__ASM_AVR32_TERMBITS_H
#define _UAPI__ASM_AVR32_TERMBITS_H
#include <linux/posix_types.h>
@ -193,4 +193,4 @@ struct ktermios {
#define TCSADRAIN 1
#define TCSAFLUSH 2
#endif /* __ASM_AVR32_TERMBITS_H */
#endif /* _UAPI__ASM_AVR32_TERMBITS_H */

View File

@ -46,5 +46,4 @@ struct termio {
/* ioctl (fd, TIOCSERGETLSR, &result) where result may be as below */
#endif /* _UAPI__ASM_AVR32_TERMIOS_H */

View File

@ -5,4 +5,9 @@
* it under the terms of the GNU General Public License version 2 as
* published by the Free Software Foundation.
*/
#ifndef _UAPI__ASM_AVR32_TYPES_H
#define _UAPI__ASM_AVR32_TYPES_H
#include <asm-generic/int-ll64.h>
#endif /* _UAPI__ASM_AVR32_TYPES_H */

View File

@ -301,5 +301,4 @@
#define __NR_eventfd 281
#define __NR_setns 283
#endif /* _UAPI__ASM_AVR32_UNISTD_H */

View File

@ -401,9 +401,10 @@ handle_critical:
/* We should never get here... */
bad_return:
sub r12, pc, (. - 1f)
bral panic
lddpc pc, 2f
.align 2
1: .asciz "Return from critical exception!"
2: .long panic
.align 1
do_bus_error_write:

View File

@ -10,33 +10,13 @@
#include <linux/linkage.h>
#include <asm/page.h>
#include <asm/thread_info.h>
#include <asm/sysreg.h>
.section .init.text,"ax"
.global kernel_entry
kernel_entry:
/* Initialize status register */
lddpc r0, init_sr
mtsr SYSREG_SR, r0
/* Set initial stack pointer */
lddpc sp, stack_addr
sub sp, -THREAD_SIZE
#ifdef CONFIG_FRAME_POINTER
/* Mark last stack frame */
mov lr, 0
mov r7, 0
#endif
/* Start the show */
lddpc pc, kernel_start_addr
.align 2
init_sr:
.long 0x007f0000 /* Supervisor mode, everything masked */
stack_addr:
.long init_thread_union
kernel_start_addr:
.long start_kernel