Index: arch/v850/kernel/entry.S =================================================================== RCS file: /var/cvs/uClinux-2.4.x/arch/v850/kernel/entry.S,v retrieving revision 1.4 diff -u -r1.4 entry.S --- arch/v850/kernel/entry.S 2002/03/26 06:51:28 1.4 +++ arch/v850/kernel/entry.S 2002/04/02 09:37:49 @@ -417,6 +417,7 @@ /* Call the scheduler before returning from a syscall/trap. */ \ 3: SAVE_EXTRA_STATE_FOR_FUNCALL(type); /* Prepare for funcall. */ \ jarl CSYM(schedule), lp; /* Call scheduler */ \ + di; /* The scheduler enables interrupts */\ RESTORE_EXTRA_STATE_FOR_FUNCALL(type); \ br 1b; \ \ @@ -433,6 +434,7 @@ movea PTO, sp, r6; /* Arg 1: struct pt_regs *regs */ \ mov r0, r7; /* Arg 2: sigset_t *oldset */ \ jarl CSYM(do_signal), lp; /* Handle any signals */ \ + di; /* sig handling enables interrupts */ \ RESTORE_EXTRA_STATE(type); /* Restore extra regs. */ \ br 1b; Index: arch/v850/kernel/gbus_int.c =================================================================== RCS file: /var/cvs/uClinux-2.4.x/arch/v850/kernel/gbus_int.c,v retrieving revision 1.1 diff -u -r1.1 gbus_int.c --- arch/v850/kernel/gbus_int.c 2002/01/10 12:36:30 1.1 +++ arch/v850/kernel/gbus_int.c 2002/04/02 09:37:50 @@ -1,7 +1,7 @@ /* * arch/v850/kernel/gbus_int.c -- Midas labs GBUS interrupt support * - * Copyright (C) 2001 NEC Corporation + * Copyright (C) 2001, 2002 NEC Corporation * Copyright (C) 2001 Miles Bader * * This file is subject to the terms and conditions of the GNU General @@ -100,7 +100,7 @@ interrupt handler. */ static void gbus_int_handle_irq (int irq, void *dev_id, struct pt_regs *regs) { - unsigned w; + unsigned w; unsigned gint = irq - IRQ_GINT (0); for (w = 0; w < GBUS_INT_NUM_WORDS; w++) { @@ -129,6 +129,12 @@ } while (status); } } + + /* Toggle the `all enable' bit back and forth, which should cause + another edge transition if there are any other interrupts + still pending, and so result in another CPU interrupt. */ + GBUS_INT_ENABLE (0, gint) &= ~0x1; + GBUS_INT_ENABLE (0, gint) |= 0x1; } Index: arch/v850/kernel/process.c =================================================================== RCS file: /var/cvs/uClinux-2.4.x/arch/v850/kernel/process.c,v retrieving revision 1.2 diff -u -r1.2 process.c --- arch/v850/kernel/process.c 2002/01/10 12:36:30 1.2 +++ arch/v850/kernel/process.c 2002/04/02 09:37:50 @@ -88,7 +88,8 @@ { int gpr_base, gpr_offs; - printk (" pc 0x%08lx psw 0x%08lx\n", regs->pc, regs->psw); + printk (" pc 0x%08lx psw 0x%08lx kernel_mode %d\n", + regs->pc, regs->psw, regs->kernel_mode); printk (" ctpc 0x%08lx ctpsw 0x%08lx ctbp 0x%08lx\n", regs->ctpc, regs->ctpsw, regs->ctbp);