patch-2.4.18 linux/arch/cris/kernel/entry.S
Next file: linux/arch/cris/kernel/head.S
Previous file: linux/arch/cris/drivers/usb-host.c
Back to the patch index
Back to the overall index
- Lines: 93
- Date:
Tue Feb 5 17:03:01 2002
- Orig file:
linux.orig/arch/cris/kernel/entry.S
- Orig date:
Mon Feb 18 20:18:39 2002
diff -Naur -X /home/marcelo/lib/dontdiff linux.orig/arch/cris/kernel/entry.S linux/arch/cris/kernel/entry.S
@@ -1,4 +1,4 @@
-/* $Id: entry.S,v 1.35 2001/10/30 17:10:15 bjornw Exp $
+/* $Id: entry.S,v 1.38 2002/01/16 15:15:30 bjornw Exp $
*
* linux/arch/cris/entry.S
*
@@ -7,6 +7,18 @@
* Authors: Bjorn Wesen (bjornw@axis.com)
*
* $Log: entry.S,v $
+ * Revision 1.38 2002/01/16 15:15:30 bjornw
+ * Use a C-code compatible watchdog reset when NICE_DOGGY is enabled
+ *
+ * Revision 1.37 2001/12/07 17:03:55 bjornw
+ * Call a c-hook called watchdog_bite_hook instead of show_registers directly
+ *
+ * Revision 1.36 2001/11/22 13:36:36 bjornw
+ * * In ret_from_intr, check regs->dccr for usermode reentrance instead of
+ * DCCR explicitely (because the latter might not reflect current reality)
+ * * In mmu_bus_fault, set $r9 _after_ calling the C-code instead of before
+ * since $r9 is call-clobbered and is potentially needed afterwards
+ *
* Revision 1.35 2001/10/30 17:10:15 bjornw
* Add some syscalls
*
@@ -217,8 +229,11 @@
ret_from_intr:
;; check for resched only if we're going back to user-mode
-
- move $ccr, $r0
+ ;; this test matches the user_regs(regs) macro
+ ;; we cannot simply test $dccr, because that does not necessarily
+ ;; reflect what mode we'll return into.
+
+ move.d [$sp + LDCCR], $r0; regs->dccr
btstq 8, $r0 ; U-flag
bpl _Rexit ; go back directly
nop
@@ -468,8 +483,6 @@
moveq 1, $r10
push $r10 ; frametype == 1, BUSFAULT frame type
- moveq 0, $r9 ; busfault is equivalent to an irq
-
move.d $sp, $r10 ; pt_regs argument to handle_mmu_bus_fault
jsr handle_mmu_bus_fault ; in arch/cris/mm/fault.c
@@ -479,6 +492,8 @@
;; process due to a SEGV, scheduled due to a page blocking or
;; whatever.
+ moveq 0, $r9 ; busfault is equivalent to an irq
+
ba ret_from_intr
nop
@@ -559,6 +574,16 @@
;; We'll see this in ksymoops dumps.
Watchdog_bite:
+#ifdef CONFIG_ETRAX_WATCHDOG_NICE_DOGGY
+ ;; We just restart the watchdog here to be sure we dont get
+ ;; hit while printing the watchdogmsg below
+ ;; This restart is compatible with the rest of the C-code, so
+ ;; the C-code can keep restarting the watchdog after this point.
+ ;; The non-NICE_DOGGY code below though, disables the possibility
+ ;; to restart since it changes the watchdog key, to avoid any
+ ;; buggy loops etc. keeping the watchdog alive after this.
+ jsr reset_watchdog
+#else
;; We need to extend the 3.3ms after the NMI at watchdog bite, so we have
;; time for an oops-dump over a 115k2 serial wire. Another 100ms should do.
@@ -575,7 +600,8 @@
^ WD_INIT) \
| IO_STATE (R_WATCHDOG, enable, start), $r10
move.d $r10, [$r11]
-
+#endif
+
;; Note that we don't do "setf m" here (or after two necessary NOPs),
;; since *not* doing that saves us from re-entrancy checks. We don't want
;; to get here again due to possible subsequent NMIs; we want the watchdog
@@ -585,7 +611,7 @@
jsr printk
move.d $sp, $r10
- jsr show_registers
+ jsr watchdog_bite_hook
;; This nop is here so we see the "Watchdog_bite" label in ksymoops dumps
;; rather than "spurious_interrupt".
FUNET's LINUX-ADM group, linux-adm@nic.funet.fi
TCL-scripts by Sam Shen (who was at: slshen@lbl.gov)