patch-2.2.0-pre2 linux/arch/ppc/kernel/time.c
Next file: linux/arch/ppc/lib/locks.c
Previous file: linux/arch/ppc/kernel/smp.c
Back to the patch index
Back to the overall index
- Lines: 50
- Date:
Wed Dec 30 10:55:07 1998
- Orig file:
v2.2.0-pre1/linux/arch/ppc/kernel/time.c
- Orig date:
Tue Dec 22 14:16:54 1998
diff -u --recursive --new-file v2.2.0-pre1/linux/arch/ppc/kernel/time.c linux/arch/ppc/kernel/time.c
@@ -1,5 +1,5 @@
/*
- * $Id: time.c,v 1.38 1998/11/16 15:56:15 cort Exp $
+ * $Id: time.c,v 1.39 1998/12/28 10:28:51 paulus Exp $
* Common time routines among all ppc machines.
*
* Written by Cort Dougan (cort@cs.nmt.edu) to merge
@@ -78,6 +78,26 @@
unsigned dcache_locked = unlock_dcache();
hardirq_enter(cpu);
+#ifdef __SMP__
+ {
+ unsigned int loops = 100000000;
+ while (test_bit(0, &global_irq_lock)) {
+ if (smp_processor_id() == global_irq_holder) {
+ printk("uh oh, interrupt while we hold global irq lock!\n");
+#ifdef CONFIG_XMON
+ xmon(0);
+#endif
+ break;
+ }
+ if (loops-- == 0) {
+ printk("do_IRQ waiting for irq lock (holder=%d)\n", global_irq_holder);
+#ifdef CONFIG_XMON
+ xmon(0);
+#endif
+ }
+ }
+ }
+#endif /* __SMP__ */
while ((dval = get_dec()) < 0) {
/*
@@ -150,12 +170,15 @@
save_flags(flags);
cli();
*tv = xtime;
+ /* XXX we don't seem to have the decrementers synced properly yet */
+#ifndef __SMP__
tv->tv_usec += (decrementer_count - get_dec())
* count_period_num / count_period_den;
if (tv->tv_usec >= 1000000) {
tv->tv_usec -= 1000000;
tv->tv_sec++;
}
+#endif
restore_flags(flags);
}
FUNET's LINUX-ADM group, linux-adm@nic.funet.fi
TCL-scripts by Sam Shen, slshen@lbl.gov