From: Hirokazu Takata Miscellaneous upgrade for recent m32r kernel changes. * arch/m32r/kernel/entry.S: Add system calls; taken from asm-i386/unistd.h. - [PATCH][2/6] perfctr-2.7.3 for 2.6.7-rc1-mm1: i386 (05/31/2004) - [PATCH] Make key management use syscalls not prctls (09/06/2004) * arch/m32r/kernel/io_m32102.c: Remove. This file is no longer used. Please remove this file. * arch/m32r/kernel/irq.c: - Fix the unnecessary entropy call in the irq handler. * arch/m32r/kernel/signal.c: - Merge common signal handling fault handling in generic code; use force_sigsegv() instead of force_sig(). * arch/m32r/kernel/smp.c: - Just add brackets. * include/asm-m32r/hardirq.h: - factor out common code Signed-off-by: Hirokazu Takata Signed-off-by: Andrew Morton --- 25-akpm/arch/m32r/kernel/entry.S | 10 ++++++++++ 25-akpm/arch/m32r/kernel/irq.c | 8 +++++--- 25-akpm/arch/m32r/kernel/signal.c | 11 ++--------- 25-akpm/arch/m32r/kernel/smp.c | 3 ++- 25-akpm/include/asm-m32r/hardirq.h | 30 +++++------------------------- 5 files changed, 24 insertions(+), 38 deletions(-) diff -puN arch/m32r/kernel/entry.S~m32r-architecture-upgrade-on-20040928 arch/m32r/kernel/entry.S --- 25/arch/m32r/kernel/entry.S~m32r-architecture-upgrade-on-20040928 Thu Sep 30 16:23:54 2004 +++ 25-akpm/arch/m32r/kernel/entry.S Thu Sep 30 16:23:54 2004 @@ -992,6 +992,16 @@ ENTRY(sys_call_table) .long sys_mq_notify .long sys_mq_getsetattr .long sys_ni_syscall /* reserved for kexec */ + .long sys_waitid + .long sys_perfctr_info + .long sys_vperfctr_open + .long sys_vperfctr_control + .long sys_vperfctr_unlink + .long sys_vperfctr_iresume + .long sys_vperfctr_read /* 290 */ + .long sys_add_key + .long sys_request_key + .long sys_keyctl syscall_table_size=(.-sys_call_table) diff -puN arch/m32r/kernel/irq.c~m32r-architecture-upgrade-on-20040928 arch/m32r/kernel/irq.c --- 25/arch/m32r/kernel/irq.c~m32r-architecture-upgrade-on-20040928 Thu Sep 30 16:23:54 2004 +++ 25-akpm/arch/m32r/kernel/irq.c Thu Sep 30 16:23:54 2004 @@ -187,15 +187,17 @@ int handle_IRQ_event(unsigned int irq, struct pt_regs *regs, struct irqaction *action) { int status = 1; /* Force the "do bottom halves" bit */ - int retval = 0; + int ret, retval = 0; if (!(action->flags & SA_INTERRUPT)) local_irq_enable(); do { - status |= action->flags; - retval |= action->handler(irq, action->dev_id, regs); + ret = action->handler(irq, action->dev_id, regs); + if (ret == IRQ_HANDLED) + status |= action->flags; action = action->next; + retval |= ret; } while (action); if (status & SA_SAMPLE_RANDOM) add_interrupt_randomness(irq); diff -puN arch/m32r/kernel/signal.c~m32r-architecture-upgrade-on-20040928 arch/m32r/kernel/signal.c --- 25/arch/m32r/kernel/signal.c~m32r-architecture-upgrade-on-20040928 Thu Sep 30 16:23:54 2004 +++ 25-akpm/arch/m32r/kernel/signal.c Thu Sep 30 16:23:54 2004 @@ -404,9 +404,7 @@ static void setup_frame(int sig, struct return; give_sigsegv: - if (sig == SIGSEGV) - ka->sa.sa_handler = SIG_DFL; - force_sig(SIGSEGV, current); + force_sigsegv(sig, current); } static void setup_rt_frame(int sig, struct k_sigaction *ka, siginfo_t *info, @@ -482,9 +480,7 @@ static void setup_rt_frame(int sig, stru return; give_sigsegv: - if (sig == SIGSEGV) - ka->sa.sa_handler = SIG_DFL; - force_sig(SIGSEGV, current); + force_sigsegv(sig, current); } /* @@ -528,9 +524,6 @@ handle_signal(unsigned long sig, struct else setup_frame(sig, ka, oldset, regs); - if (ka->sa.sa_flags & SA_ONESHOT) - ka->sa.sa_handler = SIG_DFL; - if (!(ka->sa.sa_flags & SA_NODEFER)) { spin_lock_irq(¤t->sighand->siglock); sigorsets(¤t->blocked,¤t->blocked,&ka->sa.sa_mask); diff -puN arch/m32r/kernel/smp.c~m32r-architecture-upgrade-on-20040928 arch/m32r/kernel/smp.c --- 25/arch/m32r/kernel/smp.c~m32r-architecture-upgrade-on-20040928 Thu Sep 30 16:23:54 2004 +++ 25-akpm/arch/m32r/kernel/smp.c Thu Sep 30 16:23:54 2004 @@ -441,9 +441,10 @@ static void flush_tlb_others(cpumask_t c */ send_IPI_mask(cpumask, INVALIDATE_TLB_IPI, 0); - while (!cpus_empty(flush_cpumask)) + while (!cpus_empty(flush_cpumask)) { /* nothing. lockup detection does not belong here */ mb(); + } flush_mm = NULL; flush_vma = NULL; diff -puN include/asm-m32r/hardirq.h~m32r-architecture-upgrade-on-20040928 include/asm-m32r/hardirq.h --- 25/include/asm-m32r/hardirq.h~m32r-architecture-upgrade-on-20040928 Thu Sep 30 16:23:54 2004 +++ 25-akpm/include/asm-m32r/hardirq.h Thu Sep 30 16:23:54 2004 @@ -30,7 +30,12 @@ typedef struct { #define PREEMPT_BITS 8 #define SOFTIRQ_BITS 8 + +#if NR_IRQS > 256 +#define HARDIRQ_BITS 9 +#else #define HARDIRQ_BITS 8 +#endif #define PREEMPT_SHIFT 0 #define SOFTIRQ_SHIFT (PREEMPT_SHIFT + PREEMPT_BITS) @@ -45,29 +50,10 @@ typedef struct { # error HARDIRQ_BITS is too low! #endif -/* - * Are we doing bottom half or hardware interrupt processing? - * Are we in a softirq context? Interrupt context? - */ -#define in_irq() (hardirq_count()) -#define in_softirq() (softirq_count()) -#define in_interrupt() (irq_count()) - - -#define hardirq_trylock() (!in_interrupt()) -#define hardirq_endlock() do { } while (0) - #define irq_enter() (preempt_count() += HARDIRQ_OFFSET) #define nmi_enter() (irq_enter()) #define nmi_exit() (preempt_count() -= HARDIRQ_OFFSET) -#ifdef CONFIG_PREEMPT -# define in_atomic() ((preempt_count() & ~PREEMPT_ACTIVE) != kernel_locked()) -# define IRQ_EXIT_OFFSET (HARDIRQ_OFFSET-1) -#else -# define in_atomic() (preempt_count() != 0) -# define IRQ_EXIT_OFFSET HARDIRQ_OFFSET -#endif #define irq_exit() \ do { \ preempt_count() -= IRQ_EXIT_OFFSET; \ @@ -76,10 +62,4 @@ do { \ preempt_enable_no_resched(); \ } while (0) -#ifndef CONFIG_SMP -# define synchronize_irq(irq) barrier() -#else - extern void synchronize_irq(unsigned int irq); -#endif /* CONFIG_SMP */ - #endif /* __ASM_HARDIRQ_H */ _