X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=arch%2Fmips%2Fkernel%2Fsysirix.c;h=fc36083fa2dcfc3c44813b7ea097328c8354dc0f;hb=987b0145d94eecf292d8b301228356f44611ab7c;hp=a456f78a3bf66e69ac21e3c67f4571c9508ea124;hpb=f7ed79d23a47594e7834d66a8f14449796d4f3e6;p=linux-2.6.git diff --git a/arch/mips/kernel/sysirix.c b/arch/mips/kernel/sysirix.c index a456f78a3..fc36083fa 100644 --- a/arch/mips/kernel/sysirix.c +++ b/arch/mips/kernel/sysirix.c @@ -646,7 +646,27 @@ static inline void getitimer_real(struct itimerval *value) asmlinkage unsigned int irix_alarm(unsigned int seconds) { - return alarm_setitimer(seconds); + struct itimerval it_new, it_old; + unsigned int oldalarm; + + if (!seconds) { + getitimer_real(&it_old); + del_timer(¤t->real_timer); + } else { + it_new.it_interval.tv_sec = it_new.it_interval.tv_usec = 0; + it_new.it_value.tv_sec = seconds; + it_new.it_value.tv_usec = 0; + do_setitimer(ITIMER_REAL, &it_new, &it_old); + } + oldalarm = it_old.it_value.tv_sec; + /* + * ehhh.. We can't return 0 if we have an alarm pending ... + * And we'd better return too much than too little anyway + */ + if (it_old.it_value.tv_usec) + oldalarm++; + + return oldalarm; } asmlinkage int irix_pause(void)