summaryrefslogtreecommitdiffstats
path: root/kernel/itimer.c
diff options
context:
space:
mode:
authorRalf Baechle <ralf@linux-mips.org>2000-02-23 00:40:54 +0000
committerRalf Baechle <ralf@linux-mips.org>2000-02-23 00:40:54 +0000
commit529c593ece216e4aaffd36bd940cb94f1fa63129 (patch)
tree78f1c0b805f5656aa7b0417a043c5346f700a2cf /kernel/itimer.c
parent0bd079751d25808d1972baee5c4eaa1db2227257 (diff)
Merge with 2.3.43. I did ignore all modifications to the qlogicisp.c
driver due to the Origin A64 hacks.
Diffstat (limited to 'kernel/itimer.c')
-rw-r--r--kernel/itimer.c10
1 files changed, 5 insertions, 5 deletions
diff --git a/kernel/itimer.c b/kernel/itimer.c
index 7d38ac1ac..6c38477be 100644
--- a/kernel/itimer.c
+++ b/kernel/itimer.c
@@ -48,7 +48,9 @@ int do_getitimer(int which, struct itimerval *value)
case ITIMER_REAL:
interval = current->it_real_incr;
val = 0;
- start_bh_atomic();
+ /*
+ * FIXME! This needs to be atomic, in case the kernel timer happens!
+ */
if (timer_pending(&current->real_timer)) {
val = current->real_timer.expires - jiffies;
@@ -56,7 +58,6 @@ int do_getitimer(int which, struct itimerval *value)
if ((long) val <= 0)
val = 1;
}
- end_bh_atomic();
break;
case ITIMER_VIRTUAL:
val = current->it_virt_value;
@@ -102,6 +103,7 @@ void it_real_fn(unsigned long __data)
p->real_timer.expires = jiffies + interval;
add_timer(&p->real_timer);
}
+ timer_exit(&p->real_timer);
}
int do_setitimer(int which, struct itimerval *value, struct itimerval *ovalue)
@@ -115,9 +117,7 @@ int do_setitimer(int which, struct itimerval *value, struct itimerval *ovalue)
return k;
switch (which) {
case ITIMER_REAL:
- start_bh_atomic();
- del_timer(&current->real_timer);
- end_bh_atomic();
+ del_timer_sync(&current->real_timer);
current->it_real_value = j;
current->it_real_incr = i;
if (!j)