提交 2a6a432a 编写于 作者: L Linus Torvalds

Merge master.kernel.org:/home/rmk/linux-2.6-arm

* master.kernel.org:/home/rmk/linux-2.6-arm:
  VIDEO: amba clcd: don't disable an already disabled clock
  ARM: Tighten check for allowable CPSR values
  ARM: 6329/1: wire up sys_accept4() on ARM
  ARM: 6328/1: Build with -fno-dwarf2-cfi-asm
  ARM: 6326/1: kgdb: fix GDB_MAX_REGS no longer used
...@@ -21,6 +21,9 @@ GZFLAGS :=-9 ...@@ -21,6 +21,9 @@ GZFLAGS :=-9
# Explicitly specifiy 32-bit ARM ISA since toolchain default can be -mthumb: # Explicitly specifiy 32-bit ARM ISA since toolchain default can be -mthumb:
KBUILD_CFLAGS +=$(call cc-option,-marm,) KBUILD_CFLAGS +=$(call cc-option,-marm,)
# Never generate .eh_frame
KBUILD_CFLAGS += $(call cc-option,-fno-dwarf2-cfi-asm)
# Do not use arch/arm/defconfig - it's always outdated. # Do not use arch/arm/defconfig - it's always outdated.
# Select a platform tht is kept up-to-date # Select a platform tht is kept up-to-date
KBUILD_DEFCONFIG := versatile_defconfig KBUILD_DEFCONFIG := versatile_defconfig
......
...@@ -158,15 +158,24 @@ struct pt_regs { ...@@ -158,15 +158,24 @@ struct pt_regs {
*/ */
static inline int valid_user_regs(struct pt_regs *regs) static inline int valid_user_regs(struct pt_regs *regs)
{ {
if (user_mode(regs) && (regs->ARM_cpsr & PSR_I_BIT) == 0) { unsigned long mode = regs->ARM_cpsr & MODE_MASK;
/*
* Always clear the F (FIQ) and A (delayed abort) bits
*/
regs->ARM_cpsr &= ~(PSR_F_BIT | PSR_A_BIT); regs->ARM_cpsr &= ~(PSR_F_BIT | PSR_A_BIT);
if ((regs->ARM_cpsr & PSR_I_BIT) == 0) {
if (mode == USR_MODE)
return 1;
if (elf_hwcap & HWCAP_26BIT && mode == USR26_MODE)
return 1; return 1;
} }
/* /*
* Force CPSR to something logical... * Force CPSR to something logical...
*/ */
regs->ARM_cpsr &= PSR_f | PSR_s | (PSR_x & ~PSR_A_BIT) | PSR_T_BIT | MODE32_BIT; regs->ARM_cpsr &= PSR_f | PSR_s | PSR_x | PSR_T_BIT | MODE32_BIT;
if (!(elf_hwcap & HWCAP_26BIT)) if (!(elf_hwcap & HWCAP_26BIT))
regs->ARM_cpsr |= USR_MODE; regs->ARM_cpsr |= USR_MODE;
......
...@@ -392,6 +392,7 @@ ...@@ -392,6 +392,7 @@
#define __NR_rt_tgsigqueueinfo (__NR_SYSCALL_BASE+363) #define __NR_rt_tgsigqueueinfo (__NR_SYSCALL_BASE+363)
#define __NR_perf_event_open (__NR_SYSCALL_BASE+364) #define __NR_perf_event_open (__NR_SYSCALL_BASE+364)
#define __NR_recvmmsg (__NR_SYSCALL_BASE+365) #define __NR_recvmmsg (__NR_SYSCALL_BASE+365)
#define __NR_accept4 (__NR_SYSCALL_BASE+366)
/* /*
* The following SWIs are ARM private. * The following SWIs are ARM private.
......
...@@ -375,6 +375,7 @@ ...@@ -375,6 +375,7 @@
CALL(sys_rt_tgsigqueueinfo) CALL(sys_rt_tgsigqueueinfo)
CALL(sys_perf_event_open) CALL(sys_perf_event_open)
/* 365 */ CALL(sys_recvmmsg) /* 365 */ CALL(sys_recvmmsg)
CALL(sys_accept4)
#ifndef syscalls_counted #ifndef syscalls_counted
.equ syscalls_padding, ((NR_syscalls + 3) & ~3) - NR_syscalls .equ syscalls_padding, ((NR_syscalls + 3) & ~3) - NR_syscalls
#define syscalls_counted #define syscalls_counted
......
...@@ -79,7 +79,7 @@ sleeping_thread_to_gdb_regs(unsigned long *gdb_regs, struct task_struct *task) ...@@ -79,7 +79,7 @@ sleeping_thread_to_gdb_regs(unsigned long *gdb_regs, struct task_struct *task)
return; return;
/* Initialize to zero */ /* Initialize to zero */
for (regno = 0; regno < GDB_MAX_REGS; regno++) for (regno = 0; regno < DBG_MAX_REG_NUM; regno++)
gdb_regs[regno] = 0; gdb_regs[regno] = 0;
/* Otherwise, we have only some registers from switch_to() */ /* Otherwise, we have only some registers from switch_to() */
......
...@@ -80,7 +80,10 @@ static void clcdfb_disable(struct clcd_fb *fb) ...@@ -80,7 +80,10 @@ static void clcdfb_disable(struct clcd_fb *fb)
/* /*
* Disable CLCD clock source. * Disable CLCD clock source.
*/ */
if (fb->clk_enabled) {
fb->clk_enabled = false;
clk_disable(fb->clk); clk_disable(fb->clk);
}
} }
static void clcdfb_enable(struct clcd_fb *fb, u32 cntl) static void clcdfb_enable(struct clcd_fb *fb, u32 cntl)
...@@ -88,7 +91,10 @@ static void clcdfb_enable(struct clcd_fb *fb, u32 cntl) ...@@ -88,7 +91,10 @@ static void clcdfb_enable(struct clcd_fb *fb, u32 cntl)
/* /*
* Enable the CLCD clock source. * Enable the CLCD clock source.
*/ */
if (!fb->clk_enabled) {
fb->clk_enabled = true;
clk_enable(fb->clk); clk_enable(fb->clk);
}
/* /*
* Bring up by first enabling.. * Bring up by first enabling..
......
...@@ -150,6 +150,7 @@ struct clcd_fb { ...@@ -150,6 +150,7 @@ struct clcd_fb {
u16 off_cntl; u16 off_cntl;
u32 clcd_cntl; u32 clcd_cntl;
u32 cmap[16]; u32 cmap[16];
bool clk_enabled;
}; };
static inline void clcdfb_decode(struct clcd_fb *fb, struct clcd_regs *regs) static inline void clcdfb_decode(struct clcd_fb *fb, struct clcd_regs *regs)
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册