public inbox for linux-kernel@vger.kernel.org
 help / color / mirror / Atom feed
* [PATCH 0/6] score cleanups
@ 2009-06-27 14:08 Arnd Bergmann
  2009-06-27 14:08 ` [PATCH 1/6] score: add missing #includes Arnd Bergmann
                   ` (6 more replies)
  0 siblings, 7 replies; 9+ messages in thread
From: Arnd Bergmann @ 2009-06-27 14:08 UTC (permalink / raw)
  To: liqin.chen; +Cc: linux-kernel, Arnd Bergmann

Hi Liqin,

I've gone over your code a bit with sparse and some clues,
cleaning up some areas that stuck out.

Please check that these make sense.

	Arnd <><

Arnd Bergmann (6):
  score: add missing #includes
  score: add address space annotations
  score: fix function prototypes
  score: cleanups: dead code, 0 as pointer, shadowed variables
  score: make irq.h definitions local
  score: clean up mm/init.c

 arch/score/include/asm/irq.h      |   10 ---------
 arch/score/include/asm/uaccess.h  |    4 +-
 arch/score/include/asm/ucontext.h |    1 +
 arch/score/kernel/irq.c           |   33 ++++++++++++++++++++++---------
 arch/score/kernel/module.c        |   13 ++++++-----
 arch/score/kernel/process.c       |    3 ++
 arch/score/kernel/ptrace.c        |    7 +++--
 arch/score/kernel/signal.c        |   38 +++++++++++++++++++++---------------
 arch/score/kernel/sys_score.c     |   28 +++++++++-----------------
 arch/score/kernel/time.c          |    2 +-
 arch/score/mm/init.c              |   34 +++++++++-----------------------
 11 files changed, 83 insertions(+), 90 deletions(-)
 create mode 100644 arch/score/include/asm/ucontext.h


^ permalink raw reply	[flat|nested] 9+ messages in thread

* [PATCH 1/6] score: add missing #includes
  2009-06-27 14:08 [PATCH 0/6] score cleanups Arnd Bergmann
@ 2009-06-27 14:08 ` Arnd Bergmann
  2009-06-27 14:08 ` [PATCH 2/6] score: add address space annotations Arnd Bergmann
                   ` (5 subsequent siblings)
  6 siblings, 0 replies; 9+ messages in thread
From: Arnd Bergmann @ 2009-06-27 14:08 UTC (permalink / raw)
  To: liqin.chen; +Cc: linux-kernel, Arnd Bergmann

Files that define a global function should #include the
header with its declaration to make sure that the prototypes
do not diverge.

Signed-off-by: Arnd Bergmann <arnd@arndb.de>
---
 arch/score/include/asm/ucontext.h |    1 +
 arch/score/kernel/module.c        |    1 +
 arch/score/kernel/process.c       |    3 +++
 arch/score/kernel/signal.c        |    4 +++-
 arch/score/kernel/sys_score.c     |    2 ++
 5 files changed, 10 insertions(+), 1 deletions(-)
 create mode 100644 arch/score/include/asm/ucontext.h

diff --git a/arch/score/include/asm/ucontext.h b/arch/score/include/asm/ucontext.h
new file mode 100644
index 0000000..9bc07b9
--- /dev/null
+++ b/arch/score/include/asm/ucontext.h
@@ -0,0 +1 @@
+#include <asm-generic/ucontext.h>
diff --git a/arch/score/kernel/module.c b/arch/score/kernel/module.c
index 4ffce7f..1a62557 100644
--- a/arch/score/kernel/module.c
+++ b/arch/score/kernel/module.c
@@ -23,6 +23,7 @@
  * 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
  */
 
+#include <linux/moduleloader.h>
 #include <linux/module.h>
 #include <linux/vmalloc.h>
 
diff --git a/arch/score/kernel/process.c b/arch/score/kernel/process.c
index d93966f..25d0803 100644
--- a/arch/score/kernel/process.c
+++ b/arch/score/kernel/process.c
@@ -24,6 +24,9 @@
  */
 
 #include <linux/module.h>
+#include <linux/reboot.h>
+#include <linux/elfcore.h>
+#include <linux/pm.h>
 
 void (*pm_power_off)(void);
 EXPORT_SYMBOL(pm_power_off);
diff --git a/arch/score/kernel/signal.c b/arch/score/kernel/signal.c
index 5c00408..252f6d9 100644
--- a/arch/score/kernel/signal.c
+++ b/arch/score/kernel/signal.c
@@ -27,7 +27,9 @@
 #include <linux/signal.h>
 #include <linux/unistd.h>
 #include <linux/uaccess.h>
-#include <asm-generic/ucontext.h>
+
+#include <asm/syscalls.h>
+#include <asm/ucontext.h>
 
 #include <asm/cacheflush.h>
 
diff --git a/arch/score/kernel/sys_score.c b/arch/score/kernel/sys_score.c
index 3318861..eb4d2d3 100644
--- a/arch/score/kernel/sys_score.c
+++ b/arch/score/kernel/sys_score.c
@@ -28,6 +28,8 @@
 #include <linux/mman.h>
 #include <linux/module.h>
 #include <linux/unistd.h>
+#include <linux/syscalls.h>
+#include <asm/syscalls.h>
 
 unsigned long shm_align_mask = PAGE_SIZE - 1;
 EXPORT_SYMBOL(shm_align_mask);
-- 
1.6.3.1


^ permalink raw reply related	[flat|nested] 9+ messages in thread

* [PATCH 2/6] score: add address space annotations
  2009-06-27 14:08 [PATCH 0/6] score cleanups Arnd Bergmann
  2009-06-27 14:08 ` [PATCH 1/6] score: add missing #includes Arnd Bergmann
@ 2009-06-27 14:08 ` Arnd Bergmann
  2009-06-27 14:08 ` [PATCH 3/6] score: fix function prototypes Arnd Bergmann
                   ` (4 subsequent siblings)
  6 siblings, 0 replies; 9+ messages in thread
From: Arnd Bergmann @ 2009-06-27 14:08 UTC (permalink / raw)
  To: liqin.chen; +Cc: linux-kernel, Arnd Bergmann

Annotate the address space for pointers that are used
correctly with __user and __iomem, so that sparse
can better warn about incorrect casts.

Signed-off-by: Arnd Bergmann <arnd@arndb.de>
---
 arch/score/include/asm/uaccess.h |    4 ++--
 arch/score/kernel/ptrace.c       |    7 ++++---
 arch/score/kernel/signal.c       |   10 +++++-----
 arch/score/kernel/sys_score.c    |    9 +++++----
 4 files changed, 16 insertions(+), 14 deletions(-)

diff --git a/arch/score/include/asm/uaccess.h b/arch/score/include/asm/uaccess.h
index 43ce28a..6f09e2b 100644
--- a/arch/score/include/asm/uaccess.h
+++ b/arch/score/include/asm/uaccess.h
@@ -13,9 +13,9 @@ extern int fixup_exception(struct pt_regs *regs);
 #ifndef __ASSEMBLY__
 
 #define __range_ok(addr, size)					\
-	((((unsigned long)(addr) >= 0x80000000)			\
+	((((unsigned long __force)(addr) >= 0x80000000)			\
 	|| ((unsigned long)(size) > 0x80000000)			\
-	|| (((unsigned long)(addr) + (unsigned long)(size)) > 0x80000000)))
+	|| (((unsigned long __force)(addr) + (unsigned long)(size)) > 0x80000000)))
 
 #define __access_ok(addr, size) \
 	(__range_ok((addr), (size)) == 0)
diff --git a/arch/score/kernel/ptrace.c b/arch/score/kernel/ptrace.c
index 19911e3..1db876b 100644
--- a/arch/score/kernel/ptrace.c
+++ b/arch/score/kernel/ptrace.c
@@ -267,6 +267,7 @@ long
 arch_ptrace(struct task_struct *child, long request, long addr, long data)
 {
 	int ret;
+	unsigned long __user *datap = (void __user *)data;
 
 	switch (request) {
 	/* Read the word at location addr in the USER area.  */
@@ -316,7 +317,7 @@ arch_ptrace(struct task_struct *child, long request, long addr, long data)
 			return -EIO;
 		}
 
-		ret = put_user(tmp, (unsigned long *) data);
+		ret = put_user(tmp, (unsigned int __user *) datap);
 		return ret;
 	}
 
@@ -355,11 +356,11 @@ arch_ptrace(struct task_struct *child, long request, long addr, long data)
 	}
 
 	case PTRACE_GETREGS:
-		ret = ptrace_getregs(child, (void __user *)data);
+		ret = ptrace_getregs(child, (void __user *)datap);
 		break;
 
 	case PTRACE_SETREGS:
-		ret = ptrace_setregs(child, (void __user *)data);
+		ret = ptrace_setregs(child, (void __user *)datap);
 		break;
 
 	default:
diff --git a/arch/score/kernel/signal.c b/arch/score/kernel/signal.c
index 252f6d9..1634aaa 100644
--- a/arch/score/kernel/signal.c
+++ b/arch/score/kernel/signal.c
@@ -131,13 +131,13 @@ void __user *get_sigframe(struct k_sigaction *ka, struct pt_regs *regs,
 	if ((ka->sa.sa_flags & SA_ONSTACK) && (!on_sig_stack(sp)))
 		sp = current->sas_ss_sp + current->sas_ss_size;
 
-	return (void *)((sp - frame_size) & ~7);
+	return (void __user*)((sp - frame_size) & ~7);
 }
 
 int score_sigaltstack(struct pt_regs *regs)
 {
-	const stack_t *uss = (const stack_t *) regs->regs[4];
-	stack_t *uoss = (stack_t *) regs->regs[5];
+	const stack_t __user *uss = (const stack_t __user *) regs->regs[4];
+	stack_t __user *uoss = (stack_t __user *) regs->regs[5];
 	unsigned long usp = regs->regs[0];
 
 	return do_sigaltstack(uss, uoss, usp);
@@ -188,7 +188,7 @@ badframe:
 int setup_rt_frame(struct k_sigaction *ka, struct pt_regs *regs,
 		int signr, sigset_t *set, siginfo_t *info)
 {
-	struct rt_sigframe *frame;
+	struct rt_sigframe __user *frame;
 	int err = 0;
 
 	frame = get_sigframe(ka, regs, sizeof(*frame));
@@ -209,7 +209,7 @@ int setup_rt_frame(struct k_sigaction *ka, struct pt_regs *regs,
 	err |= copy_siginfo_to_user(&frame->rs_info, info);
 	err |= __put_user(0, &frame->rs_uc.uc_flags);
 	err |= __put_user(0, &frame->rs_uc.uc_link);
-	err |= __put_user((void *)current->sas_ss_sp,
+	err |= __put_user((void __user *)current->sas_ss_sp,
 				&frame->rs_uc.uc_stack.ss_sp);
 	err |= __put_user(sas_ss_flags(regs->regs[0]),
 				&frame->rs_uc.uc_stack.ss_flags);
diff --git a/arch/score/kernel/sys_score.c b/arch/score/kernel/sys_score.c
index eb4d2d3..16ace29 100644
--- a/arch/score/kernel/sys_score.c
+++ b/arch/score/kernel/sys_score.c
@@ -87,18 +87,19 @@ int score_clone(struct pt_regs *regs)
  * sys_execve() executes a new program.
  * This is called indirectly via a small wrapper
  */
-int score_execve(struct pt_regs *regs)
+asmlinkage long
+score_execve(struct pt_regs *regs)
 {
 	int error;
 	char *filename;
 
-	filename = getname((char *) (long) regs->regs[4]);
+	filename = getname((char __user*)regs->regs[4]);
 	error = PTR_ERR(filename);
 	if (IS_ERR(filename))
 		return error;
 
-	error = do_execve(filename, (char **) (long) regs->regs[5],
-			  (char **) (long) regs->regs[6], regs);
+	error = do_execve(filename, (char __user *__user*)regs->regs[5],
+			  (char __user *__user *) regs->regs[6], regs);
 
 	putname(filename);
 	return error;
-- 
1.6.3.1


^ permalink raw reply related	[flat|nested] 9+ messages in thread

* [PATCH 3/6] score: fix function prototypes
  2009-06-27 14:08 [PATCH 0/6] score cleanups Arnd Bergmann
  2009-06-27 14:08 ` [PATCH 1/6] score: add missing #includes Arnd Bergmann
  2009-06-27 14:08 ` [PATCH 2/6] score: add address space annotations Arnd Bergmann
@ 2009-06-27 14:08 ` Arnd Bergmann
  2009-06-27 14:08 ` [PATCH 4/6] score: cleanups: dead code, 0 as pointer, shadowed variables Arnd Bergmann
                   ` (3 subsequent siblings)
  6 siblings, 0 replies; 9+ messages in thread
From: Arnd Bergmann @ 2009-06-27 14:08 UTC (permalink / raw)
  To: liqin.chen; +Cc: linux-kernel, Arnd Bergmann

Syscalls should return 'long' and be marked as 'asmlinkage'.
Functions that are only used in a single file should be 'static'.

Signed-off-by: Arnd Bergmann <arnd@arndb.de>
---
 arch/score/kernel/signal.c    |   22 +++++++++++++---------
 arch/score/kernel/sys_score.c |    5 +++--
 arch/score/kernel/time.c      |    2 +-
 3 files changed, 17 insertions(+), 12 deletions(-)

diff --git a/arch/score/kernel/signal.c b/arch/score/kernel/signal.c
index 1634aaa..afbfe33 100644
--- a/arch/score/kernel/signal.c
+++ b/arch/score/kernel/signal.c
@@ -42,7 +42,7 @@ struct rt_sigframe {
 	struct ucontext rs_uc;
 };
 
-int setup_sigcontext(struct pt_regs *regs, struct sigcontext __user *sc)
+static int setup_sigcontext(struct pt_regs *regs, struct sigcontext __user *sc)
 {
 	int err = 0;
 	unsigned long reg;
@@ -76,7 +76,7 @@ int setup_sigcontext(struct pt_regs *regs, struct sigcontext __user *sc)
 	return err;
 }
 
-int restore_sigcontext(struct pt_regs *regs, struct sigcontext __user *sc)
+static int restore_sigcontext(struct pt_regs *regs, struct sigcontext __user *sc)
 {
 	int err = 0;
 	u32 reg;
@@ -118,8 +118,8 @@ int restore_sigcontext(struct pt_regs *regs, struct sigcontext __user *sc)
 /*
  * Determine which stack to use..
  */
-void __user *get_sigframe(struct k_sigaction *ka, struct pt_regs *regs,
-			size_t frame_size)
+static void __user *get_sigframe(struct k_sigaction *ka,
+			struct pt_regs *regs, size_t frame_size)
 {
 	unsigned long sp;
 
@@ -134,7 +134,8 @@ void __user *get_sigframe(struct k_sigaction *ka, struct pt_regs *regs,
 	return (void __user*)((sp - frame_size) & ~7);
 }
 
-int score_sigaltstack(struct pt_regs *regs)
+asmlinkage long
+score_sigaltstack(struct pt_regs *regs)
 {
 	const stack_t __user *uss = (const stack_t __user *) regs->regs[4];
 	stack_t __user *uoss = (stack_t __user *) regs->regs[5];
@@ -143,7 +144,8 @@ int score_sigaltstack(struct pt_regs *regs)
 	return do_sigaltstack(uss, uoss, usp);
 }
 
-void score_rt_sigreturn(struct pt_regs *regs)
+asmlinkage long
+score_rt_sigreturn(struct pt_regs *regs)
 {
 	struct rt_sigframe __user *frame;
 	sigset_t set;
@@ -183,9 +185,11 @@ void score_rt_sigreturn(struct pt_regs *regs)
 
 badframe:
 	force_sig(SIGSEGV, current);
+
+	return 0;
 }
 
-int setup_rt_frame(struct k_sigaction *ka, struct pt_regs *regs,
+static int setup_rt_frame(struct k_sigaction *ka, struct pt_regs *regs,
 		int signr, sigset_t *set, siginfo_t *info)
 {
 	struct rt_sigframe __user *frame;
@@ -238,7 +242,7 @@ give_sigsegv:
 	return -EFAULT;
 }
 
-int handle_signal(unsigned long sig, siginfo_t *info,
+static int handle_signal(unsigned long sig, siginfo_t *info,
 	struct k_sigaction *ka, sigset_t *oldset, struct pt_regs *regs)
 {
 	int ret;
@@ -278,7 +282,7 @@ int handle_signal(unsigned long sig, siginfo_t *info,
 	return ret;
 }
 
-void do_signal(struct pt_regs *regs)
+static void do_signal(struct pt_regs *regs)
 {
 	struct k_sigaction ka;
 	sigset_t *oldset;
diff --git a/arch/score/kernel/sys_score.c b/arch/score/kernel/sys_score.c
index 16ace29..5b3cc4e 100644
--- a/arch/score/kernel/sys_score.c
+++ b/arch/score/kernel/sys_score.c
@@ -34,7 +34,7 @@
 unsigned long shm_align_mask = PAGE_SIZE - 1;
 EXPORT_SYMBOL(shm_align_mask);
 
-asmlinkage unsigned long
+asmlinkage unsigned
 sys_mmap2(unsigned long addr, unsigned long len, unsigned long prot,
 	  unsigned long flags, unsigned long fd, unsigned long pgoff)
 {
@@ -66,7 +66,8 @@ sys_mmap2(unsigned long addr, unsigned long len, unsigned long prot,
  * Clone a task - this clones the calling program thread.
  * This is called indirectly via a small wrapper
  */
-int score_clone(struct pt_regs *regs)
+asmlinkage long
+score_clone(struct pt_regs *regs)
 {
 	unsigned long clone_flags;
 	unsigned long newsp;
diff --git a/arch/score/kernel/time.c b/arch/score/kernel/time.c
index cd66ba3..f0a43af 100644
--- a/arch/score/kernel/time.c
+++ b/arch/score/kernel/time.c
@@ -28,7 +28,7 @@
 
 #include <asm/scoreregs.h>
 
-irqreturn_t timer_interrupt(int irq, void *dev_id)
+static irqreturn_t timer_interrupt(int irq, void *dev_id)
 {
 	struct clock_event_device *evdev = dev_id;
 
-- 
1.6.3.1


^ permalink raw reply related	[flat|nested] 9+ messages in thread

* [PATCH 4/6] score: cleanups: dead code, 0 as pointer, shadowed variables
  2009-06-27 14:08 [PATCH 0/6] score cleanups Arnd Bergmann
                   ` (2 preceding siblings ...)
  2009-06-27 14:08 ` [PATCH 3/6] score: fix function prototypes Arnd Bergmann
@ 2009-06-27 14:08 ` Arnd Bergmann
  2009-06-27 14:08 ` [PATCH 5/6] score: make irq.h definitions local Arnd Bergmann
                   ` (2 subsequent siblings)
  6 siblings, 0 replies; 9+ messages in thread
From: Arnd Bergmann @ 2009-06-27 14:08 UTC (permalink / raw)
  To: liqin.chen; +Cc: linux-kernel, Arnd Bergmann

A few smaller issues found by sparse, some code that was
never used, two instances of '0' instead of 'NULL' and
local variables shadowing another one.

Signed-off-by: Arnd Bergmann <arnd@arndb.de>
---
 arch/score/kernel/module.c    |   12 ++++++------
 arch/score/kernel/signal.c    |    2 +-
 arch/score/kernel/sys_score.c |   14 +-------------
 3 files changed, 8 insertions(+), 20 deletions(-)

diff --git a/arch/score/kernel/module.c b/arch/score/kernel/module.c
index 1a62557..4de8d47 100644
--- a/arch/score/kernel/module.c
+++ b/arch/score/kernel/module.c
@@ -57,17 +57,17 @@ int apply_relocate(Elf_Shdr *sechdrs, const char *strtab,
 	for (i = 0; i < relsec->sh_size / sizeof(Elf32_Rel); i++, rel++) {
 		unsigned long loc;
 		Elf32_Sym *sym;
-		s32 offset;
+		s32 r_offset;
 
-		offset = ELF32_R_SYM(rel->r_info);
-		if ((offset < 0) ||
-		    (offset > (symsec->sh_size / sizeof(Elf32_Sym)))) {
+		r_offset = ELF32_R_SYM(rel->r_info);
+		if ((r_offset < 0) ||
+		    (r_offset > (symsec->sh_size / sizeof(Elf32_Sym)))) {
 			printk(KERN_ERR "%s: bad relocation, section %d reloc %d\n",
 				me->name, relindex, i);
 				return -ENOEXEC;
 		}
 
-		sym = ((Elf32_Sym *)symsec->sh_addr) + offset;
+		sym = ((Elf32_Sym *)symsec->sh_addr) + r_offset;
 
 		if ((rel->r_offset < 0) ||
 		    (rel->r_offset > dstsec->sh_size - sizeof(u32))) {
@@ -152,7 +152,7 @@ int apply_relocate_add(Elf_Shdr *sechdrs, const char *strtab,
 /* Given an address, look for it in the module exception tables. */
 const struct exception_table_entry *search_module_dbetables(unsigned long addr)
 {
-	return 0;
+	return NULL;
 }
 
 /* Put in dbe list if necessary. */
diff --git a/arch/score/kernel/signal.c b/arch/score/kernel/signal.c
index afbfe33..950f87c 100644
--- a/arch/score/kernel/signal.c
+++ b/arch/score/kernel/signal.c
@@ -212,7 +212,7 @@ static int setup_rt_frame(struct k_sigaction *ka, struct pt_regs *regs,
 
 	err |= copy_siginfo_to_user(&frame->rs_info, info);
 	err |= __put_user(0, &frame->rs_uc.uc_flags);
-	err |= __put_user(0, &frame->rs_uc.uc_link);
+	err |= __put_user(NULL, &frame->rs_uc.uc_link);
 	err |= __put_user((void __user *)current->sas_ss_sp,
 				&frame->rs_uc.uc_stack.ss_sp);
 	err |= __put_user(sas_ss_flags(regs->regs[0]),
diff --git a/arch/score/kernel/sys_score.c b/arch/score/kernel/sys_score.c
index 5b3cc4e..61aff8a 100644
--- a/arch/score/kernel/sys_score.c
+++ b/arch/score/kernel/sys_score.c
@@ -31,10 +31,7 @@
 #include <linux/syscalls.h>
 #include <asm/syscalls.h>
 
-unsigned long shm_align_mask = PAGE_SIZE - 1;
-EXPORT_SYMBOL(shm_align_mask);
-
-asmlinkage unsigned
+asmlinkage long 
 sys_mmap2(unsigned long addr, unsigned long len, unsigned long prot,
 	  unsigned long flags, unsigned long fd, unsigned long pgoff)
 {
@@ -107,15 +104,6 @@ score_execve(struct pt_regs *regs)
 }
 
 /*
- * If we ever come here the user sp is bad.  Zap the process right away.
- * Due to the bad stack signaling wouldn't work.
- */
-void bad_stack(void)
-{
-	do_exit(SIGSEGV);
-}
-
-/*
  * Do a system call from kernel instead of calling sys_execve so we
  * end up with proper pt_regs.
  */
-- 
1.6.3.1


^ permalink raw reply related	[flat|nested] 9+ messages in thread

* [PATCH 5/6] score: make irq.h definitions local
  2009-06-27 14:08 [PATCH 0/6] score cleanups Arnd Bergmann
                   ` (3 preceding siblings ...)
  2009-06-27 14:08 ` [PATCH 4/6] score: cleanups: dead code, 0 as pointer, shadowed variables Arnd Bergmann
@ 2009-06-27 14:08 ` Arnd Bergmann
  2009-06-27 14:08 ` [PATCH 6/6] score: clean up mm/init.c Arnd Bergmann
  2009-06-29 11:18 ` [PATCH 0/6] score cleanups liqin.chen
  6 siblings, 0 replies; 9+ messages in thread
From: Arnd Bergmann @ 2009-06-27 14:08 UTC (permalink / raw)
  To: liqin.chen; +Cc: linux-kernel, Arnd Bergmann

Some internal definitions of the interrupt controller are
only needed in irq.c, so move them out of the global irq.h
header. Also add proper __iomem annotations for sparse.

Signed-off-by: Arnd Bergmann <arnd@arndb.de>
---
 arch/score/include/asm/irq.h |   10 ----------
 arch/score/kernel/irq.c      |   33 +++++++++++++++++++++++----------
 2 files changed, 23 insertions(+), 20 deletions(-)

diff --git a/arch/score/include/asm/irq.h b/arch/score/include/asm/irq.h
index 401f670..6edd2a2 100644
--- a/arch/score/include/asm/irq.h
+++ b/arch/score/include/asm/irq.h
@@ -18,16 +18,6 @@
 
 #define irq_canonicalize(irq)	(irq)
 
-#define P_INT_PNDL		0x95F50000
-#define P_INT_PNDH		0x95F50004
-#define P_INT_PRIORITY_M	0x95F50008
-#define P_INT_PRIORITY_SG0	0x95F50010
-#define P_INT_PRIORITY_SG1	0x95F50014
-#define P_INT_PRIORITY_SG2	0x95F50018
-#define P_INT_PRIORITY_SG3	0x95F5001C
-#define P_INT_MASKL		0x95F50020
-#define P_INT_MASKH		0x95F50024
-
 #define IRQ_TIMER (7)		/* Timer IRQ number of SPCT6600 */
 
 #endif /* _ASM_SCORE_IRQ_H */
diff --git a/arch/score/kernel/irq.c b/arch/score/kernel/irq.c
index 55474e8..47647dd 100644
--- a/arch/score/kernel/irq.c
+++ b/arch/score/kernel/irq.c
@@ -29,6 +29,19 @@
 
 #include <asm/io.h>
 
+/* the interrupt controller is hardcoded at this address */
+#define SCORE_PIC		((u32 __iomem __force *)0x95F50000)
+
+#define INT_PNDL		0
+#define INT_PNDH		1
+#define INT_PRIORITY_M		2
+#define INT_PRIORITY_SG0	4
+#define INT_PRIORITY_SG1	5
+#define INT_PRIORITY_SG2	6
+#define INT_PRIORITY_SG3	7
+#define INT_MASKL		8
+#define INT_MASKH		9
+
 /*
  * handles all normal device IRQs
  */
@@ -44,11 +57,11 @@ static void score_mask(unsigned int irq_nr)
 	unsigned int irq_source = 63 - irq_nr;
 
 	if (irq_source < 32)
-		__raw_writel((__raw_readl((void *)P_INT_MASKL) | \
-			(1 << irq_source)), (void *)P_INT_MASKL);
+		__raw_writel((__raw_readl(SCORE_PIC + INT_MASKL) | \
+			(1 << irq_source)), SCORE_PIC + INT_MASKL);
 	else
-		__raw_writel((__raw_readl((void *)P_INT_MASKH) | \
-			(1 << (irq_source - 32))), (void *)P_INT_MASKH);
+		__raw_writel((__raw_readl(SCORE_PIC + INT_MASKH) | \
+			(1 << (irq_source - 32))), SCORE_PIC + INT_MASKH);
 }
 
 static void score_unmask(unsigned int irq_nr)
@@ -56,11 +69,11 @@ static void score_unmask(unsigned int irq_nr)
 	unsigned int irq_source = 63 - irq_nr;
 
 	if (irq_source < 32)
-		__raw_writel((__raw_readl((void *)P_INT_MASKL) & \
-			~(1 << irq_source)), (void *)P_INT_MASKL);
+		__raw_writel((__raw_readl(SCORE_PIC + INT_MASKL) & \
+			~(1 << irq_source)), SCORE_PIC + INT_MASKL);
 	else
-		__raw_writel((__raw_readl((void *)P_INT_MASKH) & \
-			~(1 << (irq_source - 32))), (void *)P_INT_MASKH);
+		__raw_writel((__raw_readl(SCORE_PIC + INT_MASKH) & \
+			~(1 << (irq_source - 32))), SCORE_PIC + INT_MASKH);
 }
 
 struct irq_chip score_irq_chip = {
@@ -88,8 +101,8 @@ void __init init_IRQ(void)
 		memcpy((void *)target_addr, \
 			interrupt_exception_vector, IRQ_VECTOR_SIZE);
 
-	__raw_writel(0xffffffff, (void *)P_INT_MASKL);
-	__raw_writel(0xffffffff, (void *)P_INT_MASKH);
+	__raw_writel(0xffffffff, SCORE_PIC + INT_MASKL);
+	__raw_writel(0xffffffff, SCORE_PIC + INT_MASKH);
 
 	__asm__ __volatile__(
 		"mtcr	%0, cr3\n\t"
-- 
1.6.3.1


^ permalink raw reply related	[flat|nested] 9+ messages in thread

* [PATCH 6/6] score: clean up mm/init.c
  2009-06-27 14:08 [PATCH 0/6] score cleanups Arnd Bergmann
                   ` (4 preceding siblings ...)
  2009-06-27 14:08 ` [PATCH 5/6] score: make irq.h definitions local Arnd Bergmann
@ 2009-06-27 14:08 ` Arnd Bergmann
  2009-06-29 11:18 ` [PATCH 0/6] score cleanups liqin.chen
  6 siblings, 0 replies; 9+ messages in thread
From: Arnd Bergmann @ 2009-06-27 14:08 UTC (permalink / raw)
  To: liqin.chen; +Cc: linux-kernel, Arnd Bergmann

score does not need multiple zero pages, because it does not
suffer from cache aliasing problems, so simplify that code.
Also make some functions static and include the appropriate
header files.

Signed-off-by: Arnd Bergmann <arnd@arndb.de>
---
 arch/score/mm/init.c |   34 ++++++++++------------------------
 1 files changed, 10 insertions(+), 24 deletions(-)

diff --git a/arch/score/mm/init.c b/arch/score/mm/init.c
index 7780eec..d496e9f 100644
--- a/arch/score/mm/init.c
+++ b/arch/score/mm/init.c
@@ -32,44 +32,30 @@
 #include <linux/pagemap.h>
 #include <linux/proc_fs.h>
 #include <linux/sched.h>
-#include <asm-generic/sections.h>
+#include <linux/initrd.h>
 
+#include <asm/sections.h>
 #include <asm/tlb.h>
 
 DEFINE_PER_CPU(struct mmu_gather, mmu_gathers);
 
-/*
- * We have up to 8 empty zeroed pages so we can map one of the right colour
- * when needed.
- */
-unsigned long zero_page_mask;
 unsigned long empty_zero_page;
 EXPORT_SYMBOL_GPL(empty_zero_page);
 
 static struct kcore_list kcore_mem, kcore_vmalloc;
 
-unsigned long setup_zero_pages(void)
+static unsigned long setup_zero_page(void)
 {
-	unsigned int order = 0;
-	unsigned long size;
 	struct page *page;
 
-	empty_zero_page = __get_free_pages(GFP_KERNEL | __GFP_ZERO, order);
+	empty_zero_page = __get_free_pages(GFP_KERNEL | __GFP_ZERO, 0);
 	if (!empty_zero_page)
 		panic("Oh boy, that early out of memory?");
 
 	page = virt_to_page((void *) empty_zero_page);
-	split_page(page, order);
-	while (page < virt_to_page((void *) (empty_zero_page +
-					     (PAGE_SIZE << order)))) {
-		SetPageReserved(page);
-		page++;
-	}
-
-	size = PAGE_SIZE << order;
-	zero_page_mask = (size - 1) & PAGE_MASK;
+	SetPageReserved(page);
 
-	return 1UL << order;
+	return 1UL;
 }
 
 #ifndef CONFIG_NEED_MULTIPLE_NODES
@@ -100,7 +86,7 @@ void __init mem_init(void)
 	max_mapnr = max_low_pfn;
 	high_memory = (void *) __va(max_low_pfn << PAGE_SHIFT);
 	totalram_pages += free_all_bootmem();
-	totalram_pages -= setup_zero_pages();	/* Setup zeroed pages. */
+	totalram_pages -= setup_zero_page();	/* Setup zeroed pages. */
 	reservedpages = 0;
 
 	for (tmp = 0; tmp < max_low_pfn; tmp++)
@@ -129,7 +115,7 @@ void __init mem_init(void)
 }
 #endif /* !CONFIG_NEED_MULTIPLE_NODES */
 
-void free_init_pages(const char *what, unsigned long begin, unsigned long end)
+static void free_init_pages(const char *what, unsigned long begin, unsigned long end)
 {
 	unsigned long pfn;
 
@@ -150,8 +136,8 @@ void free_init_pages(const char *what, unsigned long begin, unsigned long end)
 void free_initrd_mem(unsigned long start, unsigned long end)
 {
 	free_init_pages("initrd memory",
-	virt_to_phys((void *) start),
-	virt_to_phys((void *) end));
+		virt_to_phys((void *) start),
+		virt_to_phys((void *) end));
 }
 #endif
 
-- 
1.6.3.1


^ permalink raw reply related	[flat|nested] 9+ messages in thread

* Re: [PATCH 0/6] score cleanups
  2009-06-27 14:08 [PATCH 0/6] score cleanups Arnd Bergmann
                   ` (5 preceding siblings ...)
  2009-06-27 14:08 ` [PATCH 6/6] score: clean up mm/init.c Arnd Bergmann
@ 2009-06-29 11:18 ` liqin.chen
  2009-06-29 16:28   ` Arnd Bergmann
  6 siblings, 1 reply; 9+ messages in thread
From: liqin.chen @ 2009-06-29 11:18 UTC (permalink / raw)
  To: Arnd Bergmann; +Cc: linux-kernel

[-- Attachment #1: Type: text/plain, Size: 20077 bytes --]

Arnd Bergmann <arnd@arndb.de> 写于 2009-06-27 22:08:12:

> Hi Liqin,
> 
> I've gone over your code a bit with sparse and some clues,
> cleaning up some areas that stuck out.
> 
> Please check that these make sense.

Hi Arnd,

Code updating had finished and verified.

Best Regards
Liqin
---

From 05e9377257fcb80de597409989ef2cb715e3827c Mon Sep 17 00:00:00 2001
From: Chen Liqin <liqin.chen@sunplusct.com>
Date: Mon, 29 Jun 2009 19:01:44 +0800
Subject: [PATCH] score: code cleanups

        score: add missing #includes
        score: add address space annotations
        score: fix function prototypes
        score: cleanups: dead code, 0 as pointer, shadowed variables
        score: make irq.h definitions local
 
        modified:   arch/score/include/asm/irq.h
        modified:   arch/score/include/asm/uaccess.h
        new file:   arch/score/include/asm/ucontext.h
        modified:   arch/score/kernel/irq.c
        modified:   arch/score/kernel/module.c
        modified:   arch/score/kernel/process.c
        modified:   arch/score/kernel/ptrace.c
        modified:   arch/score/kernel/signal.c
        modified:   arch/score/kernel/sys_score.c
        modified:   arch/score/kernel/time.c
        modified:   arch/score/mm/init.c

Signed-off-by: Chen Liqin <liqin.chen@sunplusct.com>
Signed-off-by: Arnd Bergmann <arnd@arndb.de>
---
 arch/score/include/asm/irq.h      |   19 +++++++++--------
 arch/score/include/asm/uaccess.h  |    8 +++---
 arch/score/include/asm/ucontext.h |    6 +++++
 arch/score/kernel/irq.c           |   20 +++++++++---------
 arch/score/kernel/module.c        |   13 ++++++-----
 arch/score/kernel/process.c       |    3 ++
 arch/score/kernel/ptrace.c        |    7 +++--
 arch/score/kernel/signal.c        |   39 
++++++++++++++++++++----------------
 arch/score/kernel/sys_score.c     |   26 ++++++++----------------
 arch/score/kernel/time.c          |    2 +-
 arch/score/mm/init.c              |   35 ++++++++++----------------------
 11 files changed, 87 insertions(+), 91 deletions(-)
 create mode 100644 arch/score/include/asm/ucontext.h

diff --git a/arch/score/include/asm/irq.h b/arch/score/include/asm/irq.h
index 401f670..806aaf2 100644
--- a/arch/score/include/asm/irq.h
+++ b/arch/score/include/asm/irq.h
@@ -18,15 +18,16 @@
 
 #define irq_canonicalize(irq)  (irq)
 
-#define P_INT_PNDL             0x95F50000
-#define P_INT_PNDH             0x95F50004
-#define P_INT_PRIORITY_M       0x95F50008
-#define P_INT_PRIORITY_SG0     0x95F50010
-#define P_INT_PRIORITY_SG1     0x95F50014
-#define P_INT_PRIORITY_SG2     0x95F50018
-#define P_INT_PRIORITY_SG3     0x95F5001C
-#define P_INT_MASKL            0x95F50020
-#define P_INT_MASKH            0x95F50024
+#define INTC_BASE              ((u32 __iomem __force *)0x95f50000)
+#define INT_PNDL               0               /* 0x9f5c0000 */
+#define INT_PNDH               1               /* 0x9f5c0004 */
+#define INT_PRIORITY_M         2               /* 0x9f5c0008 */
+#define INT_PRIORITY_SG0       4               /* 0x9f5c0010 */
+#define INT_PRIORITY_SG1       5               /* 0x9f5c0014 */
+#define INT_PRIORITY_SG2       6               /* 0x9f5c0018 */
+#define INT_PRIORITY_SG3       7               /* 0x9f5c001C */
+#define INT_MASKL              8               /* 0x9f5c0020 */
+#define INT_MASKH              9               /* 0x9f5c0024 */
 
 #define IRQ_TIMER (7)          /* Timer IRQ number of SPCT6600 */
 
diff --git a/arch/score/include/asm/uaccess.h 
b/arch/score/include/asm/uaccess.h
index 43ce28a..98fdb6f 100644
--- a/arch/score/include/asm/uaccess.h
+++ b/arch/score/include/asm/uaccess.h
@@ -13,12 +13,12 @@ extern int fixup_exception(struct pt_regs *regs);
 #ifndef __ASSEMBLY__
 
 #define __range_ok(addr, size)                                 \
-       ((((unsigned long)(addr) >= 0x80000000)                 \
+       ((((unsigned long __force)(addr) >= 0x80000000)         \
        || ((unsigned long)(size) > 0x80000000)                 \
-       || (((unsigned long)(addr) + (unsigned long)(size)) > 
0x80000000)))
+       || (((unsigned long __force)(addr) + (unsigned long)(size)) \
+               > 0x80000000)))
 
-#define __access_ok(addr, size) \
-       (__range_ok((addr), (size)) == 0)
+#define __access_ok(addr, size)                (__range_ok((addr), 
(size)) == 0)
 
 #include <asm-generic/uaccess.h>
 
diff --git a/arch/score/include/asm/ucontext.h 
b/arch/score/include/asm/ucontext.h
new file mode 100644
index 0000000..9c5fe5b
--- /dev/null
+++ b/arch/score/include/asm/ucontext.h
@@ -0,0 +1,6 @@
+#ifndef _ASM_SCORE_UCONTEXT_H
+#define _ASM_SCORE_UCONTEXT_H
+
+#include <asm-generic/ucontext.h>
+
+#endif /* _ASM_SCORE_UCONTEXT_H */
diff --git a/arch/score/kernel/irq.c b/arch/score/kernel/irq.c
index 55474e8..3a7f155 100644
--- a/arch/score/kernel/irq.c
+++ b/arch/score/kernel/irq.c
@@ -44,11 +44,11 @@ static void score_mask(unsigned int irq_nr)
        unsigned int irq_source = 63 - irq_nr;
 
        if (irq_source < 32)
-               __raw_writel((__raw_readl((void *)P_INT_MASKL) | \
-                       (1 << irq_source)), (void *)P_INT_MASKL);
+               __raw_writel((__raw_readl(INTC_BASE + INT_MASKL) | \
+                       (1 << irq_source)), INTC_BASE + INT_MASKL);
        else
-               __raw_writel((__raw_readl((void *)P_INT_MASKH) | \
-                       (1 << (irq_source - 32))), (void *)P_INT_MASKH);
+               __raw_writel((__raw_readl(INTC_BASE + INT_MASKH) | \
+                       (1 << (irq_source - 32))), INTC_BASE + INT_MASKH);
 }
 
 static void score_unmask(unsigned int irq_nr)
@@ -56,11 +56,11 @@ static void score_unmask(unsigned int irq_nr)
        unsigned int irq_source = 63 - irq_nr;
 
        if (irq_source < 32)
-               __raw_writel((__raw_readl((void *)P_INT_MASKL) & \
-                       ~(1 << irq_source)), (void *)P_INT_MASKL);
+               __raw_writel((__raw_readl(INTC_BASE + INT_MASKL) & \
+                       ~(1 << irq_source)), INTC_BASE + INT_MASKL);
        else
-               __raw_writel((__raw_readl((void *)P_INT_MASKH) & \
-                       ~(1 << (irq_source - 32))), (void *)P_INT_MASKH);
+               __raw_writel((__raw_readl(INTC_BASE + INT_MASKH) & \
+                       ~(1 << (irq_source - 32))), INTC_BASE + 
INT_MASKH);
 }
 
 struct irq_chip score_irq_chip = {
@@ -88,8 +88,8 @@ void __init init_IRQ(void)
                memcpy((void *)target_addr, \
                        interrupt_exception_vector, IRQ_VECTOR_SIZE);
 
-       __raw_writel(0xffffffff, (void *)P_INT_MASKL);
-       __raw_writel(0xffffffff, (void *)P_INT_MASKH);
+       __raw_writel(0xffffffff, INTC_BASE + INT_MASKL);
+       __raw_writel(0xffffffff, INTC_BASE + INT_MASKH);
 
        __asm__ __volatile__(
                "mtcr   %0, cr3\n\t"
diff --git a/arch/score/kernel/module.c b/arch/score/kernel/module.c
index 4ffce7f..4de8d47 100644
--- a/arch/score/kernel/module.c
+++ b/arch/score/kernel/module.c
@@ -23,6 +23,7 @@
  * 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
  */
 
+#include <linux/moduleloader.h>
 #include <linux/module.h>
 #include <linux/vmalloc.h>
 
@@ -56,17 +57,17 @@ int apply_relocate(Elf_Shdr *sechdrs, const char 
*strtab,
        for (i = 0; i < relsec->sh_size / sizeof(Elf32_Rel); i++, rel++) {
                unsigned long loc;
                Elf32_Sym *sym;
-               s32 offset;
+               s32 r_offset;
 
-               offset = ELF32_R_SYM(rel->r_info);
-               if ((offset < 0) ||
-                   (offset > (symsec->sh_size / sizeof(Elf32_Sym)))) {
+               r_offset = ELF32_R_SYM(rel->r_info);
+               if ((r_offset < 0) ||
+                   (r_offset > (symsec->sh_size / sizeof(Elf32_Sym)))) {
                        printk(KERN_ERR "%s: bad relocation, section %d 
reloc %d\n",
                                me->name, relindex, i);
                                return -ENOEXEC;
                }
 
-               sym = ((Elf32_Sym *)symsec->sh_addr) + offset;
+               sym = ((Elf32_Sym *)symsec->sh_addr) + r_offset;
 
                if ((rel->r_offset < 0) ||
                    (rel->r_offset > dstsec->sh_size - sizeof(u32))) {
@@ -151,7 +152,7 @@ int apply_relocate_add(Elf_Shdr *sechdrs, const char 
*strtab,
 /* Given an address, look for it in the module exception tables. */
 const struct exception_table_entry *search_module_dbetables(unsigned long 
addr)
 {
-       return 0;
+       return NULL;
 }
 
 /* Put in dbe list if necessary. */
diff --git a/arch/score/kernel/process.c b/arch/score/kernel/process.c
index d93966f..84575b2 100644
--- a/arch/score/kernel/process.c
+++ b/arch/score/kernel/process.c
@@ -23,7 +23,10 @@
  * 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
  */
 
+#include <linux/elfcore.h>
 #include <linux/module.h>
+#include <linux/pm.h>
+#include <linux/reboot.h>
 
 void (*pm_power_off)(void);
 EXPORT_SYMBOL(pm_power_off);
diff --git a/arch/score/kernel/ptrace.c b/arch/score/kernel/ptrace.c
index 19911e3..897dd7c 100644
--- a/arch/score/kernel/ptrace.c
+++ b/arch/score/kernel/ptrace.c
@@ -267,6 +267,7 @@ long
 arch_ptrace(struct task_struct *child, long request, long addr, long 
data)
 {
        int ret;
+       unsigned long __user *datap = (void __user *)data;
 
        switch (request) {
        /* Read the word at location addr in the USER area.  */
@@ -316,7 +317,7 @@ arch_ptrace(struct task_struct *child, long request, 
long addr, long data)
                        return -EIO;
                }
 
-               ret = put_user(tmp, (unsigned long *) data);
+               ret = put_user(tmp, (unsigned long *) datap);
                return ret;
        }
 
@@ -355,11 +356,11 @@ arch_ptrace(struct task_struct *child, long request, 
long addr, long data)
        }
 
        case PTRACE_GETREGS:
-               ret = ptrace_getregs(child, (void __user *)data);
+               ret = ptrace_getregs(child, (void __user *)datap);
                break;
 
        case PTRACE_SETREGS:
-               ret = ptrace_setregs(child, (void __user *)data);
+               ret = ptrace_setregs(child, (void __user *)datap);
                break;
 
        default:
diff --git a/arch/score/kernel/signal.c b/arch/score/kernel/signal.c
index 5c00408..e351c02 100644
--- a/arch/score/kernel/signal.c
+++ b/arch/score/kernel/signal.c
@@ -27,7 +27,9 @@
 #include <linux/signal.h>
 #include <linux/unistd.h>
 #include <linux/uaccess.h>
-#include <asm-generic/ucontext.h>
+
+#include <asm/syscalls.h>
+#include <asm/ucontext.h>
 
 #include <asm/cacheflush.h>
 
@@ -40,7 +42,8 @@ struct rt_sigframe {
        struct ucontext rs_uc;
 };
 
-int setup_sigcontext(struct pt_regs *regs, struct sigcontext __user *sc)
+static int
+setup_sigcontext(struct pt_regs *regs, struct sigcontext __user *sc)
 {
        int err = 0;
        unsigned long reg;
@@ -74,7 +77,8 @@ int setup_sigcontext(struct pt_regs *regs, struct 
sigcontext __user *sc)
        return err;
 }
 
-int restore_sigcontext(struct pt_regs *regs, struct sigcontext __user 
*sc)
+static int
+restore_sigcontext(struct pt_regs *regs, struct sigcontext __user *sc)
 {
        int err = 0;
        u32 reg;
@@ -116,8 +120,8 @@ int restore_sigcontext(struct pt_regs *regs, struct 
sigcontext __user *sc)
 /*
  * Determine which stack to use..
  */
-void __user *get_sigframe(struct k_sigaction *ka, struct pt_regs *regs,
-                       size_t frame_size)
+static void __user *
+get_sigframe(struct k_sigaction *ka, struct pt_regs *regs, size_t 
frame_size)
 {
        unsigned long sp;
 
@@ -129,19 +133,19 @@ void __user *get_sigframe(struct k_sigaction *ka, 
struct pt_regs *regs,
        if ((ka->sa.sa_flags & SA_ONSTACK) && (!on_sig_stack(sp)))
                sp = current->sas_ss_sp + current->sas_ss_size;
 
-       return (void *)((sp - frame_size) & ~7);
+       return (void __user *)((sp - frame_size) & ~7);
 }
 
-int score_sigaltstack(struct pt_regs *regs)
+asmlinkage long score_sigaltstack(struct pt_regs *regs)
 {
-       const stack_t *uss = (const stack_t *) regs->regs[4];
-       stack_t *uoss = (stack_t *) regs->regs[5];
+       const stack_t __user *uss = (const stack_t __user *) 
regs->regs[4];
+       stack_t __user *uoss = (stack_t __user *) regs->regs[5];
        unsigned long usp = regs->regs[0];
 
        return do_sigaltstack(uss, uoss, usp);
 }
 
-void score_rt_sigreturn(struct pt_regs *regs)
+asmlinkage long score_rt_sigreturn(struct pt_regs *regs)
 {
        struct rt_sigframe __user *frame;
        sigset_t set;
@@ -181,12 +185,13 @@ void score_rt_sigreturn(struct pt_regs *regs)
 
 badframe:
        force_sig(SIGSEGV, current);
+       return 0;
 }
 
-int setup_rt_frame(struct k_sigaction *ka, struct pt_regs *regs,
-               int signr, sigset_t *set, siginfo_t *info)
+static int setup_rt_frame(struct k_sigaction *ka, struct pt_regs *regs,
+                       int signr, sigset_t *set, siginfo_t *info)
 {
-       struct rt_sigframe *frame;
+       struct rt_sigframe __user *frame;
        int err = 0;
 
        frame = get_sigframe(ka, regs, sizeof(*frame));
@@ -206,8 +211,8 @@ int setup_rt_frame(struct k_sigaction *ka, struct 
pt_regs *regs,
 
        err |= copy_siginfo_to_user(&frame->rs_info, info);
        err |= __put_user(0, &frame->rs_uc.uc_flags);
-       err |= __put_user(0, &frame->rs_uc.uc_link);
-       err |= __put_user((void *)current->sas_ss_sp,
+       err |= __put_user(NULL, &frame->rs_uc.uc_link);
+       err |= __put_user((void __user *)current->sas_ss_sp,
                                &frame->rs_uc.uc_stack.ss_sp);
        err |= __put_user(sas_ss_flags(regs->regs[0]),
                                &frame->rs_uc.uc_stack.ss_flags);
@@ -236,7 +241,7 @@ give_sigsegv:
        return -EFAULT;
 }
 
-int handle_signal(unsigned long sig, siginfo_t *info,
+static int handle_signal(unsigned long sig, siginfo_t *info,
        struct k_sigaction *ka, sigset_t *oldset, struct pt_regs *regs)
 {
        int ret;
@@ -276,7 +281,7 @@ int handle_signal(unsigned long sig, siginfo_t *info,
        return ret;
 }
 
-void do_signal(struct pt_regs *regs)
+static void do_signal(struct pt_regs *regs)
 {
        struct k_sigaction ka;
        sigset_t *oldset;
diff --git a/arch/score/kernel/sys_score.c b/arch/score/kernel/sys_score.c
index 3318861..c5a3fbc 100644
--- a/arch/score/kernel/sys_score.c
+++ b/arch/score/kernel/sys_score.c
@@ -27,12 +27,12 @@
 #include <linux/fs.h>
 #include <linux/mman.h>
 #include <linux/module.h>
+#include <linux/syscalls.h>
 #include <linux/unistd.h>
 
-unsigned long shm_align_mask = PAGE_SIZE - 1;
-EXPORT_SYMBOL(shm_align_mask);
+#include <asm/syscalls.h>
 
-asmlinkage unsigned long
+asmlinkage long
 sys_mmap2(unsigned long addr, unsigned long len, unsigned long prot,
          unsigned long flags, unsigned long fd, unsigned long pgoff)
 {
@@ -64,7 +64,7 @@ sys_mmap2(unsigned long addr, unsigned long len, 
unsigned long prot,
  * Clone a task - this clones the calling program thread.
  * This is called indirectly via a small wrapper
  */
-int score_clone(struct pt_regs *regs)
+asmlinkage long score_clone(struct pt_regs *regs)
 {
        unsigned long clone_flags;
        unsigned long newsp;
@@ -85,33 +85,25 @@ int score_clone(struct pt_regs *regs)
  * sys_execve() executes a new program.
  * This is called indirectly via a small wrapper
  */
-int score_execve(struct pt_regs *regs)
+asmlinkage long score_execve(struct pt_regs *regs)
 {
        int error;
        char *filename;
 
-       filename = getname((char *) (long) regs->regs[4]);
+       filename = getname((char __user *)regs->regs[4]);
        error = PTR_ERR(filename);
        if (IS_ERR(filename))
                return error;
 
-       error = do_execve(filename, (char **) (long) regs->regs[5],
-                         (char **) (long) regs->regs[6], regs);
+       error = do_execve(filename,
+                       (char __user * __user *)(long)regs->regs[5],
+                       (char __user * __user *)(long)regs->regs[6], 
regs);
 
        putname(filename);
        return error;
 }
 
 /*
- * If we ever come here the user sp is bad.  Zap the process right away.
- * Due to the bad stack signaling wouldn't work.
- */
-void bad_stack(void)
-{
-       do_exit(SIGSEGV);
-}
-
-/*
  * Do a system call from kernel instead of calling sys_execve so we
  * end up with proper pt_regs.
  */
diff --git a/arch/score/kernel/time.c b/arch/score/kernel/time.c
index cd66ba3..f0a43af 100644
--- a/arch/score/kernel/time.c
+++ b/arch/score/kernel/time.c
@@ -28,7 +28,7 @@
 
 #include <asm/scoreregs.h>
 
-irqreturn_t timer_interrupt(int irq, void *dev_id)
+static irqreturn_t timer_interrupt(int irq, void *dev_id)
 {
        struct clock_event_device *evdev = dev_id;
 
diff --git a/arch/score/mm/init.c b/arch/score/mm/init.c
index 7780eec..e5f6f2e 100644
--- a/arch/score/mm/init.c
+++ b/arch/score/mm/init.c
@@ -32,44 +32,30 @@
 #include <linux/pagemap.h>
 #include <linux/proc_fs.h>
 #include <linux/sched.h>
-#include <asm-generic/sections.h>
+#include <linux/initrd.h>
 
+#include <asm/sections.h>
 #include <asm/tlb.h>
 
 DEFINE_PER_CPU(struct mmu_gather, mmu_gathers);
 
-/*
- * We have up to 8 empty zeroed pages so we can map one of the right 
colour
- * when needed.
- */
-unsigned long zero_page_mask;
 unsigned long empty_zero_page;
 EXPORT_SYMBOL_GPL(empty_zero_page);
 
 static struct kcore_list kcore_mem, kcore_vmalloc;
 
-unsigned long setup_zero_pages(void)
+static unsigned long setup_zero_page(void)
 {
-       unsigned int order = 0;
-       unsigned long size;
        struct page *page;
 
-       empty_zero_page = __get_free_pages(GFP_KERNEL | __GFP_ZERO, 
order);
+       empty_zero_page = __get_free_pages(GFP_KERNEL | __GFP_ZERO, 0);
        if (!empty_zero_page)
                panic("Oh boy, that early out of memory?");
 
        page = virt_to_page((void *) empty_zero_page);
-       split_page(page, order);
-       while (page < virt_to_page((void *) (empty_zero_page +
-                                            (PAGE_SIZE << order)))) {
-               SetPageReserved(page);
-               page++;
-       }
-
-       size = PAGE_SIZE << order;
-       zero_page_mask = (size - 1) & PAGE_MASK;
+       SetPageReserved(page);
 
-       return 1UL << order;
+       return 1UL;
 }
 
 #ifndef CONFIG_NEED_MULTIPLE_NODES
@@ -100,7 +86,7 @@ void __init mem_init(void)
        max_mapnr = max_low_pfn;
        high_memory = (void *) __va(max_low_pfn << PAGE_SHIFT);
        totalram_pages += free_all_bootmem();
-       totalram_pages -= setup_zero_pages();   /* Setup zeroed pages. */
+       totalram_pages -= setup_zero_page();    /* Setup zeroed pages. */
        reservedpages = 0;
 
        for (tmp = 0; tmp < max_low_pfn; tmp++)
@@ -129,7 +115,8 @@ void __init mem_init(void)
 }
 #endif /* !CONFIG_NEED_MULTIPLE_NODES */
 
-void free_init_pages(const char *what, unsigned long begin, unsigned long 
end)
+static void
+free_init_pages(const char *what, unsigned long begin, unsigned long end)
 {
        unsigned long pfn;
 
@@ -150,8 +137,8 @@ void free_init_pages(const char *what, unsigned long 
begin, unsigned long end)
 void free_initrd_mem(unsigned long start, unsigned long end)
 {
        free_init_pages("initrd memory",
-       virt_to_phys((void *) start),
-       virt_to_phys((void *) end));
+                       virt_to_phys((void *) start),
+                       virt_to_phys((void *) end));
 }
 #endif
 
-- 
1.6.2




[-- Attachment #2: 0001-score-code-cleanups.patch --]
[-- Type: application/octet-stream, Size: 17013 bytes --]

From 05e9377257fcb80de597409989ef2cb715e3827c Mon Sep 17 00:00:00 2001
From: Chen Liqin <liqin.chen@sunplusct.com>
Date: Mon, 29 Jun 2009 19:01:44 +0800
Subject: [PATCH] score: code cleanups

	score: add missing #includes
	score: add address space annotations
	score: fix function prototypes
	score: cleanups: dead code, 0 as pointer, shadowed variables
	score: make irq.h definitions local
	
	modified:   arch/score/include/asm/irq.h
	modified:   arch/score/include/asm/uaccess.h
	new file:   arch/score/include/asm/ucontext.h
	modified:   arch/score/kernel/irq.c
	modified:   arch/score/kernel/module.c
	modified:   arch/score/kernel/process.c
	modified:   arch/score/kernel/ptrace.c
	modified:   arch/score/kernel/signal.c
	modified:   arch/score/kernel/sys_score.c
	modified:   arch/score/kernel/time.c
	modified:   arch/score/mm/init.c

Signed-off-by: Chen Liqin <liqin.chen@sunplusct.com>
Signed-off-by: Arnd Bergmann <arnd@arndb.de>
---
 arch/score/include/asm/irq.h      |   19 +++++++++--------
 arch/score/include/asm/uaccess.h  |    8 +++---
 arch/score/include/asm/ucontext.h |    6 +++++
 arch/score/kernel/irq.c           |   20 +++++++++---------
 arch/score/kernel/module.c        |   13 ++++++-----
 arch/score/kernel/process.c       |    3 ++
 arch/score/kernel/ptrace.c        |    7 +++--
 arch/score/kernel/signal.c        |   39 ++++++++++++++++++++----------------
 arch/score/kernel/sys_score.c     |   26 ++++++++----------------
 arch/score/kernel/time.c          |    2 +-
 arch/score/mm/init.c              |   35 ++++++++++----------------------
 11 files changed, 87 insertions(+), 91 deletions(-)
 create mode 100644 arch/score/include/asm/ucontext.h

diff --git a/arch/score/include/asm/irq.h b/arch/score/include/asm/irq.h
index 401f670..806aaf2 100644
--- a/arch/score/include/asm/irq.h
+++ b/arch/score/include/asm/irq.h
@@ -18,15 +18,16 @@
 
 #define irq_canonicalize(irq)	(irq)
 
-#define P_INT_PNDL		0x95F50000
-#define P_INT_PNDH		0x95F50004
-#define P_INT_PRIORITY_M	0x95F50008
-#define P_INT_PRIORITY_SG0	0x95F50010
-#define P_INT_PRIORITY_SG1	0x95F50014
-#define P_INT_PRIORITY_SG2	0x95F50018
-#define P_INT_PRIORITY_SG3	0x95F5001C
-#define P_INT_MASKL		0x95F50020
-#define P_INT_MASKH		0x95F50024
+#define INTC_BASE		((u32 __iomem __force *)0x95f50000)
+#define INT_PNDL		0		/* 0x9f5c0000 */
+#define INT_PNDH		1		/* 0x9f5c0004 */
+#define INT_PRIORITY_M		2		/* 0x9f5c0008 */
+#define INT_PRIORITY_SG0	4		/* 0x9f5c0010 */
+#define INT_PRIORITY_SG1	5		/* 0x9f5c0014 */
+#define INT_PRIORITY_SG2	6		/* 0x9f5c0018 */
+#define INT_PRIORITY_SG3	7		/* 0x9f5c001C */
+#define INT_MASKL		8		/* 0x9f5c0020 */
+#define INT_MASKH		9		/* 0x9f5c0024 */
 
 #define IRQ_TIMER (7)		/* Timer IRQ number of SPCT6600 */
 
diff --git a/arch/score/include/asm/uaccess.h b/arch/score/include/asm/uaccess.h
index 43ce28a..98fdb6f 100644
--- a/arch/score/include/asm/uaccess.h
+++ b/arch/score/include/asm/uaccess.h
@@ -13,12 +13,12 @@ extern int fixup_exception(struct pt_regs *regs);
 #ifndef __ASSEMBLY__
 
 #define __range_ok(addr, size)					\
-	((((unsigned long)(addr) >= 0x80000000)			\
+	((((unsigned long __force)(addr) >= 0x80000000)		\
 	|| ((unsigned long)(size) > 0x80000000)			\
-	|| (((unsigned long)(addr) + (unsigned long)(size)) > 0x80000000)))
+	|| (((unsigned long __force)(addr) + (unsigned long)(size)) \
+		> 0x80000000)))
 
-#define __access_ok(addr, size) \
-	(__range_ok((addr), (size)) == 0)
+#define __access_ok(addr, size)		(__range_ok((addr), (size)) == 0)
 
 #include <asm-generic/uaccess.h>
 
diff --git a/arch/score/include/asm/ucontext.h b/arch/score/include/asm/ucontext.h
new file mode 100644
index 0000000..9c5fe5b
--- /dev/null
+++ b/arch/score/include/asm/ucontext.h
@@ -0,0 +1,6 @@
+#ifndef _ASM_SCORE_UCONTEXT_H
+#define _ASM_SCORE_UCONTEXT_H
+
+#include <asm-generic/ucontext.h>
+
+#endif /* _ASM_SCORE_UCONTEXT_H */
diff --git a/arch/score/kernel/irq.c b/arch/score/kernel/irq.c
index 55474e8..3a7f155 100644
--- a/arch/score/kernel/irq.c
+++ b/arch/score/kernel/irq.c
@@ -44,11 +44,11 @@ static void score_mask(unsigned int irq_nr)
 	unsigned int irq_source = 63 - irq_nr;
 
 	if (irq_source < 32)
-		__raw_writel((__raw_readl((void *)P_INT_MASKL) | \
-			(1 << irq_source)), (void *)P_INT_MASKL);
+		__raw_writel((__raw_readl(INTC_BASE + INT_MASKL) | \
+			(1 << irq_source)), INTC_BASE + INT_MASKL);
 	else
-		__raw_writel((__raw_readl((void *)P_INT_MASKH) | \
-			(1 << (irq_source - 32))), (void *)P_INT_MASKH);
+		__raw_writel((__raw_readl(INTC_BASE + INT_MASKH) | \
+			(1 << (irq_source - 32))), INTC_BASE + INT_MASKH);
 }
 
 static void score_unmask(unsigned int irq_nr)
@@ -56,11 +56,11 @@ static void score_unmask(unsigned int irq_nr)
 	unsigned int irq_source = 63 - irq_nr;
 
 	if (irq_source < 32)
-		__raw_writel((__raw_readl((void *)P_INT_MASKL) & \
-			~(1 << irq_source)), (void *)P_INT_MASKL);
+		__raw_writel((__raw_readl(INTC_BASE + INT_MASKL) & \
+			~(1 << irq_source)), INTC_BASE + INT_MASKL);
 	else
-		__raw_writel((__raw_readl((void *)P_INT_MASKH) & \
-			~(1 << (irq_source - 32))), (void *)P_INT_MASKH);
+		__raw_writel((__raw_readl(INTC_BASE + INT_MASKH) & \
+			~(1 << (irq_source - 32))), INTC_BASE + INT_MASKH);
 }
 
 struct irq_chip score_irq_chip = {
@@ -88,8 +88,8 @@ void __init init_IRQ(void)
 		memcpy((void *)target_addr, \
 			interrupt_exception_vector, IRQ_VECTOR_SIZE);
 
-	__raw_writel(0xffffffff, (void *)P_INT_MASKL);
-	__raw_writel(0xffffffff, (void *)P_INT_MASKH);
+	__raw_writel(0xffffffff, INTC_BASE + INT_MASKL);
+	__raw_writel(0xffffffff, INTC_BASE + INT_MASKH);
 
 	__asm__ __volatile__(
 		"mtcr	%0, cr3\n\t"
diff --git a/arch/score/kernel/module.c b/arch/score/kernel/module.c
index 4ffce7f..4de8d47 100644
--- a/arch/score/kernel/module.c
+++ b/arch/score/kernel/module.c
@@ -23,6 +23,7 @@
  * 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
  */
 
+#include <linux/moduleloader.h>
 #include <linux/module.h>
 #include <linux/vmalloc.h>
 
@@ -56,17 +57,17 @@ int apply_relocate(Elf_Shdr *sechdrs, const char *strtab,
 	for (i = 0; i < relsec->sh_size / sizeof(Elf32_Rel); i++, rel++) {
 		unsigned long loc;
 		Elf32_Sym *sym;
-		s32 offset;
+		s32 r_offset;
 
-		offset = ELF32_R_SYM(rel->r_info);
-		if ((offset < 0) ||
-		    (offset > (symsec->sh_size / sizeof(Elf32_Sym)))) {
+		r_offset = ELF32_R_SYM(rel->r_info);
+		if ((r_offset < 0) ||
+		    (r_offset > (symsec->sh_size / sizeof(Elf32_Sym)))) {
 			printk(KERN_ERR "%s: bad relocation, section %d reloc %d\n",
 				me->name, relindex, i);
 				return -ENOEXEC;
 		}
 
-		sym = ((Elf32_Sym *)symsec->sh_addr) + offset;
+		sym = ((Elf32_Sym *)symsec->sh_addr) + r_offset;
 
 		if ((rel->r_offset < 0) ||
 		    (rel->r_offset > dstsec->sh_size - sizeof(u32))) {
@@ -151,7 +152,7 @@ int apply_relocate_add(Elf_Shdr *sechdrs, const char *strtab,
 /* Given an address, look for it in the module exception tables. */
 const struct exception_table_entry *search_module_dbetables(unsigned long addr)
 {
-	return 0;
+	return NULL;
 }
 
 /* Put in dbe list if necessary. */
diff --git a/arch/score/kernel/process.c b/arch/score/kernel/process.c
index d93966f..84575b2 100644
--- a/arch/score/kernel/process.c
+++ b/arch/score/kernel/process.c
@@ -23,7 +23,10 @@
  * 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
  */
 
+#include <linux/elfcore.h>
 #include <linux/module.h>
+#include <linux/pm.h>
+#include <linux/reboot.h>
 
 void (*pm_power_off)(void);
 EXPORT_SYMBOL(pm_power_off);
diff --git a/arch/score/kernel/ptrace.c b/arch/score/kernel/ptrace.c
index 19911e3..897dd7c 100644
--- a/arch/score/kernel/ptrace.c
+++ b/arch/score/kernel/ptrace.c
@@ -267,6 +267,7 @@ long
 arch_ptrace(struct task_struct *child, long request, long addr, long data)
 {
 	int ret;
+	unsigned long __user *datap = (void __user *)data;
 
 	switch (request) {
 	/* Read the word at location addr in the USER area.  */
@@ -316,7 +317,7 @@ arch_ptrace(struct task_struct *child, long request, long addr, long data)
 			return -EIO;
 		}
 
-		ret = put_user(tmp, (unsigned long *) data);
+		ret = put_user(tmp, (unsigned long *) datap);
 		return ret;
 	}
 
@@ -355,11 +356,11 @@ arch_ptrace(struct task_struct *child, long request, long addr, long data)
 	}
 
 	case PTRACE_GETREGS:
-		ret = ptrace_getregs(child, (void __user *)data);
+		ret = ptrace_getregs(child, (void __user *)datap);
 		break;
 
 	case PTRACE_SETREGS:
-		ret = ptrace_setregs(child, (void __user *)data);
+		ret = ptrace_setregs(child, (void __user *)datap);
 		break;
 
 	default:
diff --git a/arch/score/kernel/signal.c b/arch/score/kernel/signal.c
index 5c00408..e351c02 100644
--- a/arch/score/kernel/signal.c
+++ b/arch/score/kernel/signal.c
@@ -27,7 +27,9 @@
 #include <linux/signal.h>
 #include <linux/unistd.h>
 #include <linux/uaccess.h>
-#include <asm-generic/ucontext.h>
+
+#include <asm/syscalls.h>
+#include <asm/ucontext.h>
 
 #include <asm/cacheflush.h>
 
@@ -40,7 +42,8 @@ struct rt_sigframe {
 	struct ucontext rs_uc;
 };
 
-int setup_sigcontext(struct pt_regs *regs, struct sigcontext __user *sc)
+static int
+setup_sigcontext(struct pt_regs *regs, struct sigcontext __user *sc)
 {
 	int err = 0;
 	unsigned long reg;
@@ -74,7 +77,8 @@ int setup_sigcontext(struct pt_regs *regs, struct sigcontext __user *sc)
 	return err;
 }
 
-int restore_sigcontext(struct pt_regs *regs, struct sigcontext __user *sc)
+static int
+restore_sigcontext(struct pt_regs *regs, struct sigcontext __user *sc)
 {
 	int err = 0;
 	u32 reg;
@@ -116,8 +120,8 @@ int restore_sigcontext(struct pt_regs *regs, struct sigcontext __user *sc)
 /*
  * Determine which stack to use..
  */
-void __user *get_sigframe(struct k_sigaction *ka, struct pt_regs *regs,
-			size_t frame_size)
+static void __user *
+get_sigframe(struct k_sigaction *ka, struct pt_regs *regs, size_t frame_size)
 {
 	unsigned long sp;
 
@@ -129,19 +133,19 @@ void __user *get_sigframe(struct k_sigaction *ka, struct pt_regs *regs,
 	if ((ka->sa.sa_flags & SA_ONSTACK) && (!on_sig_stack(sp)))
 		sp = current->sas_ss_sp + current->sas_ss_size;
 
-	return (void *)((sp - frame_size) & ~7);
+	return (void __user *)((sp - frame_size) & ~7);
 }
 
-int score_sigaltstack(struct pt_regs *regs)
+asmlinkage long score_sigaltstack(struct pt_regs *regs)
 {
-	const stack_t *uss = (const stack_t *) regs->regs[4];
-	stack_t *uoss = (stack_t *) regs->regs[5];
+	const stack_t __user *uss = (const stack_t __user *) regs->regs[4];
+	stack_t __user *uoss = (stack_t __user *) regs->regs[5];
 	unsigned long usp = regs->regs[0];
 
 	return do_sigaltstack(uss, uoss, usp);
 }
 
-void score_rt_sigreturn(struct pt_regs *regs)
+asmlinkage long score_rt_sigreturn(struct pt_regs *regs)
 {
 	struct rt_sigframe __user *frame;
 	sigset_t set;
@@ -181,12 +185,13 @@ void score_rt_sigreturn(struct pt_regs *regs)
 
 badframe:
 	force_sig(SIGSEGV, current);
+	return 0;
 }
 
-int setup_rt_frame(struct k_sigaction *ka, struct pt_regs *regs,
-		int signr, sigset_t *set, siginfo_t *info)
+static int setup_rt_frame(struct k_sigaction *ka, struct pt_regs *regs,
+			int signr, sigset_t *set, siginfo_t *info)
 {
-	struct rt_sigframe *frame;
+	struct rt_sigframe __user *frame;
 	int err = 0;
 
 	frame = get_sigframe(ka, regs, sizeof(*frame));
@@ -206,8 +211,8 @@ int setup_rt_frame(struct k_sigaction *ka, struct pt_regs *regs,
 
 	err |= copy_siginfo_to_user(&frame->rs_info, info);
 	err |= __put_user(0, &frame->rs_uc.uc_flags);
-	err |= __put_user(0, &frame->rs_uc.uc_link);
-	err |= __put_user((void *)current->sas_ss_sp,
+	err |= __put_user(NULL, &frame->rs_uc.uc_link);
+	err |= __put_user((void __user *)current->sas_ss_sp,
 				&frame->rs_uc.uc_stack.ss_sp);
 	err |= __put_user(sas_ss_flags(regs->regs[0]),
 				&frame->rs_uc.uc_stack.ss_flags);
@@ -236,7 +241,7 @@ give_sigsegv:
 	return -EFAULT;
 }
 
-int handle_signal(unsigned long sig, siginfo_t *info,
+static int handle_signal(unsigned long sig, siginfo_t *info,
 	struct k_sigaction *ka, sigset_t *oldset, struct pt_regs *regs)
 {
 	int ret;
@@ -276,7 +281,7 @@ int handle_signal(unsigned long sig, siginfo_t *info,
 	return ret;
 }
 
-void do_signal(struct pt_regs *regs)
+static void do_signal(struct pt_regs *regs)
 {
 	struct k_sigaction ka;
 	sigset_t *oldset;
diff --git a/arch/score/kernel/sys_score.c b/arch/score/kernel/sys_score.c
index 3318861..c5a3fbc 100644
--- a/arch/score/kernel/sys_score.c
+++ b/arch/score/kernel/sys_score.c
@@ -27,12 +27,12 @@
 #include <linux/fs.h>
 #include <linux/mman.h>
 #include <linux/module.h>
+#include <linux/syscalls.h>
 #include <linux/unistd.h>
 
-unsigned long shm_align_mask = PAGE_SIZE - 1;
-EXPORT_SYMBOL(shm_align_mask);
+#include <asm/syscalls.h>
 
-asmlinkage unsigned long
+asmlinkage long
 sys_mmap2(unsigned long addr, unsigned long len, unsigned long prot,
 	  unsigned long flags, unsigned long fd, unsigned long pgoff)
 {
@@ -64,7 +64,7 @@ sys_mmap2(unsigned long addr, unsigned long len, unsigned long prot,
  * Clone a task - this clones the calling program thread.
  * This is called indirectly via a small wrapper
  */
-int score_clone(struct pt_regs *regs)
+asmlinkage long score_clone(struct pt_regs *regs)
 {
 	unsigned long clone_flags;
 	unsigned long newsp;
@@ -85,33 +85,25 @@ int score_clone(struct pt_regs *regs)
  * sys_execve() executes a new program.
  * This is called indirectly via a small wrapper
  */
-int score_execve(struct pt_regs *regs)
+asmlinkage long score_execve(struct pt_regs *regs)
 {
 	int error;
 	char *filename;
 
-	filename = getname((char *) (long) regs->regs[4]);
+	filename = getname((char __user *)regs->regs[4]);
 	error = PTR_ERR(filename);
 	if (IS_ERR(filename))
 		return error;
 
-	error = do_execve(filename, (char **) (long) regs->regs[5],
-			  (char **) (long) regs->regs[6], regs);
+	error = do_execve(filename,
+			(char __user * __user *)(long)regs->regs[5],
+			(char __user * __user *)(long)regs->regs[6], regs);
 
 	putname(filename);
 	return error;
 }
 
 /*
- * If we ever come here the user sp is bad.  Zap the process right away.
- * Due to the bad stack signaling wouldn't work.
- */
-void bad_stack(void)
-{
-	do_exit(SIGSEGV);
-}
-
-/*
  * Do a system call from kernel instead of calling sys_execve so we
  * end up with proper pt_regs.
  */
diff --git a/arch/score/kernel/time.c b/arch/score/kernel/time.c
index cd66ba3..f0a43af 100644
--- a/arch/score/kernel/time.c
+++ b/arch/score/kernel/time.c
@@ -28,7 +28,7 @@
 
 #include <asm/scoreregs.h>
 
-irqreturn_t timer_interrupt(int irq, void *dev_id)
+static irqreturn_t timer_interrupt(int irq, void *dev_id)
 {
 	struct clock_event_device *evdev = dev_id;
 
diff --git a/arch/score/mm/init.c b/arch/score/mm/init.c
index 7780eec..e5f6f2e 100644
--- a/arch/score/mm/init.c
+++ b/arch/score/mm/init.c
@@ -32,44 +32,30 @@
 #include <linux/pagemap.h>
 #include <linux/proc_fs.h>
 #include <linux/sched.h>
-#include <asm-generic/sections.h>
+#include <linux/initrd.h>
 
+#include <asm/sections.h>
 #include <asm/tlb.h>
 
 DEFINE_PER_CPU(struct mmu_gather, mmu_gathers);
 
-/*
- * We have up to 8 empty zeroed pages so we can map one of the right colour
- * when needed.
- */
-unsigned long zero_page_mask;
 unsigned long empty_zero_page;
 EXPORT_SYMBOL_GPL(empty_zero_page);
 
 static struct kcore_list kcore_mem, kcore_vmalloc;
 
-unsigned long setup_zero_pages(void)
+static unsigned long setup_zero_page(void)
 {
-	unsigned int order = 0;
-	unsigned long size;
 	struct page *page;
 
-	empty_zero_page = __get_free_pages(GFP_KERNEL | __GFP_ZERO, order);
+	empty_zero_page = __get_free_pages(GFP_KERNEL | __GFP_ZERO, 0);
 	if (!empty_zero_page)
 		panic("Oh boy, that early out of memory?");
 
 	page = virt_to_page((void *) empty_zero_page);
-	split_page(page, order);
-	while (page < virt_to_page((void *) (empty_zero_page +
-					     (PAGE_SIZE << order)))) {
-		SetPageReserved(page);
-		page++;
-	}
-
-	size = PAGE_SIZE << order;
-	zero_page_mask = (size - 1) & PAGE_MASK;
+	SetPageReserved(page);
 
-	return 1UL << order;
+	return 1UL;
 }
 
 #ifndef CONFIG_NEED_MULTIPLE_NODES
@@ -100,7 +86,7 @@ void __init mem_init(void)
 	max_mapnr = max_low_pfn;
 	high_memory = (void *) __va(max_low_pfn << PAGE_SHIFT);
 	totalram_pages += free_all_bootmem();
-	totalram_pages -= setup_zero_pages();	/* Setup zeroed pages. */
+	totalram_pages -= setup_zero_page();	/* Setup zeroed pages. */
 	reservedpages = 0;
 
 	for (tmp = 0; tmp < max_low_pfn; tmp++)
@@ -129,7 +115,8 @@ void __init mem_init(void)
 }
 #endif /* !CONFIG_NEED_MULTIPLE_NODES */
 
-void free_init_pages(const char *what, unsigned long begin, unsigned long end)
+static void
+free_init_pages(const char *what, unsigned long begin, unsigned long end)
 {
 	unsigned long pfn;
 
@@ -150,8 +137,8 @@ void free_init_pages(const char *what, unsigned long begin, unsigned long end)
 void free_initrd_mem(unsigned long start, unsigned long end)
 {
 	free_init_pages("initrd memory",
-	virt_to_phys((void *) start),
-	virt_to_phys((void *) end));
+			virt_to_phys((void *) start),
+			virt_to_phys((void *) end));
 }
 #endif
 
-- 
1.6.2


^ permalink raw reply related	[flat|nested] 9+ messages in thread

* Re: [PATCH 0/6] score cleanups
  2009-06-29 11:18 ` [PATCH 0/6] score cleanups liqin.chen
@ 2009-06-29 16:28   ` Arnd Bergmann
  0 siblings, 0 replies; 9+ messages in thread
From: Arnd Bergmann @ 2009-06-29 16:28 UTC (permalink / raw)
  To: liqin.chen; +Cc: linux-kernel

On Monday 29 June 2009, liqin.chen@sunplusct.com wrote:
> Arnd Bergmann <arnd@arndb.de> 写于 2009-06-27 22:08:12:
> 
> > Hi Liqin,
> > 
> > I've gone over your code a bit with sparse and some clues,
> > cleaning up some areas that stuck out.
> > 
> > Please check that these make sense.
> 
> Hi Arnd,
> 
> Code updating had finished and verified.

Ok, I've pushed out my original patches now. Unfortunately,
the way you sent back the patches was not helpful. Your mail
client still suffers from line-wrapping, which makes it impossible
to apply and you dropped all the changelog entries that I wrote.

It took me longer to split the changes into logical patches
with an appropriate changelog, so they really should not
be merged again. If you don't have a comment for the patches,
a better action would have been to reply with 'Acked-by: 
Chen Liqin <liqin.chen@sunplusct.com>'.

> 
> Signed-off-by: Chen Liqin <liqin.chen@sunplusct.com>
> Signed-off-by: Arnd Bergmann <arnd@arndb.de>

Here you mixed up the order of the 'Signed-off-by:'-lines.
If you forward a patch from someone else, you should always
put your own S-O-B after all the the others, not before them.
of(u32))) {

> @@ -151,7 +152,7 @@ int apply_relocate_add(Elf_Shdr *sechdrs, const char 
> *strtab,
>  /* Given an address, look for it in the module exception tables. */
>  const struct exception_table_entry *search_module_dbetables(unsigned long 
> addr)

This is one example of how the line wrapping broke the patch. It's basically
impossible to apply and test if the patch is broken like this.

	Arnd <><

^ permalink raw reply	[flat|nested] 9+ messages in thread

end of thread, other threads:[~2009-06-29 16:29 UTC | newest]

Thread overview: 9+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2009-06-27 14:08 [PATCH 0/6] score cleanups Arnd Bergmann
2009-06-27 14:08 ` [PATCH 1/6] score: add missing #includes Arnd Bergmann
2009-06-27 14:08 ` [PATCH 2/6] score: add address space annotations Arnd Bergmann
2009-06-27 14:08 ` [PATCH 3/6] score: fix function prototypes Arnd Bergmann
2009-06-27 14:08 ` [PATCH 4/6] score: cleanups: dead code, 0 as pointer, shadowed variables Arnd Bergmann
2009-06-27 14:08 ` [PATCH 5/6] score: make irq.h definitions local Arnd Bergmann
2009-06-27 14:08 ` [PATCH 6/6] score: clean up mm/init.c Arnd Bergmann
2009-06-29 11:18 ` [PATCH 0/6] score cleanups liqin.chen
2009-06-29 16:28   ` Arnd Bergmann

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox